From f05d70244c9847e14ecaca72371848ad6042a5a4 Mon Sep 17 00:00:00 2001 From: Tristan Brown <61923052+Tristan-Brown1096@users.noreply.github.com> Date: Mon, 20 Jul 2020 16:21:59 -0500 Subject: [PATCH 1/5] Created using Colaboratory --- ..._131_Vectors_and_Matrices_Assignment.ipynb | 1143 +++++++++++++++++ 1 file changed, 1143 insertions(+) create mode 100644 module1/LS_DS_131_Vectors_and_Matrices_Assignment.ipynb diff --git a/module1/LS_DS_131_Vectors_and_Matrices_Assignment.ipynb b/module1/LS_DS_131_Vectors_and_Matrices_Assignment.ipynb new file mode 100644 index 00000000..898a7f22 --- /dev/null +++ b/module1/LS_DS_131_Vectors_and_Matrices_Assignment.ipynb @@ -0,0 +1,1143 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "LS_DS_131_Vectors_and_Matrices_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yXA3GwWhY9KL", + "colab_type": "text" + }, + "source": [ + "# Part 1 - Scalars and Vectors\n", + "\n", + "For the questions below it is not sufficient to simply provide answer to the questions, but you must solve the problems and show your work using python (the NumPy library will help a lot!) Translate the vectors and matrices into their appropriate python representations and use numpy or functions that you write yourself to demonstrate the result or property. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oNOTv43_Zi9L", + "colab_type": "text" + }, + "source": [ + "## 1.1 Create a two-dimensional vector and plot it on a graph" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "XNqjzQzrkVG7", + "colab_type": "code", + "colab": {} + }, + "source": [ + "#importing important libraries\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "9kGltL_AnXFu", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "27b57e0d-d5d4-455d-906c-01c2a36ff1ad" + }, + "source": [ + "a = [.75,.5]\n", + "\n", + "plt.arrow(0, 0, a[0], a[1], head_width=0.02, head_length=0.01, color='r')\n", + "plt.title('Graph of vector a')\n", + "plt.show()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "unKFT619lk3e", + "colab_type": "text" + }, + "source": [ + "## 1.2 Create a three-dimensional vecor and plot it on a graph" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "atUEd3T6llKm", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "outputId": "3e8d8d2d-1c2e-43ff-ab42-cb7294567011" + }, + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "b = [0.75, 0.5, 0.25]\n", + "\n", + "vectors = [0, 0, 0, 0.75, 0.5, 0.25]\n", + "\n", + "X, Y, Z, U, V, W = vectors\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.quiver(X, Y, Z, U, V, W, length=1)\n", + "ax.set_xlim([0, 1])\n", + "ax.set_ylim([0, 1])\n", + "ax.set_zlim([0, 1])\n", + "ax.set_xlabel('X')\n", + "ax.set_ylabel('Y')\n", + "ax.set_zlabel('Z')\n", + "plt.show()" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b7qFxbKxZmI2", + "colab_type": "text" + }, + "source": [ + "## 1.3 Scale the vectors you created in 1.1 by $5$, $\\pi$, and $-e$ and plot all four vectors (original + 3 scaled vectors) on a graph. What do you notice about these vectors? " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ah6zMSLJdJwL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "05c16e5b-025b-479f-f60a-15cc54695e97" + }, + "source": [ + "from math import e, pi\n", + "print(e)\n", + "print(pi)" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "text": [ + "2.718281828459045\n", + "3.141592653589793\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3qpwDlzXkVf5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "9f76f794-9eba-43b3-b23d-33e81bbfac55" + }, + "source": [ + "a_pi = np.multiply(pi, a)\n", + "a_e = np.multiply(-e, a)\n", + "a_5 = np.multiply(5, a)\n", + "\n", + "plt.arrow(0,0, a_5[0], a_5[1], head_width=0.02, head_length=0.01, color='y')\n", + "plt.arrow(0, 0, a_pi[0], a_pi[1], head_width=0.02, head_length=0.01, color='g')\n", + "plt.arrow(0, 0, a_e[0], a_e[1], head_width=0.02, head_length=0.01, color='b')\n", + "plt.arrow(0, 0, a[0], a[1], head_width=0.02, head_length=0.01, color='r')\n", + "\n", + "plt.xlim(-2.5, 4)\n", + "plt.ylim(-1.5, 3)\n", + "plt.title('Graph of vector a')\n", + "plt.show()" + ], + "execution_count": 29, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G1kFDpmuqMUR", + "colab_type": "text" + }, + "source": [ + "The magnitude of the various vectors varies based on the scalar factor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CS-YSeKtq1Hk", + "colab_type": "text" + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrgqa6sWimbH", + "colab_type": "text" + }, + "source": [ + "## 1.4 Graph vectors $\\vec{a}$ and $\\vec{b}$ and plot them on a graph\n", + "\n", + "\\begin{align}\n", + "\\vec{a} = \\begin{bmatrix} 5 \\\\ 7 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{b} = \\begin{bmatrix} 3 \\\\4 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "I1BGXA_skV-b", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "outputId": "c16d8890-04cd-4aed-b343-fa2be20ec340" + }, + "source": [ + "a = np.array([5, 7])\n", + "b = np.array([3, 4])\n", + "\n", + "plt.arrow(0, 0, a[0], a[1], head_width=0.02, head_length=0.01, color='r')\n", + "plt.arrow(0, 0, b[0], b[1], head_width=0.02, head_length=0.01, color='g')\n", + "\n", + "plt.xlim(-0.5, 5.5)\n", + "plt.ylim(-0.5, 7.5)\n", + "plt.plot()" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 34 + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QN6RU_3gizpw", + "colab_type": "text" + }, + "source": [ + "## 1.5 find $\\vec{a} - \\vec{b}$ and plot the result on the same graph as $\\vec{a}$ and $\\vec{b}$. Is there a relationship between vectors $\\vec{a} \\thinspace, \\vec{b} \\thinspace \\text{and} \\thinspace \\vec{a-b}$" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "68sWHIOPkXp5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "outputId": "38779535-fc25-4bf6-a23e-ecd4fb2ab670" + }, + "source": [ + "c = a-b\n", + "\n", + "plt.arrow(0, 0, a[0], a[1], head_width=0.02, head_length=0.01, color='r')\n", + "plt.arrow(0, 0, b[0], b[1], head_width=0.02, head_length=0.01, color='g')\n", + "plt.arrow(0, 0, c[0], c[1], head_width=0.02, head_length=0.01, color='y')\n", + "\n", + "plt.xlim(-0.5, 5.5)\n", + "plt.ylim(-0.5, 7.5)\n", + "plt.plot()" + ], + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 35 + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3hUZfrG8e9LQEAI1YARKaLSVKREEQEbK4KyWFmxYVtZK9jbrmL92bAu7ioLoigqKlYEFBUF6QlBkBpaINTQQyfk+f3xxiQomkFmcmYm9+e6uDiTM9f4DJA7j++c87zOzBARkehVJugCRETkjymoRUSinIJaRCTKKahFRKKcglpEJMqVjcSLHnbYYdagQYNIvLSISFxKS0tbZ2ZJ+zsXkaBu0KABqampkXhpEZG45JzL/L1zWvoQEYlyCmoRkSinoBYRiXIKahGRKKegFhGJcgpqEZEop6AWEYlyCmoRkSinoBYRiXLFBrVzrrFzbkaRX1ucc7eXRHEiIhLCLeRmNh9oAeCcSwBWAJ9EuC4REcl3oEsfHYFFZva796SLiMS8KVPAOZg5M+hKgAMP6h7Ae/s74Zzr5ZxLdc6lZmdnH3xlIiJBuPpqOOUUf1yvXrC15As5qJ1zhwDdgA/3d97MBphZipmlJCXtd1KfiEj0WrrUd9FDhsAzz4AZVKsWdFXAgY057QJMN7M1kSpGRCQQd98Nzz/vj1evhtq1g63nVw5k6eMyfmfZQ0QkJq1Z47vo55+Hu+7yXXSUhTSEGNTOuUrA2cDHkS1HRKSEPPMMHH64P16yBPr1C7aePxDS0oeZbQNqRrgWEZHI27y5cO356qvhzTcDLScUujNRREqPgQMLQ3r27JgIaYjQnokiIlFlxw6oXBny8uCcc2DUKL82HSPUUYtIfPvoIzj0UB/SkyfD6NExFdKgjlpE4tWePVC/PqxaBa1awbRpUCY2e9PYrFpE5I988w0ccogP6a+/hrS0mA1pUEctIvEkLw9SUiA9HY44wt9tWK5c0FUdtNj9ESMiUtTUqZCQ4EP6ww9hxYq4CGlQRy0isc4MunSBr77yQb1li//wMI6ooxaR2DVnjl97/uorGDAAcnPjLqRBHbWIxKprroG33vLHGzdGzaS7SFBHLSKx5ZdxpG+9BU8/HVXjSCNFHbWIxI577ikcnhSF40gjRUEtItFvzZrCSXd33lk4O7qU0NKHiES3Z5/ddxxpKQtpUEctItGq6DjSnj0LPzgshdRRi0j0KTqO9OefS3VIgzpqEYkmO3ZAYiLs3QudOsXkpLtIUEctItFh+HB/s8revTBpkr+JRSENhNhRO+eqAQOB4wEDrjOzSZEsTERKiT17oEEDWLkSWrSI+Ul3kRDqn8bLwGgzawKcCMyNXEkiUmp8+60fR7pypR9Hmp6ukN6PYjtq51xV4DTgGgAz2w3sjmxZIhLX8vLgpJNg+nRITobMzLiZdBcJofzoOgrIBgY759KdcwOdc5V+/STnXC/nXKpzLjU7OzvshYpInPhlHOn06fDBB76bVkj/oVCCuizQCvivmbUEtgH3//pJZjbAzFLMLCUpKSnMZYpIzDODc8+FNm38h4TbtkH37kFXFRNCCeosIMvMpuQ//ggf3CIioZk71689jxoFr7/ulz7icBxppBS7Rm1mq51zy51zjc1sPtARmBP50kQkLlx7Lbz5pj+O83GkkRLqDS+3AUOdc4cAi4FrI1eSiMSFzEx/2R3AU0/B/b9ZMZUQhRTUZjYDSIlwLSISL+69F557zh+vWlU4VEn+FN1CLiLhs3Zt4YzoO+6AF14Itp44oSvLRSQ8nnuuMKQXL1ZIh5E6ahE5OEXHkV55Jbz9drD1xCF11CLy5w0atO84UoV0RKijFpEDt2MHVKkCubnwl7/4OR2adBcx6qhF5MB8/LG/WSU3148jHTNGIR1h6qhFJDR79kDDhpCVBSee6Gd1aNJdidCfsogU77vv/DjSrCw/0H/GDIV0CVJHLSK/Ly8PTj7ZD/M//HBYtkyT7gKgH4kisn/TpvlxpGlpMGyYv8NQIR0IddQisi8z6NoVRo70j7dt06S7gKmjFpFCv4wjHTkSXnvNh7ZCOnDqqEXEu+46GDzYH2scaVRRRy1S2mVm+uugBw+G//s/30UrpKOKOmqR0uy+++DZZ/2xxpFGLQW1SGmUnQ21avnj22+HF18Mth75Q1r6EClt+vUrDOnFixXSMUAdtUhpsWULVK3qjzWONKaEFNTOuaVADrAXyDUzbcslEksGD/ZXdQDMmgXHHx9sPXJADqSjPtPM1kWsEhEJv507fRe9ezd07KhJdzFKa9Qi8eqTT6BiRR/SEyfCN98opGNUqB21AV875wx43cwG/PoJzrleQC+AevXqha9CETkwublw9NF+gFLz5pCerkl3MS7Uv732ZtYK6ALc4pw77ddPMLMBZpZiZilJSUlhLVJEQjR2rB+ctGwZjB4NP/2kkI4DIXXUZrYi//e1zrlPgJOBcZEsTEQOQF4etGkDqan+0rvly/38aIkLxf6odc5Vcs4l/nIMdAJ+jnRhIhKi1FQ/jjQ1Fd5/H9asUUjHmVA66trAJ85/CFEWeNfMRke0KhEpnhl06wYjRvjHGkcat4oNajNbDJxYArWISKjmzYOmTf3xf/8LN94YbD0SUbozUSTW/P3vMGiQP96wAapXD7YeiTh9HCwSK5Yt89dBDxoETz7plz4U0qWCOmqRWPDAA/D00/5Y40hLHQW1SDQrOo60Tx946aVg65FAaOlDJFo9/3xhSC9apJAuxdRRi0SbouNIL78c3nlHMzpKOXXUItFk8ODCkJ45E4YOVUiLOmqRqLBzp99QdtcujSOV31BHLRK0Tz/140h37YIJEzSOVH5DHbVIUHJz4ZhjIDPT77gyY4af2SHyK+qoRYLwyzjSzEwYNcpvj6WQlt+hjlqkJOXlwSmnwLRpkJQEWVmadCfFUkctUlLS0nzXPG0avPcerF2rkJaQqKMWiTQzOP98+OIL/3jrVqhUKdiaJKaooxaJpHnz/FZYX3wB//mPD22FtBwgddQikXLDDTBwoD/WOFI5COqoRcJt+XJ/HfTAgfD44xpHKgdNHbVIOD34IDz1lD9euRKSk4OtR+JCyEHtnEsAUoEVZtY1ciWJxKCi40h794aXXw62HokrB7L00QeYG6lCRGLWiy/uO45UIS1hFlJQO+eOBM4DBka2HJEYkpPj16LvvBMuu8zfzNKwYcHp+evms277ugALlHgRakf9EnAvkPd7T3DO9XLOpTrnUrOzs8NSnEjUevNNqFLFH//0E7z77j6DlPpN7EeTV5vQ4rUWwdQncaXYNWrnXFdgrZmlOefO+L3nmdkAYABASkqKha1CkWiycyfUqAE7dsBZZ/1m0t2arWs4/Hm/n2H3Zt1556J3gqpU4kgoHXU7oJtzbinwPnCWc07/+qT0+ewzP450xw4/jvTbb/cJ6Xu+vqcgpBfcuoAPun/AIQm6RVwOXrEdtZk9ADwAkN9R321mV0a4LpHokZsLxx4LS5fCccf5pY4ik+4Wb1zM0a8cDUCfNn14qbP2NpTw0nXUIn/k++/hzDP98ahR0LlzwSkz46pPrmLorKEArLxzJcmJum5awu+AgtrMvge+j0glItEkLw9OPRWmTIGaNf3NK0Um3c1YPYOWr7cE4KmOT3F/+/uDqlRKAXXUIr+WlgYpKf743Xf9pXf5zIyOQzoydulYADbet5FqFaoFUaWUIgpqkV+YwQUXwOef+8e/Gkc6LnMcp795OgAD/zqQ61tdH0SVUgopqEUA5s+HJk388auvws03F5zKzcvluFePY8GGBVQpX4XVd62mYrmKARUqpZGCWqRXL/jf//zxr8aRfjrvUy4cdqE/vvRTzm9yfhAVSimnoJbSa/lyqFfPHz/2GDz0UMGpHXt2UKtfLbbu3kqTmk2YdfMsypbRt4sEQ/OopXT65z8LQ3rFin1CetD0QRz6f4eydfdWfrjmB+beOlchLYHSvz4pXdat87t/A9x2G7zySsGpTTs3Uf0Zv+zR8aiOjLlqDK7InYciQVFHLaXHiy8WhvTChfuE9NM/Pl0Q0jP+MYNven6jkJaooY5a4l9OTuGkux499pl0tzJnJXVeqAPAlSdcyZALhyigJeooqCW+DRkCV1/tj2fMgBNPLDjVZ3QfXpniu+pFvRfRsHrD/b2CSOAU1BKfdu70t35v3w5nnAHffVfQRWesz6BR/0YA3N32bp7r9FyAhYoUT0Et8efzz+H8/Oudf/wR2rUD/O3fl350KR/O+RCA1Xetpnbl2kFVKRIyBbXEj9xcaNwYFi+GZs1g5syCcaRpK9NI+Z+f39Hv7H7cdepdQVYqckAU1BIffvjBL3EAjBwJXboAkGd5dBjcgYnLJwKw6b5NVK1QNaAiRf4cBbXENjM/jnTyZL9F1qpVBeNIv1vyHR2HdATgrQveoueJPYOsVORPU1BL7Jo+HVq39sdFxpHu2buHxv0bs2TTEmpWrEnWnVlUKFshwEJFDo6CWmKPGVx4od/DEPYZRzp8znAu+fASAEZcNoLzGp0XVJUiYaOgltiyYIH/wBCgf3+45RYAtu3eRs1na7Jr7y6a12rO9H9MJ6FMwh+8kEjs0C3kEjtuvLEwpNevLwjp11Nfp/JTldm1dxcTrpvATzf9pJCWuFJsR+2cqwCMA8rnP/8jM+sb6cJECmRlQd26/vjRR+HhhwHYsGMDNZ+tCcA5R5/DqCtG6fZviUuhdNS7gLPM7ESgBdDZOXdKZMuS0sDMyMvL/eMn/etfhSG9YkVBSD/+w+MFIT3rplmMvnK0QlriVrEdtZkZsDX/Ybn8XxbJoiT+7d27nfHj/QeAZ5yxn39ORceR3nKLX48GsrZkUfdFH9zXtLiGN7q9oYCWuBfSGrVzLsE5NwNYC4wxsyn7eU4v51yqcy41Ozs73HVKHNm48duCkG7R4offPuGllwpDOiOjIKRv/vLmgpBe0mcJg88frJCWUiGkqz7MbC/QwjlXDfjEOXe8mf38q+cMAAYApKSkqOOW/Zo16wLWr/+M8uXrc8opi3CuyId+RceRdu8Ow4aBc8xfN58mr/qNZx9s/yBPdnwygMpFgnNAl+eZ2Sbn3FigM/Bzcc8X+cXu3dlMnFgLgEaNBnDEETfs+4T9jCM1My58/wI+m++vl15791qSKiWVZNkiUSGUqz6SgD35IV0ROBt4JuKVSdxYvfpt5s3zt2+3bbuS8uWTC0/u2gWHHeZvWikyjnTqiqm0GdgGgJc7v0zvNr0DqFwkOoTSUScDbzn//6hlgA/MbERky5J4YJbHtGnHs337XKpXP5vmzb/ad035iy+gWzd/PH48tG9PnuXR5n8nk7oyFYAt928hsXxiANWLRI9QrvqYCbQsgVokjmzfnsHUqX44/wknfEnNmucWnszNhSZNYNEi//vPP0NCAmMWjaHTO50AGHrRUC4/4fIgSheJOrqFXMIuM/NJliz5FwDt22+hbNkiHfG4cXD66f54xAg47zx2791NwxfqsyJnBcmVk1nSZwnly5YPoHKR6KSglrDJy9vFuHEVAeOII26iUaP/FJ408zutTJoE1av7caTlyzPs52H0GN4DgFFXjKLzMZ2DKV4kiimoJSw2b55EevqpALRunUpiYuvCk+np0KqVPx46FC6/nK27t1Ll0YoYRuvk1kz5+xTN5xD5HQpqOWjz5l3H6tWDSUioTLt2GyhTppw/YQYXXwyffOIf5+RA5cr0n9qf20bdBsCk6ydxypGaSCDyRxTU8qft2bOJCROqA3D00f2oW7fIPoRFx5H++99w662s276OpEf9enXXRl35vMfnurNQJAQKavlTsrM/ZfbsCwFo02YxFSseVXjyppvgtdf88fr1UKMGD499mMfHPQ7AnJvn0DSpaUmXLBKzFNRyQMyM9PT2bNkykcqVW9O69bTCrrjoONJHHoG+fVm2eRn1H/VT7nq17sXrXV8PpnCRGKaglpDt3LmcyZPrAdCs2TBq1fpb4cmHHoInnvDHK1bAEUdwwxc3MHD6QACW3b6MulXrlnTJInFBQS0hycrqz8KF/gPAdu3WU65cDX9i/Xp/CzjAzTfDq68ye+1sjn+0DgB9T+/LI2c8EkDFIvFDQS1/KC8vl0mTktmzZx21avWgWbP3Ck++8gr06eOPMzKwo4+m67vnMTJjJADr7llHzUNrBlC1SHxRUMvv2rr1J1JTWwB+bnS1aqf9cgIS8+82vOQS+OADJmVN5tTHjgWgf5f+3HLyLUGULBKXFNSyXwsX3kVW1gsAdOiwg4SECv7E229DTz8Jj/R09jY/gZMGtCZ9dTply5Rl430bqXxI5YCqFolPCmrZx9692xg/3gdtvXr/omFDf0kdu3b5XVdycvysjrFjGbVwNOc+7ud1DbtkGH877m+/97IichAU1FJgw4ZvmDnzbABOOmkOlSrlX+s8YgT89a/+eNw4drU9mfrPJ7Nm2xrqVa1Hxm0ZHJJwSEBVi8S/kPZMlPhmZsya1Y2ZM8+mQoWjOP30vT6k9+6FRo18SDduDLm5DK26jApPVmDNtjWMuWoMmbdnKqRFIkwddSm3e/daJk6sDUDjxgNJTr7enxg/Hk7L//BwxAi2/KUDVZ/w/1za1GnDxOsnUsbp57xISdB3Wim2evWQgpBu23alD2kz6NDBh3S1arBzJy/VzKDq01UBmPr3qUz++2SFtEgJUkddCpnlMXVqM3bsmE/16p1o3ny0vw18xgxomb+ZzzvvsPaCs6n9tL/a46KmF/FR9480REkkAMW2Rc65us65sc65Oc652c65PiVRmETG9u0L+OGHBHbsmM8JJ4zkxBO/woEfR/pLSOfk8EDtn6ndz3fb826Zx/C/DVdIiwQklI46F7jLzKY75xKBNOfcGDObE+HaJMyWLn2cpUsfBopskZWR4T8wBHjlFZZc2ZWGz/ubWW456Rb6n9s/qHJFJF+xHbWZrTKz6fnHOcBcoE6kC5PwycvbxfffO5YufZg6dW7ljDPMh/TNNxeEtGVnc23d6TR8pSEAWXdkKaRFosQBrVE75xrgdySfsp9zvYBeAPXq1QtDaRIO+26RlUZiYis/3e7II/0T+vZl1k0X0/zVJACeOPMJ/nnaP4MqV0T2I+SP7p1zlYHhwO1mtuXX581sgJmlmFlKUlJSOGuUP2nu3GtJTz+VhIQqnHbabh/SjzxSENK2fDlnHz2B5q81B2D9vesV0iJRKKSO2jlXDh/SQ83s48iWJAdr3y2ynqdu3Tv3HUd6001MuP8K2g/y86Ff7/o6vVr3CqpcESlGsUHt/Ef9g4C5ZvZC5EuSg5Gd/QmzZ18EQJs2S6hYsYHfs7B3bwBy582hxbfdmT34vxxa7lCy78nm0HKHBlixiBQnlI66HXAVMMs5NyP/aw+a2cjIlSUHym+R1Y4tWyaRmJhCq1ZTcdu2wS+X1F18MV880ZNu7zcDYPjfhnNR04sCrFhEQlVsUJvZj4AuoI1iO3cuY/Lk+gA0a/YBtWp1h3fegauu8uenTeKIb89l47DhHFPjGObcPIdyCeWCLFlEDoDuTIxxWVmvsHChvwepXbv1lMurBFWrwpYt0KEDb758Ldd+3haA73p+x5lHnRlkuSLyJyioY1ReXi4TJ9YmN3cDtWpdTrNmQ+HLL6FrVwA2fzeSauPOhc/Hc1q90xh7zVjN5xCJUQrqGJSTM4O0NH+7d4sW46mW2NaPIV2wABo14rlB13Hvt+cCML3XdFomtwyyXBE5SArqGJORcQcrVrwE5G+RNXEanOb/Gld/PITkmT3h2/u59LhLee/i9zSfQyQOKKhjRNEtsurXf4ijGjzqt8QaPx6qVOHu96/j+al+L8OM2zI4psYxQZYrImGkoI4BGzaMYebMTgCcdNJcKmXshDJ+vXnRG/04ZtndMPUlbm9zOy92fjHIUkUkAhTUUczM+PnnbqxfP4IKFY6mzcnzcZf2gI8+woAr3+/Ou/PuBmDlnStJTkwOtmARiQgFdZTavXsNEyceDkDjxoNI3nYaJPi/rhnP30PLnOdg3oc885dnuLfdvUGWKiIRpqCOQqtWvcn8+dcC0LbtKsrf+Tj853ryHJz1+qn8sPI5ADbet5FqFaoFWaqIlAAFdRTxW2Q1YceODGrU6MIJNQbgKvjljB8e6skZCUNg5UTe6PYG17a8NuBqRaSkKKijxPbtC5g6tTEAzZuPpsa/J8MjddlTBo7rdxQZW4ZQtXxVVt21iorlKgZcrYiUJAV1FFi69DGWLu0LQPvjMilb08/t+LR3Jy6s8TVsWcJnPT6jW+NuQZYpIgFRUAcoL28X48b5Xb7r1LmNY79qBGfWZ3s5qNW3Ittyv6bpYU2ZedNMypbRX5VIaaXv/oBs3jyB9PT2ALRuOp7EwzsAMPD6ltxQNx1ydzDumnF0qN8hyDJFJAooqAMwd+7VrFkzhISEqrRb9gplzuzAxgpQ436AdDoe1ZExV43R7d8iAiioS9SePRuZMKEGAEc3eI66LZ+ETVfz1BX1efDYTAB+uvEnmtduHmSZIhJlFNQlJDt7OLNnXwLAKTsGU+Goa1mZCHUeAcjkquZX8dYFb6mLFpHfUFBHmJkxfXpbcnKmkJh4Mq2u2ISbfy29e1Tl3002A7Co9yIaVm8YcKUiEq1C2dz2DaArsNbMjo98SfFj585MJk9uAECzMo9RK+VhMmpAo0cANnPPqffw7NnPBlihiMSCUDrqN4H+wJDIlhJfsrJeZuHC2wFo91Rbyn79MN0vK8tHjXMBWH3XampXrh1kiSISI0LZ3Hacc65B5EuJD36LrFrk5m6kdrnzaNr+S9KSJ5HyCEAuL3R6gTva3hFwlSISS8K2Ru2c6wX0AqhXr164XjamFN0iq+XHZ5LY/0vaXQcT8/84Nt+/mSrlqwRYoYjEorDtdmpmA8wsxcxSkpKSwvWyMSMj4/aCkO7QCVJHjCWhrw/pIRcMwfqaQlpE/hRd9XGQcnO38uOPiQDUn30SR/aexjG3wdLqcNihh7H8juVUKFsh4CpFJJYpqA/Chg1fMXNmZwBO7gkjE6fR8GF/bsRlIziv0XkBVici8SKUy/PeA84ADnPOZQF9zWxQpAuLZmbGrFnnsWHDKCpur8FxF26g+r2wuyy0qN2C1F6pJJRJCLpMEYkToVz1cVlJFBIr9tki6xn4bN0GTnnQn5tw3QROrXtqgNWJSDzS0scBWLVqMPPnXwdAk8sh+R/+612O6cKXl3+p279FJCIU1CEwy2PKlEbs3LmIGpPg06/gzPyQnnXTLI6vpRs2RSRyFNTF2L59PlOnNgHgiL7Q+CzgTLiu5XUM6laql+pFpIQoqP/AkiV9ycx8DIDhL0P/s/zXl/ZZSv1q9QOsTERKEwX1fuzdu5Px4/0GsoeOgDaJQAt4sP2DPNnxyWCLE5FSR0H9K5s2/ciMGX77q3c+gkH5N1muvXstSZVK3x2XIhI8BXURc+f2ZM2at2ErdEyDvCR4ufPL9G7TO+jSRKQUU1Cz7xZZn6XBS1v917fcv4XE8okBViYiEsahTLFq7dqPCkK6x2Qf0kMvGor1NYW0iESFUttR+y2y2pCTM42MDdBrFhxRKZmddy+hfNnyQZcnIlKgVAZ10S2yHp4N49fB6CtGc84x5wRbmIjIfpS6oF6+/CUWLfI7rPx1AjSpfiK5D6VpiJKIRK1SE9R5eblM+LEme/O2MHo1PDMfJl8/mTZHtgm6NBGRP1QqgjonJ520tFYA3JoODav+hbyHv9YQJRGJCXEf1Bmz/sGK9QMA6DQOfrppDk2TmgZclYhI6OI2qItukTV4KVQseym7H34/2KJERP6EuAzq9Ss/ZdaCCwHoORUm9MqkbrXSuTO6iMS+uApqM2Pi6KbsqTif5dth8eYbWHbvgKDLEhE5KCEFtXOuM/AykAAMNLOnI1rVn7ArJ5NJaQ2gIjw9D4ZeuZaalTVESURiX7G3kDvnEoBXgS5AM+Ay51yzSBd2IMZ/cakPaWDB6hsYfaMppEUkboTSUZ8MLDSzxQDOufeB84E5kSwsVEOGVaBe7V1MzoZbz93IGZWqBV2SiEhYhTKUqQ6wvMjjrPyv7cM518s5l+qcS83Ozg5XfcXatSeBTWsu4f7uRmWFtIjEobB9mGhmA4ABACkpKRau1y3ODVduK6n/lIhIIELpqFcAdYs8PjL/ayIiUgJCCeppwLHOuaOcc4cAPYDPI1uWiIj8otilDzPLdc7dCnyFvzzvDTObHfHKREQECHGN2sxGAiMjXIuIiOxHqd+KS0Qk2imoRUSinIJaRCTKKahFRKKcglpEJMopqEVEopyCWkQkyimoRUSinDML//wk51w2kBn2F96/w4B1JfTfCoLeX2zT+4tdJf3e6pvZfgfpRySoS5JzLtXMUoKuI1L0/mKb3l/siqb3pqUPEZEop6AWEYly8RDU8b7NuN5fbNP7i11R895ifo1aRCTexUNHLSIS1xTUIiJRLqaD2jnX2Tk33zm30Dl3f9D1hJNz7g3n3Frn3M9B1xIJzrm6zrmxzrk5zrnZzrk+QdcULs65Cs65qc65n/Lf26NB1xQJzrkE51y6c25E0LWEm3NuqXNulnNuhnMuNfB6YnWN2jmXACwAzgay8Hs7XmZmcwItLEycc6cBW4EhZnZ80PWEm3MuGUg2s+nOuUQgDbggHv7+nHMOqGRmW51z5YAfgT5mNjng0sLKOXcnkAJUMbOuQdcTTs65pUCKmUXFzTyx3FGfDCw0s8Vmtht4Hzg/4JrCxszGARuCriNSzGyVmU3PP84B5gJ1gq0qPMzbmv+wXP6v2OyIfodz7kjgPGBg0LWUBrEc1HWA5UUeZxEn3+iljXOuAdASmBJsJeGTvywwA1gLjDGzuHlv+V4C7gXygi4kQgz42jmX5pzrFXQxsRzUEgecc5WB4cDtZrYl6HrCxcz2mlkL4EjgZOdc3CxfOee6AmvNLC3oWiKovZm1AroAt+QvRQYmloN6BVC3yOMj878mMSJ//XY4MNTMPg66nkgws03AWKBz0LWEUTugW/467vvAWc65d4ItKbzMbEX+7yX9QcEAAADmSURBVGuBT/BLrYGJ5aCeBhzrnDvKOXcI0AP4POCaJET5H7gNAuaa2QtB1xNOzrkk51y1/OOK+A+85wVbVfiY2QNmdqSZNcB/331nZlcGXFbYOOcq5X/AjXOuEtAJCPTqq5gNajPLBW4FvsJ/EPWBmc0Otqrwcc69B0wCGjvnspxz1wddU5i1A67Cd2Mz8n+dG3RRYZIMjHXOzcQ3FGPMLO4uYYtjtYEfnXM/AVOBL81sdJAFxezleSIipUXMdtQiIqWFglpEJMopqEVEopyCWkQkyimoRUSinIJaRCTKKahFRKLc/wNQYx1cqRK/tAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SvlQx6I-smhl", + "colab_type": "text" + }, + "source": [ + "The new vector appears on the opposite side of the larger original vector from the original smaller one." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1ZPVuJAlehu_", + "colab_type": "text" + }, + "source": [ + "## 1.6 Find $c \\cdot d$\n", + "\n", + "\\begin{align}\n", + "\\vec{c} = \\begin{bmatrix}7 & 22 & 4 & 16\\end{bmatrix}\n", + "\\qquad\n", + "\\vec{d} = \\begin{bmatrix}12 & 6 & 2 & 9\\end{bmatrix}\n", + "\\end{align}\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2_cZQFCskYNr", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "7ceb8228-f302-41b2-fab8-6940672bb213" + }, + "source": [ + "c = np.array([7, 22, 4, 16])\n", + "d = np.array([12, 6, 2, 9])\n", + "\n", + "np.vdot(c,d)" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "368" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 37 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cLm8yokpfg9B", + "colab_type": "text" + }, + "source": [ + "## 1.7 Find $e \\times f$\n", + "\n", + "\\begin{align}\n", + "\\vec{e} = \\begin{bmatrix} 5 \\\\ 7 \\\\ 2 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{f} = \\begin{bmatrix} 3 \\\\4 \\\\ 6 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ku-TdCKAkYs8", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "abb52cee-9388-4e83-cf17-f32fe46b4678" + }, + "source": [ + "e = np.array([[5],\n", + " [7],\n", + " [2]])\n", + "f = np.array([[3],\n", + " [4],\n", + " [6]])\n", + "np.cross(e, f, axis=0)" + ], + "execution_count": 42, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 34],\n", + " [-24],\n", + " [ -1]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 42 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-TN8wO2-h53s", + "colab_type": "text" + }, + "source": [ + "## 1.8 Find $||g||$ and then find $||h||$. Which is longer?\n", + "\n", + "\\begin{align}\n", + "\\vec{g} = \\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ 8 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{h} = \\begin{bmatrix} 3 \\\\3 \\\\ 3 \\\\ 3 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-5VKOMKBlgaA", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "870f7fef-0f98-48c1-aa47-40d288b9b2fb" + }, + "source": [ + "g = np.array([[1],\n", + " [1],\n", + " [1],\n", + " [8]])\n", + "h = np.array([[3],\n", + " [3],\n", + " [3],\n", + " [3]])\n", + "\n", + "print(np.linalg.norm(g, axis=0))\n", + "np.linalg.norm(h, axis=0)" + ], + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[8.18535277]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([6.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 48 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6K-PRImswvmI", + "colab_type": "text" + }, + "source": [ + "The norm of $\\vec g$ is longer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "njrWIMS-ZAoH", + "colab_type": "text" + }, + "source": [ + "# Part 2 - Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GjkcAVIOmOnn", + "colab_type": "text" + }, + "source": [ + "## 2.1 What are the dimensions of the following matrices? Which of the following can be multiplied together? See if you can find all of the different legal combinations.\n", + "\\begin{align}\n", + "A = \\begin{bmatrix}\n", + "1 & 2 \\\\\n", + "3 & 4 \\\\\n", + "5 & 6\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "B = \\begin{bmatrix}\n", + "2 & 4 & 6 \\\\\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "C = \\begin{bmatrix}\n", + "9 & 6 & 3 \\\\\n", + "4 & 7 & 11\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "D = \\begin{bmatrix}\n", + "1 & 0 & 0 \\\\\n", + "0 & 1 & 0 \\\\\n", + "0 & 0 & 1\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "E = \\begin{bmatrix}\n", + "1 & 3 \\\\\n", + "5 & 7\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HXL4pP_gxLJi", + "colab_type": "text" + }, + "source": [ + "##$A$: (3,2)\n", + "\n", + "$A$$B$ = (3,2) (1,3) = cannot do\n", + "\n", + "$A$$C$ = (3,2) (2,3) = can do\n", + "\n", + "$A$$D$ = (3,2) (3,3) = cannot do\n", + "\n", + "$A$$E$ = (3,2) (2,2) = can do" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kOWZDrAoyMA1", + "colab_type": "text" + }, + "source": [ + "##$B$: (1,3)\n", + "\n", + "$B$$A$ = (1,3) (3,2) = can do\n", + "\n", + "$B$$C$ = (1,3) (2, 3) = cannot do\n", + "\n", + "$B$$D$ = (1,3) (3, 3) = can do\n", + "\n", + "$B$$E$ = (1,3) (2, 2) = cannot do" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q66WDLc6yt5_", + "colab_type": "text" + }, + "source": [ + "##$C$: (2,3)\n", + "\n", + "$C$$A$ = (2,3) (3,2) = can do\n", + "\n", + "$C$$B$ = (2,3) (1, 3) = cannot do\n", + "\n", + "$C$$D$ = (2,3) (3, 3) = can do\n", + "\n", + "$C$$E$ = (2,3) (2, 2) = cannot do" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6145VL0wzMCJ", + "colab_type": "text" + }, + "source": [ + "##$D$: (3,3)\n", + "\n", + "$D$$A$ = (3,3) (3,2) = can do\n", + "\n", + "$D$$B$ = (3,3) (1,3) = cannot do\n", + "\n", + "$D$$C$ = (3,3) (2,3) = cannot do\n", + "\n", + "$D$$A$ = (3,3) (2,2) = cannot do" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qeZkg1tj0Vts", + "colab_type": "text" + }, + "source": [ + "##$E$: (2,2)\n", + "\n", + "$E$$A$ = (2,2) (3,2) = cannot do\n", + "\n", + "$E$$B$ = (2,2) (1,3) = cannot do\n", + "\n", + "$E$$C$ = (2,2) (2,3) = can do\n", + "\n", + "$E$$D$ = (2,2) (3,3) = cannot do" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Z69c-uPtnbIx", + "colab_type": "code", + "colab": {} + }, + "source": [ + "A = np.array([[1, 2],\n", + " [3, 4],\n", + " [5, 6]])\n", + "\n", + "B = np.array([2, 4, 6])\n", + "\n", + "C = np.array([[9, 6, 3],\n", + " [4, 7, 11]])\n", + "\n", + "D = np.array([[1, 0, 0],\n", + " [0, 1, 0],\n", + " [0, 0, 1]])\n", + "\n", + "E = np.array([[1, 3],\n", + " [5, 7]])" + ], + "execution_count": 55, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lMOlCoM3ncGa", + "colab_type": "text" + }, + "source": [ + "## 2.2 Find the following products: CD, AE, and BA. What are the dimensions of the resulting matrices? How does that relate to the dimensions of their factor matrices?" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zhKwiSItoE2F", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "outputId": "352ca0d7-bdcb-47d9-93ed-3ec0dd93c1fa" + }, + "source": [ + "print(np.matmul(C, D))\n", + "print(np.matmul(A, E))\n", + "np.matmul(B, A)" + ], + "execution_count": 56, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[ 9 6 3]\n", + " [ 4 7 11]]\n", + "[[11 17]\n", + " [23 37]\n", + " [35 57]]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([44, 56])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 56 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fj6Nu2ch2RrN", + "colab_type": "text" + }, + "source": [ + "The dimensions of the resulting matrices from the above multiplication are based on the exterior dimensions from the multiplicand matices." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p2jmaGLgoFPN", + "colab_type": "text" + }, + "source": [ + "## 2.3 Find $F^{T}$. How are the numbers along the main diagonal (top left to bottom right) of the original matrix and its transpose related? What are the dimensions of $F$? What are the dimensions of $F^{T}$?\n", + "\n", + "\\begin{align}\n", + "F = \n", + "\\begin{bmatrix}\n", + "20 & 19 & 18 & 17 \\\\\n", + "16 & 15 & 14 & 13 \\\\\n", + "12 & 11 & 10 & 9 \\\\\n", + "8 & 7 & 6 & 5 \\\\\n", + "4 & 3 & 2 & 1\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Wl3ElwgLqaAn", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "outputId": "24959a86-8f75-4775-9946-5c057a5e62c9" + }, + "source": [ + "F = np.array([[20, 19, 18, 17],\n", + " [16, 15, 14, 13],\n", + " [12, 11, 10, 9],\n", + " [8, 7, 6, 5],\n", + " [4, 3, 2, 1]])\n", + "F.T" + ], + "execution_count": 57, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[20, 16, 12, 8, 4],\n", + " [19, 15, 11, 7, 3],\n", + " [18, 14, 10, 6, 2],\n", + " [17, 13, 9, 5, 1]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 57 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mDk7LwBa3Aim", + "colab_type": "text" + }, + "source": [ + "The main diagonal is the series along which the matrix is inverted. The dimensions of the original matrix is 5x4, the resulting transposed matix is 4x5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "13ik2LEEZLHn", + "colab_type": "text" + }, + "source": [ + "# Part 3 - Square Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sDBAPUwfp7f7", + "colab_type": "text" + }, + "source": [ + "## 3.1 Find $IG$ (be sure to show your work) 😃\n", + "\n", + "You don't have to do anything crazy complicated here to show your work, just create the G matrix as specified below, and a corresponding 2x2 Identity matrix and then multiply them together to show the result. You don't need to write LaTeX or anything like that (unless you want to).\n", + "\n", + "\\begin{align}\n", + "G= \n", + "\\begin{bmatrix}\n", + "13 & 14 \\\\\n", + "21 & 12 \n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZnqvZBOYqar3", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "9c6823ed-f0e5-42aa-a6b9-5ee37dbe623a" + }, + "source": [ + "I_2 = np.array([[1, 0],\n", + " [0, 1]])\n", + "\n", + "G = np.array([[13, 14],\n", + " [21, 12]])\n", + "\n", + "np.matmul(I_2, G)" + ], + "execution_count": 58, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[13, 14],\n", + " [21, 12]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 58 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DZ_0XTDQqpMT", + "colab_type": "text" + }, + "source": [ + "## 3.2 Find $|H|$ and then find $|J|$.\n", + "\n", + "\\begin{align}\n", + "H= \n", + "\\begin{bmatrix}\n", + "12 & 11 \\\\\n", + "7 & 10 \n", + "\\end{bmatrix}\n", + "\\qquad\n", + "J= \n", + "\\begin{bmatrix}\n", + "0 & 1 & 2 \\\\\n", + "7 & 10 & 4 \\\\\n", + "3 & 2 & 0\n", + "\\end{bmatrix}\n", + "\\end{align}\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "5QShhoXyrjDS", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "2fcf2727-1a55-4950-b47a-05b47cdfb455" + }, + "source": [ + "H = np.array([[12, 11],\n", + " [7, 10]])\n", + "\n", + "J = np.array([[0, 1, 2],\n", + " [7, 10, 4],\n", + " [3, 2, 0]])\n", + "\n", + "print(np.around(np.linalg.det(H), decimals=5))\n", + "np.around(np.linalg.det(J), decimals=5)" + ], + "execution_count": 67, + "outputs": [ + { + "output_type": "stream", + "text": [ + "43.0\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-20.0" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 67 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2gZl1CFwrXSH", + "colab_type": "text" + }, + "source": [ + "## 3.3 Find $H^{-1}$ and then find $J^{-1}$" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nyX6De2-rio1", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 102 + }, + "outputId": "f76728fa-4d93-4437-c8bf-841efec878bd" + }, + "source": [ + "H_1 = np.around(np.linalg.inv(H), decimals=5)\n", + "print(H_1)\n", + "J_1 = np.around(np.linalg.inv(J), decimals=5)\n", + "J_1" + ], + "execution_count": 68, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[ 0.23256 -0.25581]\n", + " [-0.16279 0.27907]]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 0.4 , -0.2 , 0.8 ],\n", + " [-0.6 , 0.3 , -0.7 ],\n", + " [ 0.8 , -0.15, 0.35]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 68 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vvd4Pe86rjhW", + "colab_type": "text" + }, + "source": [ + "## 3.4 Find $HH^{-1}$ and then find $J^{-1}J$. Is $HH^{-1} == J^{-1}J$? Why or Why not? \n", + "\n", + "Please ignore Python rounding errors. If necessary, format your output so that it rounds to 5 significant digits (the fifth decimal place)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8I8HJix65CJd", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 102 + }, + "outputId": "09eae08f-0632-4f54-9885-169e35180e8a" + }, + "source": [ + "print(np.around(np.matmul(H, H_1), decimals=5))\n", + "np.around(np.matmul(J, J_1), decimals=5)" + ], + "execution_count": 70, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[1.00003e+00 5.00000e-05]\n", + " [2.00000e-05 1.00003e+00]]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 1., 0., 0.],\n", + " [ 0., 1., 0.],\n", + " [ 0., -0., 1.]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 70 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jll0XqwL6EWR", + "colab_type": "text" + }, + "source": [ + "The two are not equal because the have different dimensions." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V0iTO4McYjtk", + "colab_type": "text" + }, + "source": [ + "# Stretch Goals: \n", + "\n", + "A reminder that these challenges are optional. If you finish your work quickly we welcome you to work on them. If there are other activities that you feel like will help your understanding of the above topics more, feel free to work on that. Topics from the Stretch Goals sections will never end up on Sprint Challenges. You don't have to do these in order, you don't have to do all of them. \n", + "\n", + "- Write a function that can calculate the dot product of any two vectors of equal length that are passed to it.\n", + "- Write a function that can calculate the norm of any vector\n", + "- Prove to yourself again that the vectors in 1.9 are orthogonal by graphing them. \n", + "- Research how to plot a 3d graph with animations so that you can make the graph rotate (this will be easier in a local notebook than in google colab)\n", + "- Create and plot a matrix on a 2d graph.\n", + "- Create and plot a matrix on a 3d graph.\n", + "- Plot two vectors that are not collinear on a 2d graph. Calculate the determinant of the 2x2 matrix that these vectors form. How does this determinant relate to the graphical interpretation of the vectors?\n", + "\n" + ] + } + ] +} \ No newline at end of file From 46ecb0c2cf1b0f502611af815f8b0e5ad9386d30 Mon Sep 17 00:00:00 2001 From: Tristan Brown <61923052+Tristan-Brown1096@users.noreply.github.com> Date: Tue, 21 Jul 2020 16:14:26 -0500 Subject: [PATCH 2/5] Completed assignment --- ...termediate_Linear_Algebra_Assignment.ipynb | 1186 ++++++++++++++++- 1 file changed, 1135 insertions(+), 51 deletions(-) diff --git a/module2-intermediate-linear-algebra/LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/module2-intermediate-linear-algebra/LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb index 9110b2b1..2a2857df 100644 --- a/module2-intermediate-linear-algebra/LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb +++ b/module2-intermediate-linear-algebra/LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -5,7 +5,8 @@ "colab": { "name": "LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb", "provenance": [], - "collapsed_sections": [] + "collapsed_sections": [], + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -13,6 +14,16 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "markdown", "metadata": { @@ -41,11 +52,96 @@ "colab": {} }, "source": [ - "" + "#importing important libraries\n", + "import pandas as pd\n", + "import numpy as np\n", + "from scipy import stats\n", + "import matplotlib.pyplot as plt" ], - "execution_count": 0, + "execution_count": 2, "outputs": [] }, + { + "cell_type": "code", + "metadata": { + "id": "WTEnhL2Eu3kC", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "outputId": "6b13fbde-477d-41d5-fcde-5f07c0065ddd" + }, + "source": [ + "#creating array\n", + "s = np.array([3505, 2400, 3027, 2798, 3700, 3250, 2689])\n", + "\n", + "#creating mean function\n", + "def mean(a):\n", + " return a.sum() / a.shape[0]\n", + "\n", + "#using mean function\n", + "print(mean(s))\n", + "\n", + "#checking mean value\n", + "print(s.mean())\n", + "\n", + "#defining variance function\n", + "def variance(a):\n", + " m = a.sum() / a.shape[0]\n", + " b = np.array([])\n", + " for i in a:\n", + " b = np.append(b, (i-m) **2)\n", + " return b.sum() / (a.shape[0] - 1)\n", + "\n", + "#using variance function\n", + "print(variance(s))\n", + "\n", + "#checking variance value\n", + "print(s.var(ddof=1))\n", + "\n", + "#defining standard deviation function\n", + "def standev(a):\n", + " m = a.sum() / a.shape[0]\n", + " b = np.array([])\n", + " for i in a:\n", + " b = np.append(b, (i-m) **2)\n", + " v = b.sum() / (a.shape[0] - 1)\n", + " return v ** (1/2)\n", + "\n", + "#using standard deviation function\n", + "print(standev(s))\n", + "\n", + "#checking standard deviation value\n", + "s.std(ddof=1)" + ], + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "text": [ + "3052.714285714286\n", + "3052.714285714286\n", + "214387.90476190473\n", + "214387.90476190473\n", + "463.0204150595357\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "463.0204150595357" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 25 + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -61,13 +157,80 @@ "metadata": { "id": "G7ZB0krot564", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 111 + }, + "outputId": "a395823d-0d6d-4c14-e9b0-df3a1ab07701" }, "source": [ - "" + "#creating customer array\n", + "c = np.array([127, 80, 105, 92, 120, 115, 93])\n", + "\n", + "#creating dictionary for DataFrame\n", + "sc = {'s': s, 'c':c}\n", + "\n", + "#creating DataFrame\n", + "W = pd.DataFrame(sc)\n", + "\n", + "#finding covariance values for the data\n", + "W.cov()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 86, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sc
s214387.9047627604.357143
c7604.357143290.952381
\n", + "
" + ], + "text/plain": [ + " s c\n", + "s 214387.904762 7604.357143\n", + "c 7604.357143 290.952381" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 86 + } + ] }, { "cell_type": "markdown", @@ -84,13 +247,100 @@ "metadata": { "id": "vFJms2YRrKhY", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 162 + }, + "outputId": "6cced81d-c887-4133-f884-82b172f2be1a" }, "source": [ - "" + "#printing the standard deviation of customers\n", + "print('The standard deviation of weekly customers is:', standev(c))\n", + "\n", + "#checking customer standard deviation value\n", + "print(c.std(ddof=1))\n", + "\n", + "#defining function for correlation\n", + "def ctn(a, b):\n", + " d = {'a':a, 'b':b}\n", + " df = pd.DataFrame(d)\n", + " sda = standev(a)\n", + " sdb = standev(b)\n", + " cv = df.cov()\n", + " sdm = sda * sdb\n", + " c = cv / sdm\n", + " return c['a'][1]\n", + "\n", + "#using correlation function\n", + "print('The correlation coefficient is:', ctn(s, c))\n", + "\n", + "#creating correlation table\n", + "W.corr()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 117, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The standard deviation of weekly customers is: 17.057326313123664\n", + "17.057326313123664\n", + "The correlation coefficient is: 0.9628339778148909\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sc
s1.0000000.962834
c0.9628341.000000
\n", + "
" + ], + "text/plain": [ + " s c\n", + "s 1.000000 0.962834\n", + "c 0.962834 1.000000" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 117 + } + ] }, { "cell_type": "markdown", @@ -109,13 +359,493 @@ "metadata": { "id": "0TWgUIiaCFzq", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "outputId": "31af49bc-3999-468c-ad91-81d261097287" }, "source": [ - "" + "df = pd.read_csv('https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv', index_col=\"Unnamed: 0\")\n", + "df.head()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 62, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.desthas_cabin_number
11.01.0Allen, Miss. Elisabeth Waltonfemale29.00000.00.024160211.3375B5S2NaNSt Louis, MO1
21.01.0Allison, Master. Hudson Trevormale0.91671.02.0113781151.5500C22 C26S11NaNMontreal, PQ / Chesterville, ON1
31.00.0Allison, Miss. Helen Lorainefemale2.00001.02.0113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON1
41.00.0Allison, Mr. Hudson Joshua Creightonmale30.00001.02.0113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON1
51.00.0Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.00001.02.0113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON1
\n", + "
" + ], + "text/plain": [ + " pclass survived ... home.dest has_cabin_number\n", + "1 1.0 1.0 ... St Louis, MO 1\n", + "2 1.0 1.0 ... Montreal, PQ / Chesterville, ON 1\n", + "3 1.0 0.0 ... Montreal, PQ / Chesterville, ON 1\n", + "4 1.0 0.0 ... Montreal, PQ / Chesterville, ON 1\n", + "5 1.0 0.0 ... Montreal, PQ / Chesterville, ON 1\n", + "\n", + "[5 rows x 15 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 62 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vcnp2wtW5odP", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "outputId": "628961a1-6931-4d8f-95d7-fef931ce9c5c" + }, + "source": [ + "df.cov()" + ], + "execution_count": 64, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pclasssurvivedagesibspparchfarebodyhas_cabin_number
pclass0.701969-0.127248-3.9546050.0530900.013287-24.227788-2.876653-0.249992
survived-0.1272480.236250-0.314343-0.0140880.0347766.1460230.0000000.061406
age-3.954605-0.314343165.850021-2.559806-1.459378114.41661381.6229221.463138
sibsp0.053090-0.014088-2.5598061.0850520.3368338.641768-8.708471-0.003946
parch0.0132870.034776-1.4593780.3368330.7491959.9280314.2371900.013316
fare-24.2277886.146023114.4166138.6417689.9280312678.959738-179.16468410.976961
body-2.8766530.00000081.622922-8.7084714.237190-179.1646849544.6885673.625689
has_cabin_number-0.2499920.0614061.463138-0.0039460.01331610.9769613.6256890.174613
\n", + "
" + ], + "text/plain": [ + " pclass survived ... body has_cabin_number\n", + "pclass 0.701969 -0.127248 ... -2.876653 -0.249992\n", + "survived -0.127248 0.236250 ... 0.000000 0.061406\n", + "age -3.954605 -0.314343 ... 81.622922 1.463138\n", + "sibsp 0.053090 -0.014088 ... -8.708471 -0.003946\n", + "parch 0.013287 0.034776 ... 4.237190 0.013316\n", + "fare -24.227788 6.146023 ... -179.164684 10.976961\n", + "body -2.876653 0.000000 ... 9544.688567 3.625689\n", + "has_cabin_number -0.249992 0.061406 ... 3.625689 0.174613\n", + "\n", + "[8 rows x 8 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 64 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LyjkWT6x5tmy", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "outputId": "897a7fb7-8cbc-4e23-80a8-f5b561be35d1" + }, + "source": [ + "df.corr()" + ], + "execution_count": 65, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pclasssurvivedagesibspparchfarebodyhas_cabin_number
pclass1.000000-0.312469-0.3663700.0608320.018322-0.558629-0.034642-0.713857
survived-0.3124691.000000-0.050199-0.0278250.0826600.244265NaN0.302250
age-0.366370-0.0501991.000000-0.190747-0.1308720.1718920.0590590.271887
sibsp0.060832-0.027825-0.1907471.0000000.3735870.160238-0.099961-0.009064
parch0.0183220.082660-0.1308720.3735871.0000000.2215390.0510990.036806
fare-0.5586290.2442650.1718920.1602380.2215391.000000-0.0431100.507253
body-0.034642NaN0.059059-0.0999610.051099-0.0431101.0000000.083796
has_cabin_number-0.7138570.3022500.271887-0.0090640.0368060.5072530.0837961.000000
\n", + "
" + ], + "text/plain": [ + " pclass survived ... body has_cabin_number\n", + "pclass 1.000000 -0.312469 ... -0.034642 -0.713857\n", + "survived -0.312469 1.000000 ... NaN 0.302250\n", + "age -0.366370 -0.050199 ... 0.059059 0.271887\n", + "sibsp 0.060832 -0.027825 ... -0.099961 -0.009064\n", + "parch 0.018322 0.082660 ... 0.051099 0.036806\n", + "fare -0.558629 0.244265 ... -0.043110 0.507253\n", + "body -0.034642 NaN ... 1.000000 0.083796\n", + "has_cabin_number -0.713857 0.302250 ... 0.083796 1.000000\n", + "\n", + "[8 rows x 8 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 65 + } + ] }, { "cell_type": "markdown", @@ -142,13 +872,48 @@ "metadata": { "id": "YLSBk7hJvvCx", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "cb38d017-779f-44f0-a5ba-71dfc6bf5467" }, "source": [ - "" + "v1 = [1, 0]\n", + "v2 = [0, 1]\n", + "\n", + "plt.arrow(0, 0, v1[0], v1[1], head_width=0.05, head_length=0.05, color='purple')\n", + "plt.arrow(0, 0, v2[0], v2[1], head_width=0.05, head_length=0.05, color='orange')\n", + "plt.xlim(-1, 2)\n", + "plt.ylim(-1, 2)\n", + "plt.show()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 69, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5FcoSoA86_Ys", + "colab_type": "text" + }, + "source": [ + "A synonoym for orthogonal is perpendicular" + ] }, { "cell_type": "markdown", @@ -171,13 +936,43 @@ "metadata": { "id": "F_-y54YSz47k", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "41ef67b2-4346-496a-cd58-7eac24ce19bb" }, "source": [ - "" + "a = np.array([-5, 3, 7])\n", + "b = np.array([6, -8, 2])\n", + "\n", + "np.vdot(a, b)" ], - "execution_count": 0, - "outputs": [] + "execution_count": 71, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-40" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 71 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PG9rC2OC7ljO", + "colab_type": "text" + }, + "source": [ + "These vectors are not orthogonal, because the dot product $\\neq$ 0" + ] }, { "cell_type": "markdown", @@ -204,13 +999,52 @@ "metadata": { "id": "IlV_uaYK1EQB", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "6fb2abab-6fde-4c8d-d10b-315302b2553a" }, "source": [ - "" + "c = np.array([2, -15, 6, 20])\n", + "\n", + "print(np.linalg.norm(c) ** 2)\n", + "print(np.vdot(c, c))\n", + "np.matmul(c.T, c)" ], - "execution_count": 0, - "outputs": [] + "execution_count": 73, + "outputs": [ + { + "output_type": "stream", + "text": [ + "665.0\n", + "665\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "665" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 73 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lUGWDelZ8ZU6", + "colab_type": "text" + }, + "source": [ + "All of the values are the same." + ] }, { "cell_type": "markdown", @@ -245,7 +1079,13 @@ "colab_type": "text" }, "source": [ - "Your text here" + "\\begin{align}\n", + "d = \\begin{bmatrix} 7 \\\\ 12 \\end{bmatrix} = 7\\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} + 12\\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix} = 7 \\hat{i} + 12 \\hat{j}\n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + "e = \\begin{bmatrix} 2 \\\\ 11 \\\\ -8 \\end{bmatrix} = 2\\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\end{bmatrix} + 11\\begin{bmatrix} 0 \\\\ 1 \\\\ 0 \\end{bmatrix} - 8\\begin{bmatrix} 0 \\\\ 0 \\\\ 1 \\end{bmatrix} = 2 \\hat{i} + 11 \\hat{j} - 8 \\hat{k}\n", + "\\end{align}Your text here" ] }, { @@ -267,13 +1107,36 @@ "metadata": { "id": "I3W8ZiHR1_Fa", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "d5ef4658-91a2-41af-efa6-063f6674cdcc" }, "source": [ - "" + "f = np.array([4, 12, 11, 9, 2])\n", + "\n", + "f_n = np.linalg.norm(f)\n", + "\n", + "i_f = 1 / f_n\n", + "\n", + "f * i_f" ], - "execution_count": 0, - "outputs": [] + "execution_count": 77, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.9999999999999999" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 77 + } + ] }, { "cell_type": "markdown", @@ -295,6 +1158,86 @@ "## 4.1 Plot two vectors that are linearly dependent and two vectors that are linearly independent (bonus points if done in $\\mathbb{R}^3$)." ] }, + { + "cell_type": "code", + "metadata": { + "id": "0ISxBNit_Y6Q", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "4a9d0799-d87f-4397-9c82-8b6dba102144" + }, + "source": [ + "plt.ylim(-1, 5)\n", + "plt.xlim(-1, 3)\n", + "\n", + "x=[1, 2]\n", + "w=[2, 4]\n", + "\n", + "plt.arrow(0,0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='blue')\n", + "plt.arrow(0,0, x[0], x[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "\n", + "plt.show()" + ], + "execution_count": 80, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAXtklEQVR4nO3deXRUhd3G8edHCCC7bIqAIIoiKiJGZFGJWq1btbavvtZWbKWl1qVqaz161La2tdb3tR7rqdqi8laPVmut1g3xuAXBBQ0IAqKyKYssQXZkSTK/948ZbCYzIYG5uXfmzvdzTo6TX27uPF4yD5d779yYuwsAEF8tog4AAGheFD0AxBxFDwAxR9EDQMxR9AAQcxQ9AMRcyyBWYmafStokqVZSjbuXBbFeAEDuAin6lBPdfU2A6wMABIBDNwAQcxbEO2PNbLGkdZJc0l/dfXyWZcZJGidJ7dq1O3rgwIE5Py8AFJPp06evcffuu/t9QRV9L3dfbmY9JL0s6Up3f6Oh5cvKyryysjLn5wWAYmJm0/fkHGggh27cfXnqv6slPS1pWBDrBQDkLueiN7N2ZtZh52NJp0qak+t6AQDBCOKqm30kPW1mO9f3d3efFMB6AQAByLno3X2RpCMDyAIAaAZcXgkAMUfRA0DMUfQAEHMUPQDEHEUPADFH0QNAzFH0ABBzFD0AxBxFDwAxR9EDQMxR9AAQcxQ9AMQcRQ8AMUfRA0DMUfQAEHMUPQDEHEUPADFH0QNAzFH0ABBzFD0AxBxFDwAxR9EDQMxR9AAQcxQ9AMQcRQ8AMUfRA0DMUfQAQlFbG3WC4hVY0ZtZiZm9b2bPB7VOAIVtwQLp9tulYcOk++6LOk3xahnguq6SNE9SxwDXCaDAVFVJN90kTZokLVnyn/mYMdFlKnaB7NGbWW9JZ0p6IIj1AShcc+ZI48enl7wkffllNHkQ3KGbuyRdJykR0PoAFKgJE7LP27YNNwf+I+eiN7OzJK129+mNLDfOzCrNrLKqqirXpwWQh777XemRR6JOgfqCOEY/StLZZnaGpDaSOprZI+7+vboLuft4SeMlqayszAN4XgB5wl3q1UtasSJ9fuWVUt++0rRpUteu0WRDAEXv7jdIukGSzKxc0rX1Sx5AfG3fLrVpkzmfOFE6/fTw8yBTkFfdACgyK1dKPXtmzj/6SDrkkPDzILtAi97dKyRVBLlOAPmpslI65pjM+bp1UufO4edBw3hnLIDd9ve/Zy/5mhpKPh9R9AB2yy9+kby6pq5hw5InZEtKosmEXaPoATTZiBHSHXekz372s+RVNchfnIwF0KjaWqlllrZ45JHMvXvkH4oewC5t2JD9uPu772Y/To/8Q9EDaNAnn2S/TPLzz7NfVon8xDF6AFlNmpS95LdupeQLDUUPIMMdd2S+q3XffaVEIvu7YJHfKHoAac4/P3kJZV0XXJC8j41ZNJmQG47RA5CUvA6+Rw9pzZr0+Z13StdcE00mBIOiB6Bt26S99sqcv/SSdOqp4edBsCh6oMh9/nnyFsP1zZ8vHXRQ+HkQPI7RA0Vs2rTsJb9+PSUfJxQ9UKQeflgaPjxzXlMjdeoUfh40H4oeKEJXXy1dfHH6bNQobkwWVxQ9UETcpbIy6U9/Sp9fd500dWo0mdD8OBkLFImaGqm0NHP+2GPJ6+QRXxQ9UATWrZO6dMmcT58uDR0afh6Ei6IHYu6jj6RDD82cr1wp7bNP+HkQPo7RAzE2cWL2kt+2jZIvJhQ9EFN/+IN05pnps/33T96YrHXraDIhGhQ9EEPnnivdcEP67KKLpM8+48ZkxYhj9ECMuCd/G9TGjenzu++WrrwymkyIHkUPxMTWrVLbtpnzV1+VTjop/DzIHxQ9EAPLlkl9+mTOFy6U+vcPPw/yC8fogQL39tvZS37jRkoeSRQ9UMAmTJBGjsyc19ZKHTqEnwf5iaIHCtQVV0hjx6bPTjwxeUK2Ba9s1JHzj4OZtTGzd81slpnNNbNbgggGIDt36cgjpXvuSZ/feKP02mvRZEJ+C+Jk7HZJJ7n7ZjMrlTTVzF5093cCWDeAOhq6MdkTT0jnnRd+HhSGnIve3V3S5tSnpakPz3W9ANKtXSt17Zo5f/99aciQ8POgcARyJM/MSsxspqTVkl5292lZlhlnZpVmVllVVRXE0wJFY+7c7CW/ahUlj8YFUvTuXuvuQyT1ljTMzA7Pssx4dy9z97Lu3bsH8bRAUXjuOenwjFeUtH271KNH+HlQeAI9N+/u6yW9Lum0INcLFKtbb5XOPjt9duCByRuTtWoVTSYUniCuuuluZp1Tj/eSdIqkj3JdL1DszjpLuumm9Nkll0gLFnBjMuyeIK666SnpITMrUfIvjifc/fkA1gsUpURCat8+ee+auu69V/rJT6LJhMIWxFU3H0g6KoAsQNHbsiVZ8vVVVEijR4ceBzHBTc2APLFkidS3b+Z88WKpX7/Q4yBGeKM0kAemTs1e8ps2UfLIHUUPROz++6Xjj0+ftWyZvDFZtsM4wO6i6IEIXXqpNG5c+uzUU6Xqam5MhuBwjB6IgLs0aJD0Ub0LkX/1K+nXv44kEmKMogdCVl2d/c1OTz2V/KXeQNAoeiBEa9ZI2e4A8sEH0hFHhJ8HxYGjgEBIZs/OXvJVVZQ8mhdFD4Tg6aelwYMz5zt2SN26hZ8HxYWiB5rZLbdI3/pW+mzgwOStDrL9EhEgaBQ90Iy+/vXMq2jGjZPmzePGZAgPJ2OBZpBISK1bJ3/1X13jx0s/+lE0mVC8KHogYJs3Sx06ZM6nTJGOOy78PABFDwTo00+lAw7InH/2mbT//qHHASRxjB4IzOTJ2Ut+82ZKHtGi6IEA3HefVF6ePmvbNnljsnbtIokEfIWiB3I0dqx02WXpszPPTP4SEW5MhnzAMXpgD7lLAwZICxemz3/728zf9QpEiaIH9sCOHcnLJ+t75hnp7LPDzwPsCkUP7KaqKqlHj8z53LnJWw8D+YYjiMBumDUre8l/8QUlj/xF0QNN9M9/SkOGZM6rq6UuXcLPAzQVRQ80wU03Seefnz4bPDh5q4OWHABFnqPogUacdJJ0663ps8svTx7G4cZkKATsiwANSCSkkpLM+YMPSpdcEn4eYE9R9EAWmzZJHTtmzt98Uxo5Mvw8QC44dAPUs2ih6+SO7+pCPZo2X7qUkkdhyrnozayPmb1uZh+a2VwzuyqIYECoamulKVO09NtXq+VBffWujtUYPfzVl7/8UurdO8J8QA6COHRTI+nn7j7DzDpImm5mL7v7hwGsGwhH6tKZPvXGnTpJ69Zx0hWFLec9endf4e4zUo83SZonqVeu6wWiVtZmjtavp+RR+AI9Rm9m/SQdJWlalq+NM7NKM6usqqoK8mmBPeYJ17KWfbN+resJh4ecBmgegRW9mbWX9C9JV7v7xvpfd/fx7l7m7mXdu3cP6mmBPbZ943ZZSQv1rl2SNk+0yHJNJVDAAil6MytVsuQfdfenglgn0Jyq5qxS605tMuaLXpinFrU10urV0m23RZAMCF7OJ2PNzCQ9KGmeu9+ZeySgec17dIYO/d7RGfP1i9epf7/OyU+6d09+ADEQxB79KEkXSTrJzGamPs4IYL1A4N766eNZS75ma7U67yx5IGZy3qN396mSuC4Bea9i+PUqn3Z72mxu2zIdtuU93iKOWOOdsSgKszodn1HyFUOu1mFb3osoERAedmQQa7U7alXSuqWOrDefOu5hlf/1okgyAWGj6BFbG5dtVMc+nTLmcydM03E/GBZBIiAaHLpBLH326oKsJb9y+nIdRsmjyFD0iJ3pt7+ivl8bkDHftm6r9h26XwSJgGhR9IiVyefepaOvPyVtVmU95LUJtemc+QYpoBhQ9IiNN/tdqNH/viZt9lbv89U9sUrWgiuAUbw4GYuC5wnX6tL9NCqxMm1ecdYdKn/u5xGlAvIHe/QoaNvWb5OVtNA+9Uq+8neTKHkghT16FKxVM1don6MyT64unvSxyr5+cASJgPzEHj0K0tyHKrOW/IbP1usASh5IQ9Gj4Lx52aM67PvHZMxrt9eo0/6Z184DxY6iR0GpKLtWo+77XtpsdvsRkrtKWvELQ4BsKHoUjDnth6t8+h/TZhVl1+qITW9FlAgoDJyMRd7beWOy+r/B9c3LHlX5PRdGkgkoJBQ98tqGJRvUqW/mLwT58KH3NGpMWQSJgMLDoRvkrUUvfpy15FfPWqFBlDzQZBQ98lLl7yap/xkDM+bbN2xTj8H7RpAIKFwUPfJOxVl3qOzm09NmK1rsJ69NqHXH1hGlAgoXRY+88nbv81T+wi/SZm/2vVA9a5dzYzJgD3EyFnnBE661LbtrhH+RNp987l0a/dRVEaUC4oE9ekRu69qtspIW6lqv5Gfc/jIlDwSAPXpEakXlcvU8pnfG/NNXFmjoyQdGkAiIH/boEZk5D07LWvIbl25QP0oeCAxFj0hMHfewDv/h8Ix57fYadezdMYJEQHxR9Ajd5CFX6bj7L06bzex4AjcmA5oJRY/QeMI1r+3RGj3r7rT56yNu0JANkyNKBcRfIEVvZhPMbLWZzQlifYifmm01spIWOnTrjLT5Wz99XCe+9fuIUgHFIag9+r9JOi2gdSFm1i9ep5Z7lWbM5z06QyP/9N8RJAKKSyBF7+5vSFobxLoQLwufn6fO/btkzFfPXqVDLzwqgkRA8QntGL2ZjTOzSjOrrKqqCutpEaH3fv2CDvzGoIz5jk3b1ePwHhEkAopTaEXv7uPdvczdy7p37x7W0yIiFaf9QcfcclbabGnLfvLahFq1bxVRKqA4cdUNAvdOz3NV/tINabOp/ceoT/VibkwGRIBbICAwnnBtKumk4dqUNp983p81+onLI0oFIKjLKx+T9LakQ8xsmZmNDWK9KBw7b0zWsV7Jv//H1yh5IGKB7NG7+3eCWA8K0+fTlmq/4ftnzJe8vlBHlfePIBGAujhGj5zM/utbWUt+0+ebtD8lD+QFih57bMoPJuiIS0elzRIyJapr1aFn+4hSAaiPoscemXzE5Tr+b+mnYmbsfbJaeEItWvJjBeQTXpHYLZ5wfbLXYI2ec2/avOL4mzV07SsRpQKwK1xeiSar/rJape1a6eB687evfVLl//vtSDIBaBxFjyZZO/8LdTm4W8b84ydmacR5gyNIBKCpOHSDRi14Zm7Wkl/z4WodQskDeY+ixy5Nu/FZHfTNwzPmOzZtV7dDuWcRUAgoejSo4mu/07G/Pydttrh0ADcmAwoMRY+s3utxpspfvTltNuXgsTpgxyfcmAwoMJyMRZpETULbS9vpGG1Lm0++8C8a/eiPI0oFIBfs0eMrW1ZvUYvSEu1Vr+Rn3T2ZkgcKGHv0kCQtf3uJeo3smzFfNmWxjjyuX/iBAASGPXpo1p+nZC35Las2qzclDxQ8ir7IvXHR/TryyhPSZtvUWonqWrXr0S6iVACCRNEXsTcO/bFOeGRc2uy9bqepjW/jxmRAjPBqLkKecC1qPVAnfDQ+bV5x4i06purFiFIBaC6cjC0yO29MVv9Xgky7/mmV3/bNSDIBaF4UfRH54uM16jow87YF85+arWPPzbzNAYB44NBNkfjkyQ+ylvzaT9ZoACUPxBpFXwTeue4pHXzekRnz6i071GVA1wgSAQgTRR9zFaN/peH1finI/NaHyWsTKm1bGlEqAGGi6GNsetdTVf7Gb9Jmbwy6VAO2zeHGZEAR4WRsDCVqEvLSUh2tRNp8ypj7dcJDP4woFYCosEcfM5tXblaL0hKV1Cv5D+6dquMpeaAosUcfI8umfqrexx+QMf/8nSUafGyfCBIByAfs0cfEzLsqspb8l1VbtB8lDxS1QIrezE4zs4/NbIGZXR/EOtF0ky+4V0OuOTFttknt5bUJte3WNqJUAPJFzkVvZiWS7pF0uqRBkr5jZoNyXS+aZsrBl2j0Py5Pm03b5xvq4Ju4sgaApGD26IdJWuDui9x9h6THJZ3TyPcgR55wVZT/WsfP/7+0ecUpt+rYlc9GlApAPgriZGwvSUvrfL5M0rEBrBcNqP6yWm8PvUzlHz+QNn/35udU/puzIkoFIF+FdjLWzMaZWaWZVVZVVYX1tLE0/8lZalG9Q4taHfLVbMEzczWMkgeQRRB79Msl1b2so3dqlsbdx0saL0llZWUewPMWrUFjyqQxD0mS1i9ep9J2rXQQvw0KQAOCKPr3JA0wswOULPgLJF0YwHrRBJ0P2DvqCADyXM5F7+41ZnaFpJcklUia4O5zc04GAAhEIO+MdfeJkiYGsS4AQLB4ZywAxBxFDwAxR9EDQMxR9AAQcxQ9AMQcRQ8AMUfRA0DMUfQAEHMUPQDEHEUPADFH0QNAzFH0ABBzFD0AxBxFDwAxR9EDQMxR9AAQcxQ9AMQcRQ8AMUfRA0DMUfQAEHMUPQDEHEUPADFH0QNAzFH0ABBzFD0AxBxFDwAxR9EDQMxR9AAQczkVvZmdZ2ZzzSxhZmVBhQIABCfXPfo5kr4l6Y0AsgAAmkHLXL7Z3edJkpkFkwYAELicin53mNk4SeNSn243szlhPXcOuklaE3WIJiBncAoho0TOoBVKzkP25JsaLXoze0XSvlm+dKO7P9PUJ3L38ZLGp9ZZ6e55f0yfnMEqhJyFkFEiZ9AKKeeefF+jRe/uX9uTFQMA8gOXVwJAzOV6eeW5ZrZM0ghJL5jZS0381vG5PG+IyBmsQshZCBklcgYt1jnN3YMOAgDIIxy6AYCYo+gBIOZCKfqm3irBzE4zs4/NbIGZXR9GtnrP38XMXjaz+an/7t3AcrVmNjP18WxI2Xa5bcystZn9I/X1aWbWL4xcWXI0lvP7ZlZVZ/v9MKKcE8xsdUPv57Cku1P/Hx+Y2dA8zFhuZhvqbMtfhp0xlaOPmb1uZh+mXudXZVkmH7ZnU3JGvk3NrI2ZvWtms1I5b8myzO693t292T8kHarkhf4VksoaWKZE0kJJ/SW1kjRL0qAw8tXJ8D+Srk89vl7S7Q0stznkXI1uG0mXSfpL6vEFkv4RZsbdyPl9SX8OO1uWrCdIGippTgNfP0PSi5JM0nBJ0/IwY7mk5/NgW/aUNDT1uIOkT7L8uefD9mxKzsi3aWobtU89LpU0TdLwesvs1us9lD16d5/n7h83stgwSQvcfZG775D0uKRzmj9dmnMkPZR6/JCkb4b8/A1pyrapm/1JSSdb+PemyIc/wyZx9zckrd3FIudIetiT3pHU2cx6hpMuqQkZ84K7r3D3GanHmyTNk9Sr3mL5sD2bkjNyqW20OfVpaeqj/lUzu/V6z6dj9L0kLa3z+TKF/4ewj7uvSD1eKWmfBpZrY2aVZvaOmYXxl0FTts1Xy7h7jaQNkrqGkC1rhpSG/gy/nfrn+5Nm1iecaLstH34em2JE6p/4L5rZYVGHSR1COErJvdC68mp77iKnlAfb1MxKzGympNWSXnb3BrdnU17vgd3rJqhbJTS3XeWs+4m7u5k1dO1pX3dfbmb9Jb1mZrPdfWHQWWPqOUmPuft2M/uxknslJ0WcqVDNUPJncbOZnSHp35IGRBXGzNpL+pekq919Y1Q5GtNIzrzYpu5eK2mImXWW9LSZHe7ue3x/sMCK3nO/VcJySXX37nqnZoHaVU4zW2VmPd19ReqflasbWMfy1H8XmVmFknsGzVn0Tdk2O5dZZmYtJXWS9EUzZsqm0ZzuXjfTA0qeF8lHofw85qJuSbn7RDO718y6uXvoN+cys1Ily/NRd38qyyJ5sT0by5lP2zSVYb2ZvS7pNCVvC7/Tbr3e8+nQzXuSBpjZAWbWSskTDKFc0VLHs5IuTj2+WFLGv0TMbG8za5163E3SKEkfNnOupmybutn/S9JrnjpTE6JGc9Y7Lnu2ksdJ89GzksakrhYZLmlDncN6ecHM9t15XNbMhin5eg77L3elMjwoaZ6739nAYpFvz6bkzIdtambdU3vyMrO9JJ0i6aN6i+3e6z2ks8jnKnlMbrukVZJeSs33kzSxznJnKHkmfKGSh3zCPtvdVdKrkuZLekVSl9S8TNIDqccjJc1W8oqS2ZLGhpQtY9tI+o2ks1OP20j6p6QFkt6V1D/s7dfEnLdJmpvafq9LGhhRzsckrZBUnfrZHCvpUkmXpr5uku5J/X/MVgNXi0Wc8Yo62/IdSSMj2pbHKXmy8ANJM1MfZ+Th9mxKzsi3qaTBkt5P5Zwj6Zep+R6/3rkFAgDEXD4dugEANAOKHgBijqIHgJij6AEg5ih6AIg5ih4AYo6iB4CY+39JJV7rtg+oPgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YejUdBV8BN0z", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "82210f39-b518-4c49-9c6e-a09de73b814a" + }, + "source": [ + "plt.ylim(-1, 5)\n", + "plt.xlim(-1, 4)\n", + "\n", + "y=[1, 3]\n", + "z=[3, 2]\n", + "\n", + "plt.arrow(0,0, y[0], y[1], linewidth=3, head_width=.05, head_length=0.05, color ='blue')\n", + "plt.arrow(0,0, z[0], z[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "\n", + "plt.show()" + ], + "execution_count": 82, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -302,6 +1245,7 @@ "colab_type": "text" }, "source": [ + "\n", "# Span" ] }, @@ -326,13 +1270,47 @@ "metadata": { "id": "G2LK2RWL39Q4", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "ac794ad4-43f0-40c3-ea8d-5820992de5f7" }, "source": [ - "" + "g = np.array([1, 2])\n", + "h = np.array([2, 4])\n", + "\n", + "d = {'g': g, 'h': h}\n", + "\n", + "sa2 = pd.DataFrame(d)\n", + "\n", + "np.linalg.matrix_rank(sa2)" ], - "execution_count": 0, - "outputs": [] + "execution_count": 120, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "1" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 120 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-udxdmoFMnzk", + "colab_type": "text" + }, + "source": [ + "The span of $\\vec{g}$ and $\\vec{h}$ is 1 dimension" + ] }, { "cell_type": "markdown", @@ -357,13 +1335,48 @@ "metadata": { "id": "p1i_ueD25ZcP", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "6071d836-6659-45b0-f845-10129deba12c" }, "source": [ - "" + "l = np.array([1, 2, 3])\n", + "m = np.array([-1, 0, 7])\n", + "n = np.array([4, 8, 2])\n", + "\n", + "d = {'l': l, 'm': m, 'n': n}\n", + "\n", + "sa3 = pd.DataFrame(d)\n", + "\n", + "np.linalg.matrix_rank(sa3)" ], - "execution_count": 0, - "outputs": [] + "execution_count": 121, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 121 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "34atsytfNUFB", + "colab_type": "text" + }, + "source": [ + "The span of $\\vec{l}$, $\\vec{m}$, and $\\vec{n}$ is 3 dimensions" + ] }, { "cell_type": "markdown", @@ -391,13 +1404,40 @@ "metadata": { "id": "utvF3Pkt8NP6", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "1ef13a0b-a5a9-44e1-9aa8-4812e018a940" }, "source": [ - "" + "plt.ylim(-1, 2)\n", + "plt.xlim(-1, 2)\n", + "\n", + "y=[1, 0]\n", + "z=[0, 1]\n", + "\n", + "plt.arrow(0,0, y[0], y[1], linewidth=3, head_width=.05, head_length=0.05, color ='blue')\n", + "plt.arrow(0,0, z[0], z[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "\n", + "plt.show()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 83, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -416,7 +1456,7 @@ "colab_type": "text" }, "source": [ - "" + "The space that any linear combination of two vectors" ] }, { @@ -447,6 +1487,50 @@ "\\end{align}" ] }, + { + "cell_type": "code", + "metadata": { + "id": "BaVldv92NsX7", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "8e7348ab-644b-4068-fd02-3abbf2623f79" + }, + "source": [ + "P = np.array([[1, 2, 3],\n", + " [-1, 0, 7],\n", + " [4, 8, 2]])\n", + "\n", + "np.linalg.matrix_rank(P)" + ], + "execution_count": 123, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 123 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CZhGoktJN95P", + "colab_type": "text" + }, + "source": [ + "The rank of $P$ is 3" + ] + }, { "cell_type": "markdown", "metadata": { @@ -464,7 +1548,7 @@ "colab_type": "text" }, "source": [ - "" + "Rank tells us the number of dimensions that the component vectors of a matrix span." ] }, { @@ -500,7 +1584,7 @@ "source": [ "" ], - "execution_count": 0, + "execution_count": null, "outputs": [] }, { @@ -524,11 +1608,11 @@ "metadata": { "id": "cp52kZra-ykj", "colab_type": "code", - "outputId": "12502200-eafe-4e20-bfb7-2d539c6027cb", "colab": { "base_uri": "https://localhost:8080/", "height": 347 - } + }, + "outputId": "12502200-eafe-4e20-bfb7-2d539c6027cb" }, "source": [ "import pandas as pd\n", @@ -547,7 +1631,7 @@ "plt.scatter(df.x, df.y)\n", "plt.show()" ], - "execution_count": 0, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -573,7 +1657,7 @@ "source": [ "" ], - "execution_count": 0, + "execution_count": null, "outputs": [] } ] From 7f69c959d943780c84894e6ed7f8ebca032a8b3a Mon Sep 17 00:00:00 2001 From: Tristan Brown <61923052+Tristan-Brown1096@users.noreply.github.com> Date: Wed, 22 Jul 2020 16:58:07 -0500 Subject: [PATCH 3/5] Completed Assignment --- ...133_High_Dimensional_Data_Assignment.ipynb | 548 ++++++++++-------- 1 file changed, 322 insertions(+), 226 deletions(-) diff --git a/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb b/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb index d0417b2e..eb4477e8 100644 --- a/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb +++ b/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb @@ -5,7 +5,8 @@ "colab": { "name": "LS_DS_133_High_Dimensional_Data_Assignment.ipynb", "provenance": [], - "collapsed_sections": [] + "collapsed_sections": [], + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -13,6 +14,16 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "markdown", "metadata": { @@ -41,11 +52,52 @@ "colab": {} }, "source": [ - "" + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" ], - "execution_count": 0, + "execution_count": 1, "outputs": [] }, + { + "cell_type": "code", + "metadata": { + "id": "FpE6SuVEEXgn", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "8fc3690d-de4c-404e-b0e7-50f324b8fc19" + }, + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "plt.plot([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])\n", + "plt.plot([1, 1, 1, 1, 1], [0, 1, 2, 3, 4])\n", + "\n", + "plt.ylim(-1, 5)\n", + "plt.xlim(-1, 5)\n", + "\n", + "plt.show()" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -63,7 +115,7 @@ "colab_type": "text" }, "source": [ - "" + "graphs that fail the vertical line test aren't considered functions because the input corresponds to multiple outputs." ] }, { @@ -98,6 +150,16 @@ "\\end{align}" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "iE3sV5DWG0F4", + "colab_type": "text" + }, + "source": [ + "Relation 2 is the only function, because it's the only one that has a different input for each output." + ] + }, { "cell_type": "markdown", "metadata": { @@ -124,6 +186,18 @@ "\\end{align}" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "SVXhPdYrHAk1", + "colab_type": "text" + }, + "source": [ + "The domain of $m$ has a dimensionality of 3, and the codomain has a dimensionality of 3.\n", + "\n", + "The domain of $n$ has a dimensionality of 4, and the codomain has a dimensionality of 2." + ] + }, { "cell_type": "markdown", "metadata": { @@ -161,6 +235,40 @@ "\\end{align}" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "cyRsxI1lLWYE", + "colab_type": "text" + }, + "source": [ + "\\begin{align}\n", + "p(\\begin{bmatrix}1 \\\\ 0 \\end{bmatrix}) = \\begin{bmatrix} 1 \\\\ -1 \\\\ \\end{bmatrix}\n", + "\\\\\n", + "p(\\begin{bmatrix}0 \\\\ 1 \\end{bmatrix}) = \\begin{bmatrix} 3 \\\\ 2 \\end{bmatrix}\n", + "\\\\\n", + "Tp = \\begin{bmatrix} 1 & 3 \\\\ -1 & 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edZcBCuFIa49", + "colab_type": "text" + }, + "source": [ + "\\begin{align}\n", + "q(\\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\end{bmatrix}) = \\begin{bmatrix} 4 \\\\ -1 \\\\ 5 \\end{bmatrix}\n", + "\\\\\n", + "q(\\begin{bmatrix} 0 \\\\ 1 \\\\ 0 \\end{bmatrix}) = \\begin{bmatrix} 1 \\\\ 2 \\\\ 1 \\end{bmatrix}\n", + "\\\\\n", + "q(\\begin{bmatrix} 0 \\\\ 0 \\\\ 1 \\end{bmatrix}) = \\begin{bmatrix} 2 \\\\ 3 \\\\ -2 \\end{bmatrix}\n", + "\\\\\n", + "Tq = \\begin{bmatrix} 4 & 1 & 2 \\\\ -1 & 2 & 3 \\\\ 5 & 1 & -2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, { "cell_type": "markdown", "metadata": { @@ -176,13 +284,73 @@ "metadata": { "id": "0UANR1IEaVWE", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 238 + }, + "outputId": "f539f428-f33d-4129-bed3-f8ce616199cb" }, "source": [ - "" + "Tp = np.array([[1, 3], \n", + " [-1, 2]])\n", + "\n", + "p = np.array([[3],\n", + " [5]])\n", + "\n", + "Tq = np.array([[4, 1, 2],\n", + " [-1, 2, 3],\n", + " [5, 1, -2]])\n", + "\n", + "q = np.array([[2],\n", + " [5],\n", + " [11]])\n", + "\n", + "print(np.matmul(Tp, p))\n", + "\n", + "P = np.array([[p[0] + 3 * p[1]],\n", + " [2 * p[1] - p[0]]])\n", + "print(P)\n", + "\n", + "print(np.matmul(Tq, q))\n", + "\n", + "Q = np.array([[4 * q[0] + q[1] + 2 * q[2]],\n", + " [2 * q[1] - q[0] + 3 * q[2]],\n", + " [5 * q[0] - 2 * q[2] + q[1]]])\n", + "Q" ], - "execution_count": 0, - "outputs": [] + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[18]\n", + " [ 7]]\n", + "[[[18]]\n", + "\n", + " [[ 7]]]\n", + "[[35]\n", + " [41]\n", + " [-7]]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[[35]],\n", + "\n", + " [[41]],\n", + "\n", + " [[-7]]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 27 + } + ] }, { "cell_type": "markdown", @@ -204,6 +372,16 @@ "## 5.1 In your own words, give an explanation for the intuition behind eigenvalues and eigenvectors." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "1zLOUVr0QqVJ", + "colab_type": "text" + }, + "source": [ + "In a 3d space, the eigenvectors are the axes of rotation with an eigen value of 1." + ] + }, { "cell_type": "markdown", "metadata": { @@ -224,6 +402,16 @@ "## 6.1 What are some of the challenges of working with high dimensional spaces?" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "c6ZcFlFLflfk", + "colab_type": "text" + }, + "source": [ + "Working in high dimensional spaces spreads values exponentially, making euclidean distance less useful. It can also make the data less generalizable." + ] + }, { "cell_type": "markdown", "metadata": { @@ -234,6 +422,16 @@ "## 6.2 What is the rule of thumb for how many observations you should have compared to parameters in your model?" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "0-IfMcAwgAkg", + "colab_type": "text" + }, + "source": [ + "You should try to have at least five times as many rows as parameters." + ] + }, { "cell_type": "markdown", "metadata": { @@ -269,9 +467,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 351 + "height": 355 }, - "outputId": "974e831f-cd76-41ed-c225-8ab4d1fea275" + "outputId": "57980f7a-0a7e-40de-88cc-ed9dbb1d529e" }, "source": [ "from urllib.request import urlopen\n", @@ -296,7 +494,7 @@ "print(national.shape)\n", "national.head()" ], - "execution_count": 2, + "execution_count": 28, "outputs": [ { "output_type": "stream", @@ -850,7 +1048,7 @@ "metadata": { "tags": [] }, - "execution_count": 2 + "execution_count": 28 } ] }, @@ -859,91 +1057,41 @@ "metadata": { "id": "O5zrMTud2qFU", "colab_type": "code", - "outputId": "22a279ad-ad46-46ba-82c4-47ff31864e01", "colab": { "base_uri": "https://localhost:8080/", - "height": 1000 - } + "height": 221 + }, + "outputId": "aa7f2e4f-ca71-4124-c014-983f77846d04" }, "source": [ "# Look at datatypes\n", "# a lot of object datatypes even though they seem to be strings of numbers.\n", "national.dtypes" ], - "execution_count": 3, + "execution_count": 29, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "CONTROL object\n", - "AGE1 int64\n", - "METRO3 object\n", - "REGION object\n", - "LMED int64\n", - "FMR int64\n", - "L30 int64\n", - "L50 int64\n", - "L80 int64\n", - "IPOV int64\n", - "BEDRMS int64\n", - "BUILT int64\n", - "STATUS object\n", - "TYPE int64\n", - "VALUE int64\n", - "VACANCY int64\n", - "TENURE object\n", - "NUNITS int64\n", - "ROOMS int64\n", - "WEIGHT float64\n", - "PER int64\n", - "ZINC2 int64\n", - "ZADEQ object\n", - "ZSMHC int64\n", - "STRUCTURETYPE int64\n", - "OWNRENT object\n", - "UTILITY float64\n", - "OTHERCOST float64\n", - "COST06 float64\n", - "COST12 float64\n", - " ... \n", - "COSTMedRELAMICAT int64\n", - "COSTMedRELPOVPCT float64\n", - "COSTMedRELPOVCAT int64\n", - "COSTMedRELFMRPCT float64\n", - "COSTMedRELFMRCAT int64\n", - "FMTZADEQ object\n", - "FMTMETRO3 object\n", - "FMTBUILT object\n", - "FMTSTRUCTURETYPE object\n", - "FMTBEDRMS object\n", - "FMTOWNRENT object\n", - "FMTCOST06RELPOVCAT object\n", - "FMTCOST08RELPOVCAT object\n", - "FMTCOST12RELPOVCAT object\n", - "FMTCOSTMEDRELPOVCAT object\n", - "FMTINCRELPOVCAT object\n", - "FMTCOST06RELFMRCAT object\n", - "FMTCOST08RELFMRCAT object\n", - "FMTCOST12RELFMRCAT object\n", - "FMTCOSTMEDRELFMRCAT object\n", - "FMTINCRELFMRCAT object\n", - "FMTCOST06RELAMICAT object\n", - "FMTCOST08RELAMICAT object\n", - "FMTCOST12RELAMICAT object\n", - "FMTCOSTMEDRELAMICAT object\n", - "FMTINCRELAMICAT object\n", - "FMTASSISTED object\n", - "FMTBURDEN object\n", - "FMTREGION object\n", - "FMTSTATUS object\n", + "CONTROL object\n", + "AGE1 int64\n", + "METRO3 object\n", + "REGION object\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT object\n", + "FMTASSISTED object\n", + "FMTBURDEN object\n", + "FMTREGION object\n", + "FMTSTATUS object\n", "Length: 99, dtype: object" ] }, "metadata": { "tags": [] }, - "execution_count": 3 + "execution_count": 29 } ] }, @@ -952,17 +1100,17 @@ "metadata": { "id": "yIrOjVmd2yLz", "colab_type": "code", - "outputId": "d855cbbd-42ba-47a2-aba9-584813e9c5ab", "colab": { "base_uri": "https://localhost:8080/", - "height": 35 - } + "height": 34 + }, + "outputId": "ba51c553-bfaa-4e73-a1c9-33c139410fe7" }, "source": [ "# check for null values\n", "national.isnull().sum().any()" ], - "execution_count": 4, + "execution_count": 33, "outputs": [ { "output_type": "execute_result", @@ -974,7 +1122,7 @@ "metadata": { "tags": [] }, - "execution_count": 4 + "execution_count": 33 } ] }, @@ -983,11 +1131,11 @@ "metadata": { "id": "2u9tdmwX3KL_", "colab_type": "code", - "outputId": "ce3e8bc6-7571-4b9b-8b4f-b8ae7c94f837", "colab": { "base_uri": "https://localhost:8080/", - "height": 52 - } + "height": 51 + }, + "outputId": "83b02ce9-1a70-49b2-f7c4-b38ae3b561a2" }, "source": [ "# check for number of categorical vs numeric columns\n", @@ -997,7 +1145,7 @@ "print(f'{len(cat_cols)} categorical columns')\n", "print(f'{len(num_cols)} numerical columns')" ], - "execution_count": 5, + "execution_count": 31, "outputs": [ { "output_type": "stream", @@ -1014,11 +1162,11 @@ "metadata": { "id": "UMHOtOs_3gcL", "colab_type": "code", - "outputId": "9194fefa-217a-49e4-cd81-b2d416d77b19", "colab": { "base_uri": "https://localhost:8080/", - "height": 1000 - } + "height": 221 + }, + "outputId": "5b8292e6-4b98-4966-f2b0-b57e39e8bcd8" }, "source": [ "# We're making a copy of our data in case we mess something up.\n", @@ -1033,80 +1181,30 @@ "\n", "national_processed.dtypes" ], - "execution_count": 6, + "execution_count": 32, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "CONTROL category\n", - "AGE1 int64\n", - "METRO3 category\n", - "REGION category\n", - "LMED int64\n", - "FMR int64\n", - "L30 int64\n", - "L50 int64\n", - "L80 int64\n", - "IPOV int64\n", - "BEDRMS int64\n", - "BUILT int64\n", - "STATUS category\n", - "TYPE int64\n", - "VALUE int64\n", - "VACANCY int64\n", - "TENURE category\n", - "NUNITS int64\n", - "ROOMS int64\n", - "WEIGHT float64\n", - "PER int64\n", - "ZINC2 int64\n", - "ZADEQ category\n", - "ZSMHC int64\n", - "STRUCTURETYPE int64\n", - "OWNRENT category\n", - "UTILITY float64\n", - "OTHERCOST float64\n", - "COST06 float64\n", - "COST12 float64\n", - " ... \n", - "COSTMedRELAMICAT int64\n", - "COSTMedRELPOVPCT float64\n", - "COSTMedRELPOVCAT int64\n", - "COSTMedRELFMRPCT float64\n", - "COSTMedRELFMRCAT int64\n", - "FMTZADEQ category\n", - "FMTMETRO3 category\n", - "FMTBUILT category\n", - "FMTSTRUCTURETYPE category\n", - "FMTBEDRMS category\n", - "FMTOWNRENT category\n", - "FMTCOST06RELPOVCAT category\n", - "FMTCOST08RELPOVCAT category\n", - "FMTCOST12RELPOVCAT category\n", - "FMTCOSTMEDRELPOVCAT category\n", - "FMTINCRELPOVCAT category\n", - "FMTCOST06RELFMRCAT category\n", - "FMTCOST08RELFMRCAT category\n", - "FMTCOST12RELFMRCAT category\n", - "FMTCOSTMEDRELFMRCAT category\n", - "FMTINCRELFMRCAT category\n", - "FMTCOST06RELAMICAT category\n", - "FMTCOST08RELAMICAT category\n", - "FMTCOST12RELAMICAT category\n", - "FMTCOSTMEDRELAMICAT category\n", - "FMTINCRELAMICAT category\n", - "FMTASSISTED category\n", - "FMTBURDEN category\n", - "FMTREGION category\n", - "FMTSTATUS category\n", + "CONTROL category\n", + "AGE1 int64\n", + "METRO3 category\n", + "REGION category\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT category\n", + "FMTASSISTED category\n", + "FMTBURDEN category\n", + "FMTREGION category\n", + "FMTSTATUS category\n", "Length: 99, dtype: object" ] }, "metadata": { "tags": [] }, - "execution_count": 6 + "execution_count": 32 } ] }, @@ -1117,9 +1215,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 265 + "height": 270 }, - "outputId": "02fe0fad-81bb-404c-a4cd-92242cfe4c6c" + "outputId": "e3c14438-d319-4d21-a9f2-6b6386f2e947" }, "source": [ "# Replace all category cell values with their numeric category codes\n", @@ -1129,7 +1227,7 @@ "print(national_processed.shape)\n", "national_processed.head()" ], - "execution_count": 7, + "execution_count": 34, "outputs": [ { "output_type": "stream", @@ -1683,7 +1781,7 @@ "metadata": { "tags": [] }, - "execution_count": 7 + "execution_count": 34 } ] }, @@ -1694,88 +1792,38 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 1000 + "height": 221 }, - "outputId": "3cbe9b8e-05e4-4126-f072-030c8d2ac7b4" + "outputId": "3641787a-a716-44a8-b113-57411f145644" }, "source": [ "# Now we only ahve numeric columns (ints and floats)\n", "national_processed.dtypes" ], - "execution_count": 10, + "execution_count": 35, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "CONTROL int32\n", - "AGE1 int64\n", - "METRO3 int8\n", - "REGION int8\n", - "LMED int64\n", - "FMR int64\n", - "L30 int64\n", - "L50 int64\n", - "L80 int64\n", - "IPOV int64\n", - "BEDRMS int64\n", - "BUILT int64\n", - "STATUS int8\n", - "TYPE int64\n", - "VALUE int64\n", - "VACANCY int64\n", - "TENURE int8\n", - "NUNITS int64\n", - "ROOMS int64\n", - "WEIGHT float64\n", - "PER int64\n", - "ZINC2 int64\n", - "ZADEQ int8\n", - "ZSMHC int64\n", - "STRUCTURETYPE int64\n", - "OWNRENT int8\n", - "UTILITY float64\n", - "OTHERCOST float64\n", - "COST06 float64\n", - "COST12 float64\n", - " ... \n", - "COSTMedRELAMICAT int64\n", - "COSTMedRELPOVPCT float64\n", - "COSTMedRELPOVCAT int64\n", - "COSTMedRELFMRPCT float64\n", - "COSTMedRELFMRCAT int64\n", - "FMTZADEQ int8\n", - "FMTMETRO3 int8\n", - "FMTBUILT int8\n", - "FMTSTRUCTURETYPE int8\n", - "FMTBEDRMS int8\n", - "FMTOWNRENT int8\n", - "FMTCOST06RELPOVCAT int8\n", - "FMTCOST08RELPOVCAT int8\n", - "FMTCOST12RELPOVCAT int8\n", - "FMTCOSTMEDRELPOVCAT int8\n", - "FMTINCRELPOVCAT int8\n", - "FMTCOST06RELFMRCAT int8\n", - "FMTCOST08RELFMRCAT int8\n", - "FMTCOST12RELFMRCAT int8\n", - "FMTCOSTMEDRELFMRCAT int8\n", - "FMTINCRELFMRCAT int8\n", - "FMTCOST06RELAMICAT int8\n", - "FMTCOST08RELAMICAT int8\n", - "FMTCOST12RELAMICAT int8\n", - "FMTCOSTMEDRELAMICAT int8\n", - "FMTINCRELAMICAT int8\n", - "FMTASSISTED int8\n", - "FMTBURDEN int8\n", - "FMTREGION int8\n", - "FMTSTATUS int8\n", + "CONTROL int32\n", + "AGE1 int64\n", + "METRO3 int8\n", + "REGION int8\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT int8\n", + "FMTASSISTED int8\n", + "FMTBURDEN int8\n", + "FMTREGION int8\n", + "FMTSTATUS int8\n", "Length: 99, dtype: object" ] }, "metadata": { "tags": [] }, - "execution_count": 10 + "execution_count": 35 } ] }, @@ -1784,13 +1832,61 @@ "metadata": { "id": "WAJ8bjVcEwhA", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 425 + }, + "outputId": "edda33e4-426b-4598-882b-986af365a3cc" }, "source": [ - "### Your Code Here" + "### Your Code Here\n", + "from numpy import array\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.decomposition import PCA\n", + "\n", + "scaler = StandardScaler()\n", + "\n", + "Z = scaler.fit_transform(national_processed)\n", + "print(\"\\n Standardized Data: \\n\", Z)\n", + "\n", + "pca = PCA(2)\n", + "\n", + "B = pca.fit_transform(Z)\n", + "print(\"\\n Projected Data: \\n\", B)" ], - "execution_count": 0, - "outputs": [] + "execution_count": 36, + "outputs": [ + { + "output_type": "stream", + "text": [ + "\n", + " Standardized Data: \n", + " [[-1.73202397 1.48807451 0.60878419 ... 0.54947295 -0.46210707\n", + " 0. ]\n", + " [-1.73197029 0.08881241 2.18426992 ... -0.54470863 -0.46210707\n", + " 0. ]\n", + " [-1.73191661 0.21999323 2.18426992 ... 1.64365453 -0.46210707\n", + " 0. ]\n", + " ...\n", + " [ 1.73191661 -1.09181499 -0.17895868 ... 1.64365453 2.16400067\n", + " 0. ]\n", + " [ 1.73197029 0.39490099 -0.96670154 ... -0.54470863 2.16400067\n", + " 0. ]\n", + " [ 1.73202397 0.78844346 1.39652706 ... -0.54470863 -0.46210707\n", + " 0. ]]\n", + "\n", + " Projected Data: \n", + " [[-2.57657018 -1.37612723]\n", + " [ 2.04064284 -0.98806145]\n", + " [ 1.21527025 0.37016818]\n", + " ...\n", + " [ 1.83162816 -2.95570219]\n", + " [-5.02514474 -2.52857817]\n", + " [-9.89816404 -0.80284269]]\n" + ], + "name": "stdout" + } + ] }, { "cell_type": "markdown", From 46a6812862069e04a8a46866fccfe37b0541f73a Mon Sep 17 00:00:00 2001 From: Tristan Brown <61923052+Tristan-Brown1096@users.noreply.github.com> Date: Wed, 22 Jul 2020 20:55:25 -0500 Subject: [PATCH 4/5] Created using Colaboratory --- ...133_High_Dimensional_Data_Assignment.ipynb | 177 ++++++++++++++---- 1 file changed, 142 insertions(+), 35 deletions(-) diff --git a/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb b/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb index eb4477e8..e54272b5 100644 --- a/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb +++ b/module3-dimensionality-reduction/LS_DS_133_High_Dimensional_Data_Assignment.ipynb @@ -56,7 +56,7 @@ "import matplotlib.pyplot as plt\n", "import numpy as np" ], - "execution_count": 1, + "execution_count": null, "outputs": [] }, { @@ -81,7 +81,7 @@ "\n", "plt.show()" ], - "execution_count": 16, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -318,7 +318,7 @@ " [5 * q[0] - 2 * q[2] + q[1]]])\n", "Q" ], - "execution_count": 27, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -469,7 +469,7 @@ "base_uri": "https://localhost:8080/", "height": 355 }, - "outputId": "57980f7a-0a7e-40de-88cc-ed9dbb1d529e" + "outputId": "ec53a68f-597a-4829-90b6-aee1502ed2d4" }, "source": [ "from urllib.request import urlopen\n", @@ -494,7 +494,7 @@ "print(national.shape)\n", "national.head()" ], - "execution_count": 28, + "execution_count": 1, "outputs": [ { "output_type": "stream", @@ -1048,7 +1048,7 @@ "metadata": { "tags": [] }, - "execution_count": 28 + "execution_count": 1 } ] }, @@ -1061,14 +1061,14 @@ "base_uri": "https://localhost:8080/", "height": 221 }, - "outputId": "aa7f2e4f-ca71-4124-c014-983f77846d04" + "outputId": "36a90bb9-34b4-45f4-82e6-26ec29b6513c" }, "source": [ "# Look at datatypes\n", "# a lot of object datatypes even though they seem to be strings of numbers.\n", "national.dtypes" ], - "execution_count": 29, + "execution_count": 2, "outputs": [ { "output_type": "execute_result", @@ -1091,7 +1091,7 @@ "metadata": { "tags": [] }, - "execution_count": 29 + "execution_count": 2 } ] }, @@ -1104,13 +1104,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "ba51c553-bfaa-4e73-a1c9-33c139410fe7" + "outputId": "84e87c35-d347-4cea-86bf-fb99c6f04992" }, "source": [ "# check for null values\n", "national.isnull().sum().any()" ], - "execution_count": 33, + "execution_count": 3, "outputs": [ { "output_type": "execute_result", @@ -1122,7 +1122,7 @@ "metadata": { "tags": [] }, - "execution_count": 33 + "execution_count": 3 } ] }, @@ -1135,7 +1135,7 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "83b02ce9-1a70-49b2-f7c4-b38ae3b561a2" + "outputId": "c8381f44-903e-4c34-f736-212f6d12f7ed" }, "source": [ "# check for number of categorical vs numeric columns\n", @@ -1145,7 +1145,7 @@ "print(f'{len(cat_cols)} categorical columns')\n", "print(f'{len(num_cols)} numerical columns')" ], - "execution_count": 31, + "execution_count": 4, "outputs": [ { "output_type": "stream", @@ -1166,7 +1166,7 @@ "base_uri": "https://localhost:8080/", "height": 221 }, - "outputId": "5b8292e6-4b98-4966-f2b0-b57e39e8bcd8" + "outputId": "5fc4c0d1-c6d6-4ddf-c5e5-743cc6627f85" }, "source": [ "# We're making a copy of our data in case we mess something up.\n", @@ -1181,7 +1181,7 @@ "\n", "national_processed.dtypes" ], - "execution_count": 32, + "execution_count": 5, "outputs": [ { "output_type": "execute_result", @@ -1204,7 +1204,7 @@ "metadata": { "tags": [] }, - "execution_count": 32 + "execution_count": 5 } ] }, @@ -1217,7 +1217,7 @@ "base_uri": "https://localhost:8080/", "height": 270 }, - "outputId": "e3c14438-d319-4d21-a9f2-6b6386f2e947" + "outputId": "57e50e1d-5adc-45d4-d340-429cb05d124e" }, "source": [ "# Replace all category cell values with their numeric category codes\n", @@ -1227,7 +1227,7 @@ "print(national_processed.shape)\n", "national_processed.head()" ], - "execution_count": 34, + "execution_count": 6, "outputs": [ { "output_type": "stream", @@ -1781,7 +1781,7 @@ "metadata": { "tags": [] }, - "execution_count": 34 + "execution_count": 6 } ] }, @@ -1794,13 +1794,13 @@ "base_uri": "https://localhost:8080/", "height": 221 }, - "outputId": "3641787a-a716-44a8-b113-57411f145644" + "outputId": "7daad198-0c0d-4efe-d756-06444e912734" }, "source": [ "# Now we only ahve numeric columns (ints and floats)\n", "national_processed.dtypes" ], - "execution_count": 35, + "execution_count": 7, "outputs": [ { "output_type": "execute_result", @@ -1823,7 +1823,7 @@ "metadata": { "tags": [] }, - "execution_count": 35 + "execution_count": 7 } ] }, @@ -1834,9 +1834,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 425 + "height": 1000 }, - "outputId": "edda33e4-426b-4598-882b-986af365a3cc" + "outputId": "b22a816f-f527-434c-db62-d2a7ac7be928" }, "source": [ "### Your Code Here\n", @@ -1849,12 +1849,15 @@ "Z = scaler.fit_transform(national_processed)\n", "print(\"\\n Standardized Data: \\n\", Z)\n", "\n", - "pca = PCA(2)\n", - "\n", - "B = pca.fit_transform(Z)\n", + "pca.fit(Z)\n", + "# access values and vectors\n", + "print(\"\\n Eigenvectors: \\n\", pca.components_)\n", + "print(\"\\n Eigenvalues: \\n\",pca.explained_variance_)\n", + "# transform data\n", + "B = pca.transform(Z)\n", "print(\"\\n Projected Data: \\n\", B)" ], - "execution_count": 36, + "execution_count": 37, "outputs": [ { "output_type": "stream", @@ -1875,19 +1878,123 @@ " [ 1.73202397 0.78844346 1.39652706 ... -0.54470863 -0.46210707\n", " 0. ]]\n", "\n", + " Eigenvectors: \n", + " [[-0.01762294 0.04564172 0.00224448 -0.0056805 0.04142715 0.08969161\n", + " 0.06498292 0.0649871 0.06422065 0.06147403 0.08585244 0.01801879\n", + " -0.05896537 -0.01528452 0.13234213 -0.05711476 -0.03969967 -0.02559715\n", + " 0.09915137 0.02420272 0.06848524 0.10804133 0.02549375 0.12591589\n", + " -0.0686994 -0.09686185 0.09495694 0.06829523 0.13890808 0.13843111\n", + " 0.13897851 0.138511 0.0905027 -0.07741872 0.04142715 0.06498292\n", + " 0.0649871 0.06422065 0.07923954 0.0921104 0.09210336 0.09490276\n", + " 0.08739559 0.00091387 0.10149966 0.10199758 0.1018149 0.08553625\n", + " 0.09217413 0.0781451 0.13215061 0.14670343 0.1335704 0.09089986\n", + " 0.12974258 0.12772056 0.13365417 0.14824806 0.13368685 0.0902927\n", + " 0.13209618 0.12802126 0.13470573 0.1470892 0.13320525 0.08919073\n", + " 0.13411974 0.12560459 0.13025193 0.14427022 0.13314257 0.09127039\n", + " 0.1269716 0.12604755 0.02549375 -0.02868194 0.02198791 -0.06878637\n", + " 0.08502306 -0.09686185 0.12430766 0.1236005 0.12184815 0.12455057\n", + " 0.10357345 0.12772056 0.12802126 0.12560459 0.12604755 0.09767683\n", + " 0.14670343 0.14824806 0.1470892 0.14427022 0.11025228 -0.08541172\n", + " 0.00320622 0.01421383 -0. ]\n", + " [-0.00232268 -0.12881974 0.02787248 0.02355993 -0.05103525 -0.03833234\n", + " -0.10241577 -0.10242769 -0.10406663 -0.16868994 -0.01158043 0.02224374\n", + " 0.22379537 0.00406118 0.07554282 0.22202935 -0.17613668 0.01102132\n", + " -0.00219947 -0.00774407 -0.20946021 -0.03104596 -0.16686104 -0.0276374\n", + " 0.00239875 -0.02138781 -0.01017962 0.03905815 0.08279444 0.08127423\n", + " 0.08232351 0.08302786 -0.03769061 -0.10264061 -0.05103525 -0.10241577\n", + " -0.10242769 -0.10406663 -0.20229415 -0.04714243 -0.0472246 -0.04437527\n", + " -0.04544984 -0.00410633 -0.0243843 -0.17315565 -0.02241456 -0.20463355\n", + " -0.03479403 -0.21272755 0.102165 0.0761984 0.04409669 -0.19809081\n", + " 0.10852792 0.07185395 0.10098787 0.07256343 0.04730334 -0.19897927\n", + " 0.10684339 0.06898156 0.09847618 0.06586526 0.05166391 -0.20021042\n", + " 0.10334089 0.06413585 0.10281403 0.07875107 0.04107962 -0.19724869\n", + " 0.10950206 0.07374035 -0.16686104 -0.00998768 0.02400899 0.00247039\n", + " -0.01286988 -0.02138781 -0.10647349 -0.10987843 -0.11449743 -0.10326949\n", + " -0.11457314 0.07185395 0.06898156 0.06413585 0.07374035 -0.12050047\n", + " 0.0761984 0.07256343 0.06586526 0.07875107 -0.07724314 -0.09534592\n", + " -0.09249567 -0.00290366 -0. ]]\n", + "\n", + " Eigenvalues: \n", + " [33.37004789 14.1535396 ]\n", + "\n", " Projected Data: \n", - " [[-2.57657018 -1.37612723]\n", - " [ 2.04064284 -0.98806145]\n", - " [ 1.21527025 0.37016818]\n", + " [[-2.57657018 -1.37612732]\n", + " [ 2.04064284 -0.98806144]\n", + " [ 1.21527025 0.37016816]\n", " ...\n", - " [ 1.83162816 -2.95570219]\n", - " [-5.02514474 -2.52857817]\n", - " [-9.89816404 -0.80284269]]\n" + " [ 1.83162816 -2.95570213]\n", + " [-5.02514474 -2.52857814]\n", + " [-9.89816404 -0.80284267]]\n" ], "name": "stdout" } ] }, + { + "cell_type": "code", + "metadata": { + "id": "f7qmllc8TjzK", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "8d95c607-f40b-4ddc-e6eb-41ade4753997" + }, + "source": [ + "B[0:, 0].min()" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-13.931672501532011" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 36 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3ZcI0546REJq", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "e2aa6c77-6234-4178-89a3-a086f8b3efae" + }, + "source": [ + "PC1 = B[0:, 0]\n", + "PC2 = B[0:, 1]\n", + "\n", + "plt.scatter(PC1, PC2)\n", + "plt.show()" + ], + "execution_count": 38, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, { "cell_type": "markdown", "metadata": { From 7d1292d33f008f19e8c8f841a222da1169b7598f Mon Sep 17 00:00:00 2001 From: Tristan Brown <61923052+Tristan-Brown1096@users.noreply.github.com> Date: Thu, 23 Jul 2020 18:03:06 -0500 Subject: [PATCH 5/5] Created using Colaboratory --- .../LS_DS_134_Clustering_Assignment.ipynb | 1265 +++++++++++++++-- 1 file changed, 1122 insertions(+), 143 deletions(-) diff --git a/module4-clustering/LS_DS_134_Clustering_Assignment.ipynb b/module4-clustering/LS_DS_134_Clustering_Assignment.ipynb index 3342efb0..640a23a5 100644 --- a/module4-clustering/LS_DS_134_Clustering_Assignment.ipynb +++ b/module4-clustering/LS_DS_134_Clustering_Assignment.ipynb @@ -5,7 +5,8 @@ "colab": { "name": "LS_DS_134_Clustering_Assignment.ipynb", "provenance": [], - "collapsed_sections": [] + "collapsed_sections": [], + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -13,6 +14,16 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "markdown", "metadata": { @@ -54,11 +65,11 @@ "metadata": { "id": "ws5R9X6hLJQ2", "colab_type": "code", - "outputId": "078a0dfa-1b57-4a70-b7dd-6747910059c9", "colab": { "base_uri": "https://localhost:8080/", - "height": 278 - } + "height": 258 + }, + "outputId": "fdaa5eec-b254-4561-9639-74ff1c252f15" }, "source": [ "import pandas as pd\n", @@ -72,7 +83,7 @@ "print(df.shape)\n", "df.head()" ], - "execution_count": 0, + "execution_count": 19, "outputs": [ { "output_type": "stream", @@ -113,7 +124,19 @@ " compactness_mean\n", " concavity_mean\n", " concave points_mean\n", - " ...\n", + " symmetry_mean\n", + " fractal_dimension_mean\n", + " radius_se\n", + " texture_se\n", + " perimeter_se\n", + " area_se\n", + " smoothness_se\n", + " compactness_se\n", + " concavity_se\n", + " concave points_se\n", + " symmetry_se\n", + " fractal_dimension_se\n", + " radius_worst\n", " texture_worst\n", " perimeter_worst\n", " area_worst\n", @@ -139,7 +162,19 @@ " 0.27760\n", " 0.3001\n", " 0.14710\n", - " ...\n", + " 0.2419\n", + " 0.07871\n", + " 1.0950\n", + " 0.9053\n", + " 8.589\n", + " 153.40\n", + " 0.006399\n", + " 0.04904\n", + " 0.05373\n", + " 0.01587\n", + " 0.03003\n", + " 0.006193\n", + " 25.38\n", " 17.33\n", " 184.60\n", " 2019.0\n", @@ -163,7 +198,19 @@ " 0.07864\n", " 0.0869\n", " 0.07017\n", - " ...\n", + " 0.1812\n", + " 0.05667\n", + " 0.5435\n", + " 0.7339\n", + " 3.398\n", + " 74.08\n", + " 0.005225\n", + " 0.01308\n", + " 0.01860\n", + " 0.01340\n", + " 0.01389\n", + " 0.003532\n", + " 24.99\n", " 23.41\n", " 158.80\n", " 1956.0\n", @@ -187,7 +234,19 @@ " 0.15990\n", " 0.1974\n", " 0.12790\n", - " ...\n", + " 0.2069\n", + " 0.05999\n", + " 0.7456\n", + " 0.7869\n", + " 4.585\n", + " 94.03\n", + " 0.006150\n", + " 0.04006\n", + " 0.03832\n", + " 0.02058\n", + " 0.02250\n", + " 0.004571\n", + " 23.57\n", " 25.53\n", " 152.50\n", " 1709.0\n", @@ -211,7 +270,19 @@ " 0.28390\n", " 0.2414\n", " 0.10520\n", - " ...\n", + " 0.2597\n", + " 0.09744\n", + " 0.4956\n", + " 1.1560\n", + " 3.445\n", + " 27.23\n", + " 0.009110\n", + " 0.07458\n", + " 0.05661\n", + " 0.01867\n", + " 0.05963\n", + " 0.009208\n", + " 14.91\n", " 26.50\n", " 98.87\n", " 567.7\n", @@ -235,7 +306,19 @@ " 0.13280\n", " 0.1980\n", " 0.10430\n", - " ...\n", + " 0.1809\n", + " 0.05883\n", + " 0.7572\n", + " 0.7813\n", + " 5.438\n", + " 94.44\n", + " 0.011490\n", + " 0.02461\n", + " 0.05688\n", + " 0.01885\n", + " 0.01756\n", + " 0.005115\n", + " 22.54\n", " 16.67\n", " 152.20\n", " 1575.0\n", @@ -249,44 +332,15 @@ " \n", " \n", "\n", - "

5 rows × 33 columns

\n", "" ], "text/plain": [ - " id diagnosis radius_mean texture_mean perimeter_mean area_mean \\\n", - "0 842302 M 17.99 10.38 122.80 1001.0 \n", - "1 842517 M 20.57 17.77 132.90 1326.0 \n", - "2 84300903 M 19.69 21.25 130.00 1203.0 \n", - "3 84348301 M 11.42 20.38 77.58 386.1 \n", - "4 84358402 M 20.29 14.34 135.10 1297.0 \n", - "\n", - " smoothness_mean compactness_mean concavity_mean concave points_mean \\\n", - "0 0.11840 0.27760 0.3001 0.14710 \n", - "1 0.08474 0.07864 0.0869 0.07017 \n", - "2 0.10960 0.15990 0.1974 0.12790 \n", - "3 0.14250 0.28390 0.2414 0.10520 \n", - "4 0.10030 0.13280 0.1980 0.10430 \n", - "\n", - " ... texture_worst perimeter_worst area_worst smoothness_worst \\\n", - "0 ... 17.33 184.60 2019.0 0.1622 \n", - "1 ... 23.41 158.80 1956.0 0.1238 \n", - "2 ... 25.53 152.50 1709.0 0.1444 \n", - "3 ... 26.50 98.87 567.7 0.2098 \n", - "4 ... 16.67 152.20 1575.0 0.1374 \n", - "\n", - " compactness_worst concavity_worst concave points_worst symmetry_worst \\\n", - "0 0.6656 0.7119 0.2654 0.4601 \n", - "1 0.1866 0.2416 0.1860 0.2750 \n", - "2 0.4245 0.4504 0.2430 0.3613 \n", - "3 0.8663 0.6869 0.2575 0.6638 \n", - "4 0.2050 0.4000 0.1625 0.2364 \n", - "\n", - " fractal_dimension_worst Unnamed: 32 \n", - "0 0.11890 NaN \n", - "1 0.08902 NaN \n", - "2 0.08758 NaN \n", - "3 0.17300 NaN \n", - "4 0.07678 NaN \n", + " id diagnosis ... fractal_dimension_worst Unnamed: 32\n", + "0 842302 M ... 0.11890 NaN\n", + "1 842517 M ... 0.08902 NaN\n", + "2 84300903 M ... 0.08758 NaN\n", + "3 84348301 M ... 0.17300 NaN\n", + "4 84358402 M ... 0.07678 NaN\n", "\n", "[5 rows x 33 columns]" ] @@ -294,7 +348,7 @@ "metadata": { "tags": [] }, - "execution_count": 1 + "execution_count": 19 } ] }, @@ -315,17 +369,17 @@ "metadata": { "id": "86MHoPJon_aC", "colab_type": "code", - "outputId": "d4d9f1cd-c63c-4623-954e-11a61d1e3ced", "colab": { "base_uri": "https://localhost:8080/", - "height": 261 - } + "height": 241 + }, + "outputId": "f19996dd-29f0-4a2a-8489-1c12dea4e2c3" }, "source": [ - "df = df.drop('diagnosis', axis=1)\n", - "df.head()" + "df_u = df.drop(['id', 'diagnosis', 'Unnamed: 32'], axis=1)\n", + "df_u.head()" ], - "execution_count": 0, + "execution_count": 20, "outputs": [ { "output_type": "execute_result", @@ -349,7 +403,6 @@ " \n", " \n", " \n", - " id\n", " radius_mean\n", " texture_mean\n", " perimeter_mean\n", @@ -359,7 +412,18 @@ " concavity_mean\n", " concave points_mean\n", " symmetry_mean\n", - " ...\n", + " fractal_dimension_mean\n", + " radius_se\n", + " texture_se\n", + " perimeter_se\n", + " area_se\n", + " smoothness_se\n", + " compactness_se\n", + " concavity_se\n", + " concave points_se\n", + " symmetry_se\n", + " fractal_dimension_se\n", + " radius_worst\n", " texture_worst\n", " perimeter_worst\n", " area_worst\n", @@ -369,13 +433,11 @@ " concave points_worst\n", " symmetry_worst\n", " fractal_dimension_worst\n", - " Unnamed: 32\n", " \n", " \n", " \n", " \n", " 0\n", - " 842302\n", " 17.99\n", " 10.38\n", " 122.80\n", @@ -385,7 +447,18 @@ " 0.3001\n", " 0.14710\n", " 0.2419\n", - " ...\n", + " 0.07871\n", + " 1.0950\n", + " 0.9053\n", + " 8.589\n", + " 153.40\n", + " 0.006399\n", + " 0.04904\n", + " 0.05373\n", + " 0.01587\n", + " 0.03003\n", + " 0.006193\n", + " 25.38\n", " 17.33\n", " 184.60\n", " 2019.0\n", @@ -395,11 +468,9 @@ " 0.2654\n", " 0.4601\n", " 0.11890\n", - " NaN\n", " \n", " \n", " 1\n", - " 842517\n", " 20.57\n", " 17.77\n", " 132.90\n", @@ -409,7 +480,18 @@ " 0.0869\n", " 0.07017\n", " 0.1812\n", - " ...\n", + " 0.05667\n", + " 0.5435\n", + " 0.7339\n", + " 3.398\n", + " 74.08\n", + " 0.005225\n", + " 0.01308\n", + " 0.01860\n", + " 0.01340\n", + " 0.01389\n", + " 0.003532\n", + " 24.99\n", " 23.41\n", " 158.80\n", " 1956.0\n", @@ -419,11 +501,9 @@ " 0.1860\n", " 0.2750\n", " 0.08902\n", - " NaN\n", " \n", " \n", " 2\n", - " 84300903\n", " 19.69\n", " 21.25\n", " 130.00\n", @@ -433,7 +513,18 @@ " 0.1974\n", " 0.12790\n", " 0.2069\n", - " ...\n", + " 0.05999\n", + " 0.7456\n", + " 0.7869\n", + " 4.585\n", + " 94.03\n", + " 0.006150\n", + " 0.04006\n", + " 0.03832\n", + " 0.02058\n", + " 0.02250\n", + " 0.004571\n", + " 23.57\n", " 25.53\n", " 152.50\n", " 1709.0\n", @@ -443,11 +534,9 @@ " 0.2430\n", " 0.3613\n", " 0.08758\n", - " NaN\n", " \n", " \n", " 3\n", - " 84348301\n", " 11.42\n", " 20.38\n", " 77.58\n", @@ -457,7 +546,18 @@ " 0.2414\n", " 0.10520\n", " 0.2597\n", - " ...\n", + " 0.09744\n", + " 0.4956\n", + " 1.1560\n", + " 3.445\n", + " 27.23\n", + " 0.009110\n", + " 0.07458\n", + " 0.05661\n", + " 0.01867\n", + " 0.05963\n", + " 0.009208\n", + " 14.91\n", " 26.50\n", " 98.87\n", " 567.7\n", @@ -467,11 +567,9 @@ " 0.2575\n", " 0.6638\n", " 0.17300\n", - " NaN\n", " \n", " \n", " 4\n", - " 84358402\n", " 20.29\n", " 14.34\n", " 135.10\n", @@ -481,7 +579,18 @@ " 0.1980\n", " 0.10430\n", " 0.1809\n", - " ...\n", + " 0.05883\n", + " 0.7572\n", + " 0.7813\n", + " 5.438\n", + " 94.44\n", + " 0.011490\n", + " 0.02461\n", + " 0.05688\n", + " 0.01885\n", + " 0.01756\n", + " 0.005115\n", + " 22.54\n", " 16.67\n", " 152.20\n", " 1575.0\n", @@ -491,56 +600,26 @@ " 0.1625\n", " 0.2364\n", " 0.07678\n", - " NaN\n", " \n", " \n", "\n", - "

5 rows × 32 columns

\n", "" ], "text/plain": [ - " id radius_mean texture_mean perimeter_mean area_mean \\\n", - "0 842302 17.99 10.38 122.80 1001.0 \n", - "1 842517 20.57 17.77 132.90 1326.0 \n", - "2 84300903 19.69 21.25 130.00 1203.0 \n", - "3 84348301 11.42 20.38 77.58 386.1 \n", - "4 84358402 20.29 14.34 135.10 1297.0 \n", - "\n", - " smoothness_mean compactness_mean concavity_mean concave points_mean \\\n", - "0 0.11840 0.27760 0.3001 0.14710 \n", - "1 0.08474 0.07864 0.0869 0.07017 \n", - "2 0.10960 0.15990 0.1974 0.12790 \n", - "3 0.14250 0.28390 0.2414 0.10520 \n", - "4 0.10030 0.13280 0.1980 0.10430 \n", + " radius_mean texture_mean ... symmetry_worst fractal_dimension_worst\n", + "0 17.99 10.38 ... 0.4601 0.11890\n", + "1 20.57 17.77 ... 0.2750 0.08902\n", + "2 19.69 21.25 ... 0.3613 0.08758\n", + "3 11.42 20.38 ... 0.6638 0.17300\n", + "4 20.29 14.34 ... 0.2364 0.07678\n", "\n", - " symmetry_mean ... texture_worst perimeter_worst area_worst \\\n", - "0 0.2419 ... 17.33 184.60 2019.0 \n", - "1 0.1812 ... 23.41 158.80 1956.0 \n", - "2 0.2069 ... 25.53 152.50 1709.0 \n", - "3 0.2597 ... 26.50 98.87 567.7 \n", - "4 0.1809 ... 16.67 152.20 1575.0 \n", - "\n", - " smoothness_worst compactness_worst concavity_worst concave points_worst \\\n", - "0 0.1622 0.6656 0.7119 0.2654 \n", - "1 0.1238 0.1866 0.2416 0.1860 \n", - "2 0.1444 0.4245 0.4504 0.2430 \n", - "3 0.2098 0.8663 0.6869 0.2575 \n", - "4 0.1374 0.2050 0.4000 0.1625 \n", - "\n", - " symmetry_worst fractal_dimension_worst Unnamed: 32 \n", - "0 0.4601 0.11890 NaN \n", - "1 0.2750 0.08902 NaN \n", - "2 0.3613 0.08758 NaN \n", - "3 0.6638 0.17300 NaN \n", - "4 0.2364 0.07678 NaN \n", - "\n", - "[5 rows x 32 columns]" + "[5 rows x 30 columns]" ] }, "metadata": { "tags": [] }, - "execution_count": 2 + "execution_count": 20 } ] }, @@ -562,69 +641,969 @@ "metadata": { "id": "U92Y3jNKPpjJ", "colab_type": "code", - "colab": {} - }, - "source": [ - "# Perform K-Means Clustering on the Dataset" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7ghqYSxrP_FE", - "colab_type": "text" + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "outputId": "2aaf68b4-0032-4059-a218-dea823bbc62b" }, "source": [ - "## Check you work: \n", + "# Perform K-Means Clustering on the Dataset\n", + "sum_of_squared_distances = []\n", + "K = range(1,10)\n", + "for k in K:\n", + " km = KMeans(n_clusters=k)\n", + " km = km.fit(df_u)\n", + " sum_of_squared_distances.append(km.inertia_)\n", "\n", - "This is something that in a truly unsupervised learning situation **WOULD NOT BE POSSIBLE**. But for educational purposes go back and grab the true diagnosis column (label) from the original dataset. Take your cluster labels and compare them to the original diagnosis column. You can make scatterplots for each to see how they compare or you can calculate a percent accuracy score like: \n", - "\\begin{align}\n", - "\\frac{\\text{Num Correct Labels}}{\\text{Num Total Observations}}\n", - "\\end{align}" + "plt.plot(K, sum_of_squared_distances, 'bx-')\n", + "plt.xlabel('k')\n", + "plt.ylabel('Sum_of_squared_distances')\n", + "plt.title('Elbow Method For Optimal k')\n", + "plt.show()" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "code", "metadata": { - "id": "OIG7-yGLP-eA", + "id": "_m7OqXrYJeW7", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 592 + }, + "outputId": "ff636c94-5365-4170-84d1-509da0e6dc78" }, "source": [ - "# Your Code Here" + "import math\n", + "import numpy as np\n", + "from scipy.spatial import distance\n", + "from sklearn.cluster import KMeans\n", + "\n", + "def get_centroids(df, column_header):\n", + " new_centroids = df.groupby(column_header).mean()\n", + " return new_centroids\n", + "\n", + "def plot_clusters(df, column_header, centroids):\n", + " colors = {0:'red', 1:'green', 2:'yellow'}\n", + " fig, ax = plt.subplots()\n", + " ax.plot(centroids.iloc[0].x, centroids.iloc[0].y, \"ok\")\n", + " ax.plot(centroids.iloc[1].x, centroids.iloc[1].y, \"ok\")\n", + " ax.plot(centroids.iloc[2].x, centroids.iloc[2].y, \"ok\")\n", + " grouped = df.groupby(column_header)\n", + " for key, group in grouped:\n", + " group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])\n", + " plt.show() \n", + "\n", + "kmeans = KMeans(n_clusters=2)\n", + "kmeans.fit(df_u)\n", + "labels = kmeans.labels_\n", + "\n", + "new_series = pd.Series(labels)\n", + "df['clusters'] = new_series.values\n" ], - "execution_count": 0, - "outputs": [] + "execution_count": 52, + "outputs": [ + { + "output_type": "error", + "ename": "AttributeError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcolumn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf_u\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0mcentroids\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_centroids\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_u\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0mplot_clusters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_u\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumn_header\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolumn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcentroids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcentroids\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mplot_clusters\u001b[0;34m(df, column_header, centroids)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mcolors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'red'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'green'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'yellow'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"ok\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"ok\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcentroids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"ok\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 5272\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5273\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5274\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5275\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5276\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Series' object has no attribute 'x'" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", "metadata": { - "id": "BedOTS0eJ9_K", + "id": "7ghqYSxrP_FE", "colab_type": "text" }, "source": [ - "# 2) Perform PCA on your dataset first and *then* use k-means clustering. \n", + "## Check you work: \n", "\n", - "- You need to standardize your data before PCA.\n", - "- First try clustering just on PC1 and PC2 so that you can make a scatterplot of your clustering.\n", - "- Then use use a scree plot to decide how many principal components to include in your clustering, and use however many principal components you need in order to retain 90% of the variation of the original dataset\n", - "\n" + "This is something that in a truly unsupervised learning situation **WOULD NOT BE POSSIBLE**. But for educational purposes go back and grab the true diagnosis column (label) from the original dataset. Take your cluster labels and compare them to the original diagnosis column. You can make scatterplots for each to see how they compare or you can calculate a percent accuracy score like: \n", + "\\begin{align}\n", + "\\frac{\\text{Num Correct Labels}}{\\text{Num Total Observations}}\n", + "\\end{align}" ] }, { "cell_type": "code", "metadata": { - "id": "dW1AeAK8PNah", + "id": "OIG7-yGLP-eA", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 241 + }, + "outputId": "ce43ad16-6f7c-4998-991a-71eff5f99320" }, "source": [ - "##### Your Code Here #####" + "# Your Code Here\n", + "df['diagnosis'] = df['diagnosis'].astype('category')\n", + "df['diagnosis'] = df['diagnosis'].cat.codes\n", + "df.head()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 23, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddiagnosisradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_meanfractal_dimension_meanradius_setexture_seperimeter_searea_sesmoothness_secompactness_seconcavity_seconcave points_sesymmetry_sefractal_dimension_seradius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave points_worstsymmetry_worstfractal_dimension_worstUnnamed: 32clusters
0842302117.9910.38122.801001.00.118400.277600.30010.147100.24190.078711.09500.90538.589153.400.0063990.049040.053730.015870.030030.00619325.3817.33184.602019.00.16220.66560.71190.26540.46010.11890NaN1
1842517120.5717.77132.901326.00.084740.078640.08690.070170.18120.056670.54350.73393.39874.080.0052250.013080.018600.013400.013890.00353224.9923.41158.801956.00.12380.18660.24160.18600.27500.08902NaN1
284300903119.6921.25130.001203.00.109600.159900.19740.127900.20690.059990.74560.78694.58594.030.0061500.040060.038320.020580.022500.00457123.5725.53152.501709.00.14440.42450.45040.24300.36130.08758NaN1
384348301111.4220.3877.58386.10.142500.283900.24140.105200.25970.097440.49561.15603.44527.230.0091100.074580.056610.018670.059630.00920814.9126.5098.87567.70.20980.86630.68690.25750.66380.17300NaN0
484358402120.2914.34135.101297.00.100300.132800.19800.104300.18090.058830.75720.78135.43894.440.0114900.024610.056880.018850.017560.00511522.5416.67152.201575.00.13740.20500.40000.16250.23640.07678NaN1
\n", + "
" + ], + "text/plain": [ + " id diagnosis ... Unnamed: 32 clusters\n", + "0 842302 1 ... NaN 1\n", + "1 842517 1 ... NaN 1\n", + "2 84300903 1 ... NaN 1\n", + "3 84348301 1 ... NaN 0\n", + "4 84358402 1 ... NaN 1\n", + "\n", + "[5 rows x 34 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 23 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "9dNqTmF9MbNo", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 241 + }, + "outputId": "41eec8a3-3d80-414e-894b-91be720f849a" + }, + "source": [ + "df['correct'] = np.where((df['diagnosis'] == df['clusters']), 1, 0)\n", + "df.head()" + ], + "execution_count": 33, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddiagnosisradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_meanfractal_dimension_meanradius_setexture_seperimeter_searea_sesmoothness_secompactness_seconcavity_seconcave points_sesymmetry_sefractal_dimension_seradius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave points_worstsymmetry_worstfractal_dimension_worstUnnamed: 32clusterscorrect
0842302117.9910.38122.801001.00.118400.277600.30010.147100.24190.078711.09500.90538.589153.400.0063990.049040.053730.015870.030030.00619325.3817.33184.602019.00.16220.66560.71190.26540.46010.11890NaN11
1842517120.5717.77132.901326.00.084740.078640.08690.070170.18120.056670.54350.73393.39874.080.0052250.013080.018600.013400.013890.00353224.9923.41158.801956.00.12380.18660.24160.18600.27500.08902NaN11
284300903119.6921.25130.001203.00.109600.159900.19740.127900.20690.059990.74560.78694.58594.030.0061500.040060.038320.020580.022500.00457123.5725.53152.501709.00.14440.42450.45040.24300.36130.08758NaN11
384348301111.4220.3877.58386.10.142500.283900.24140.105200.25970.097440.49561.15603.44527.230.0091100.074580.056610.018670.059630.00920814.9126.5098.87567.70.20980.86630.68690.25750.66380.17300NaN00
484358402120.2914.34135.101297.00.100300.132800.19800.104300.18090.058830.75720.78135.43894.440.0114900.024610.056880.018850.017560.00511522.5416.67152.201575.00.13740.20500.40000.16250.23640.07678NaN11
\n", + "
" + ], + "text/plain": [ + " id diagnosis radius_mean ... Unnamed: 32 clusters correct\n", + "0 842302 1 17.99 ... NaN 1 1\n", + "1 842517 1 20.57 ... NaN 1 1\n", + "2 84300903 1 19.69 ... NaN 1 1\n", + "3 84348301 1 11.42 ... NaN 0 0\n", + "4 84358402 1 20.29 ... NaN 1 1\n", + "\n", + "[5 rows x 35 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 33 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LcVREorFMtWG", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "9f323975-7e5e-45af-e3b7-462d9350607f" + }, + "source": [ + "df['correct'].sum() / df.shape[0]" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.8541300527240774" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 36 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "C-QqUlyryzH8", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BedOTS0eJ9_K", + "colab_type": "text" + }, + "source": [ + "# 2) Perform PCA on your dataset first and *then* use k-means clustering. \n", + "\n", + "- You need to standardize your data before PCA.\n", + "- First try clustering just on PC1 and PC2 so that you can make a scatterplot of your clustering.\n", + "- Then use use a scree plot to decide how many principal components to include in your clustering, and use however many principal components you need in order to retain 90% of the variation of the original dataset\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dW1AeAK8PNah", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 238 + }, + "outputId": "413612d9-09d3-418f-b76d-cb617154aeca" + }, + "source": [ + "##### Your Code Here #####\n", + "df_p = df_u.copy()\n", + "scaler = StandardScaler()\n", + "df_p = scaler.fit_transform(df_p)\n", + "df_p" + ], + "execution_count": 38, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 1.09706398, -2.07333501, 1.26993369, ..., 2.29607613,\n", + " 2.75062224, 1.93701461],\n", + " [ 1.82982061, -0.35363241, 1.68595471, ..., 1.0870843 ,\n", + " -0.24388967, 0.28118999],\n", + " [ 1.57988811, 0.45618695, 1.56650313, ..., 1.95500035,\n", + " 1.152255 , 0.20139121],\n", + " ...,\n", + " [ 0.70228425, 2.0455738 , 0.67267578, ..., 0.41406869,\n", + " -1.10454895, -0.31840916],\n", + " [ 1.83834103, 2.33645719, 1.98252415, ..., 2.28998549,\n", + " 1.91908301, 2.21963528],\n", + " [-1.80840125, 1.22179204, -1.81438851, ..., -1.74506282,\n", + " -0.04813821, -0.75120669]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 38 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "GxQ8k5NJPjPy", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "74f32d69-edb5-4c10-b364-38cb27f28a4e" + }, + "source": [ + "pca = PCA(7)\n", + "df_pca = pca.fit_transform(df_p)\n", + "pca.explained_variance_ratio_.sum()" + ], + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.9100953006955538" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 44 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yDEfjj9sQUQ5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 404 + }, + "outputId": "a3b8a9a3-7235-4a7c-d02c-6a192b85e81f" + }, + "source": [ + "def scree_plot(pca):\n", + " num_components=len(pca.explained_variance_ratio_)\n", + " ind = np.arange(num_components)\n", + " vals = pca.explained_variance_ratio_\n", + " \n", + " plt.figure(figsize=(18, 6))\n", + " ax = plt.subplot(111)\n", + " cumvals = np.cumsum(vals)\n", + " ax.bar(ind, vals)\n", + " ax.plot(ind, cumvals)\n", + " for i in range(num_components):\n", + " ax.annotate(r\"%s\" % ((str(vals[i]*100)[:3])), (ind[i], vals[i]), va=\"bottom\", ha=\"center\", fontsize=4.5)\n", + " \n", + " ax.xaxis.set_tick_params(width=0)\n", + " ax.yaxis.set_tick_params(width=2, length=12)\n", + " \n", + " ax.set_xlabel(\"Principal Component\")\n", + " ax.set_ylabel(\"Variance Explained (%)\")\n", + " plt.title('Explained Variance Per Principal Component')\n", + "\n", + "scree_plot(pca)" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "4JwpLiCLQ_Yu", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "outputId": "85236a3f-a038-45f2-f6cb-bdb03e95a16a" + }, + "source": [ + "sum_of_squared_distances = []\n", + "K = range(1,10)\n", + "for k in K:\n", + " km = KMeans(n_clusters=k)\n", + " km = km.fit(df_p)\n", + " sum_of_squared_distances.append(km.inertia_)\n", + "\n", + "plt.plot(K, sum_of_squared_distances, 'bx-')\n", + "plt.xlabel('k')\n", + "plt.ylabel('Sum_of_squared_distances')\n", + "plt.title('Elbow Method For Optimal k')\n", + "plt.show()" + ], + "execution_count": 46, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7Pp18VieRUPp", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "c48a3881-51fb-49b0-caba-aa7e9bb7b093" + }, + "source": [ + "kmeans = KMeans(n_clusters=2)\n", + "kmeans.fit(df_p)\n", + "labels = kmeans.labels_\n", + "\n", + "new_series = pd.Series(labels)\n", + "df['clusters'] = new_series.values\n", + "\n", + "df['correct'] = np.where((df['diagnosis'] == df['clusters']), 1, 0)\n", + "\n", + "df['correct'].sum() / df.shape[0]" + ], + "execution_count": 47, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.9050966608084359" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 47 + } + ] }, { "cell_type": "markdown", @@ -664,7 +1643,7 @@ "source": [ "" ], - "execution_count": 0, + "execution_count": null, "outputs": [] } ]