501 lines
91 KiB
Plaintext
501 lines
91 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Your Turn\n",
|
|
"\n",
|
|
"In the previous video, you saw an example of working with some MNIST digits data. A link to the dataset can be found here: http://yann.lecun.com/exdb/mnist/.\n",
|
|
"\n",
|
|
"First, let's import the necessary libraries. Notice, there are also some imports from a file called `helper_functions`, which contains the functions used in the previous video."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"from sklearn.decomposition import PCA\n",
|
|
"from sklearn.preprocessing import StandardScaler\n",
|
|
"from sklearn.ensemble import RandomForestClassifier\n",
|
|
"from sklearn.model_selection import train_test_split\n",
|
|
"from sklearn.metrics import confusion_matrix, accuracy_score\n",
|
|
"from helper_functions import show_images, show_images_by_digit, fit_random_forest_classifier2 \n",
|
|
"from helper_functions import fit_random_forest_classifier, do_pca, plot_components\n",
|
|
"import test_code as t\n",
|
|
"\n",
|
|
"import matplotlib.image as mpimg\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import seaborn as sns\n",
|
|
"\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`1.` Use pandas to read in the dataset, which can be found at the following address **'./data/train.csv'**. Take a look at info about the data using `head`, `tail`, `describe`, `info`, etc. You can learn more about the data values from the article here: https://homepages.inf.ed.ac.uk/rbf/HIPR2/value.htm."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"train = pd.read_csv('./data/train.csv')\n",
|
|
"train.fillna(0, inplace=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`2.` Create a vector called **y** that holds the **label** column of the dataset. Store all other columns holding the pixel data of your images in **X**."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# save the labels to a Pandas series target\n",
|
|
"y = train['label']\n",
|
|
"\n",
|
|
"# Drop the label feature\n",
|
|
"X = train.drop(\"label\",axis=1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"That looks right!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#Check Your Solution \n",
|
|
"t.question_two_check(y, X)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`3.` Now use the `show_images_by_digit` function from the `helper_functions` module to take a look some of the `1`'s, `2`'s, `3`'s, or any other value you are interested in looking at. Do they all look like what you would expect?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x115a3da20>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"show_images_by_digit(2) # Try looking at a few other digits"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`4.` Now that you have had a chance to look through some of the data, you can try some different algorithms to see what works well to use the X matrix to predict the response well. If you would like to use the function I used in the video regarding random forests, you can run the code below, but you might also try any of the supervised techniques you learned in the previous course to see what works best.\n",
|
|
"\n",
|
|
"If you decide to put together your own classifier, remember the 4 steps to this process:\n",
|
|
"\n",
|
|
"**I.** Instantiate your model. (with all the hyperparameter values you care about)\n",
|
|
"\n",
|
|
"**II.** Fit your model. (to the training data)\n",
|
|
"\n",
|
|
"**III.** Predict using your fitted model. (on the test data)\n",
|
|
"\n",
|
|
"**IV.** Score your model. (comparing the predictions to the actual values on the test data)\n",
|
|
"\n",
|
|
"You can also try a grid search to see if you can improve on your initial predictions."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[1317 0 2 0 2 1 5 0 6 0]\n",
|
|
" [ 1 1501 5 3 2 2 3 1 1 1]\n",
|
|
" [ 6 4 1354 8 13 1 7 10 10 1]\n",
|
|
" [ 6 3 13 1378 3 22 2 16 18 10]\n",
|
|
" [ 4 0 1 0 1311 0 7 3 3 29]\n",
|
|
" [ 6 2 2 18 2 1149 10 1 8 7]\n",
|
|
" [ 9 3 1 0 4 8 1366 0 6 0]\n",
|
|
" [ 1 8 23 2 10 1 0 1405 4 26]\n",
|
|
" [ 3 5 6 11 7 6 5 3 1273 15]\n",
|
|
" [ 6 4 4 20 11 4 2 9 13 1275]]\n",
|
|
"0.961688311688\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"fit_random_forest_classifier(X, y)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`5.` Now the purpose of this lesson, to look at PCA. In the video, I created a model just using two features. Replicate the process below. You can use the same `do_pca` function that was created in the previous video. Store your variables in **pca** and **X_pca**."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 36,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"pca, X_pca = do_pca(2, X) #performs PCA to create two components"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`6.` The **X_pca** has moved the original more than 700 features down to only 2 features that capture the majority of the variability in the pixel values. Use the space below to fit a model using these two features to predict the written value. You can use the random forest model by running `fit_random_forest_classifier` the same way as in the video. How well does it perform?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[ 828 0 181 49 32 44 139 8 40 12]\n",
|
|
" [ 1 1291 2 16 28 34 19 44 38 47]\n",
|
|
" [ 228 5 305 194 130 119 204 52 121 56]\n",
|
|
" [ 79 26 207 222 149 178 172 143 174 121]\n",
|
|
" [ 51 60 120 163 226 111 123 171 129 204]\n",
|
|
" [ 64 22 133 131 135 228 191 48 194 59]\n",
|
|
" [ 203 28 218 159 112 203 279 33 129 33]\n",
|
|
" [ 9 81 60 112 177 74 30 527 78 332]\n",
|
|
" [ 57 51 119 158 138 224 154 86 230 117]\n",
|
|
" [ 15 110 61 96 206 62 50 312 71 365]]\n",
|
|
"0.324747474747\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"fit_random_forest_classifier(X_pca, y)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`7.` Now you can look at the separation of the values using the `plot_components` function. If you plot all of the points (more than 40,000), you will likely not be able to see much of what is happening. I recommend plotting just a subset of the data. Which value(s) have some separation that are being predicted better than others based on these two components?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 38,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x116fdf208>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plot_components(X_pca[:100], y[:100])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`8.` See if you can find a reduced number of features that provides better separation to make predictions. Say you want to get separation that allows for accuracy of more than 90%, how many principal components are needed to obtain this level of accuracy? Were you able to substantially reduce the number of features needed in your final model?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 42,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[ 820 0 179 51 33 50 140 5 47 8]\n",
|
|
" [ 1 1294 3 14 30 33 20 50 35 40]\n",
|
|
" [ 224 5 316 205 129 111 200 54 116 54]\n",
|
|
" [ 79 22 199 223 146 189 172 146 169 126]\n",
|
|
" [ 52 58 128 164 223 113 120 163 131 206]\n",
|
|
" [ 63 24 133 127 139 227 192 43 201 56]\n",
|
|
" [ 190 28 228 157 104 196 284 32 145 33]\n",
|
|
" [ 9 79 66 113 175 67 35 522 81 333]\n",
|
|
" [ 51 54 129 159 138 210 155 84 232 122]\n",
|
|
" [ 16 113 62 103 192 59 55 310 74 364]]\n",
|
|
"0.325036075036\n",
|
|
"[[1002 0 37 12 22 51 151 0 57 1]\n",
|
|
" [ 0 1420 6 14 5 5 25 2 40 3]\n",
|
|
" [ 93 4 671 307 29 65 184 0 58 3]\n",
|
|
" [ 22 24 333 573 50 85 179 33 155 17]\n",
|
|
" [ 44 12 8 22 752 79 12 97 53 279]\n",
|
|
" [ 58 4 88 104 174 384 151 21 178 43]\n",
|
|
" [ 210 34 121 94 17 76 739 2 104 0]\n",
|
|
" [ 4 23 0 27 194 30 7 813 20 362]\n",
|
|
" [ 58 39 61 192 141 266 215 18 320 24]\n",
|
|
" [ 12 3 1 19 321 31 6 293 17 645]]\n",
|
|
"0.528066378066\n",
|
|
"[[1157 0 48 3 25 31 17 2 49 1]\n",
|
|
" [ 1 1444 9 3 2 2 12 6 37 4]\n",
|
|
" [ 92 7 945 87 34 30 171 4 42 2]\n",
|
|
" [ 18 11 95 986 9 123 11 20 185 13]\n",
|
|
" [ 22 10 17 1 894 38 21 81 9 265]\n",
|
|
" [ 39 3 59 142 68 540 15 35 266 38]\n",
|
|
" [ 33 8 121 3 19 11 1183 0 19 0]\n",
|
|
" [ 4 26 6 12 120 32 2 891 51 336]\n",
|
|
" [ 81 42 31 176 32 272 12 29 632 27]\n",
|
|
" [ 14 3 3 13 282 30 2 257 32 712]]\n",
|
|
"0.677056277056\n",
|
|
"[[1182 0 38 2 11 20 21 3 56 0]\n",
|
|
" [ 1 1463 14 7 0 5 4 6 17 3]\n",
|
|
" [ 60 3 1093 87 22 22 84 7 34 2]\n",
|
|
" [ 17 10 96 1040 11 124 6 26 135 6]\n",
|
|
" [ 13 9 15 3 951 7 17 50 10 283]\n",
|
|
" [ 41 4 51 150 25 590 10 63 254 17]\n",
|
|
" [ 37 4 83 1 17 8 1224 0 23 0]\n",
|
|
" [ 4 26 9 19 58 24 3 1193 23 121]\n",
|
|
" [ 70 22 22 116 27 228 13 18 788 30]\n",
|
|
" [ 11 3 1 10 276 28 4 121 25 869]]\n",
|
|
"0.749855699856\n",
|
|
"[[1218 0 5 4 10 38 25 0 32 1]\n",
|
|
" [ 1 1483 9 8 0 2 5 2 6 4]\n",
|
|
" [ 14 1 1247 43 24 3 21 9 52 0]\n",
|
|
" [ 7 12 51 1101 10 89 9 32 153 7]\n",
|
|
" [ 7 11 20 0 1001 5 16 32 14 252]\n",
|
|
" [ 43 1 5 110 23 907 25 16 66 9]\n",
|
|
" [ 37 4 23 2 16 10 1292 0 13 0]\n",
|
|
" [ 2 13 20 6 50 3 0 1265 21 100]\n",
|
|
" [ 20 12 28 111 36 61 14 17 1014 21]\n",
|
|
" [ 9 5 2 15 257 15 2 96 31 916]]\n",
|
|
"0.825685425685\n",
|
|
"[[1220 0 5 4 12 35 24 0 33 0]\n",
|
|
" [ 0 1489 8 6 0 1 5 2 5 4]\n",
|
|
" [ 16 4 1253 38 22 3 24 10 44 0]\n",
|
|
" [ 12 14 51 1164 14 66 6 25 112 7]\n",
|
|
" [ 2 10 18 3 1024 7 16 29 12 237]\n",
|
|
" [ 39 2 6 113 26 917 26 17 49 10]\n",
|
|
" [ 44 4 23 2 14 14 1288 0 8 0]\n",
|
|
" [ 1 11 15 6 41 4 0 1284 24 94]\n",
|
|
" [ 19 15 26 101 29 51 15 14 1043 21]\n",
|
|
" [ 9 4 3 14 245 15 2 89 35 932]]\n",
|
|
"0.837950937951\n",
|
|
"[[1268 0 5 5 2 23 20 2 8 0]\n",
|
|
" [ 1 1493 8 7 0 2 5 2 0 2]\n",
|
|
" [ 17 2 1271 35 18 7 20 9 34 1]\n",
|
|
" [ 10 11 38 1221 8 51 4 21 95 12]\n",
|
|
" [ 3 7 18 6 1064 8 15 17 9 211]\n",
|
|
" [ 36 2 10 76 22 966 22 3 54 14]\n",
|
|
" [ 38 3 16 2 12 16 1303 0 7 0]\n",
|
|
" [ 1 13 15 6 31 2 0 1321 11 80]\n",
|
|
" [ 12 14 19 65 30 57 9 4 1102 22]\n",
|
|
" [ 8 4 5 18 238 10 2 87 33 943]]\n",
|
|
"0.862337662338\n",
|
|
"[[1265 0 6 1 1 21 25 2 12 0]\n",
|
|
" [ 1 1487 8 6 1 3 5 1 1 7]\n",
|
|
" [ 14 3 1282 37 20 2 11 13 32 0]\n",
|
|
" [ 9 10 39 1239 7 44 5 23 83 12]\n",
|
|
" [ 4 9 14 5 1078 7 14 13 13 201]\n",
|
|
" [ 25 2 7 62 18 1016 20 2 40 13]\n",
|
|
" [ 41 4 8 0 7 9 1320 0 8 0]\n",
|
|
" [ 0 13 19 10 25 1 0 1325 10 77]\n",
|
|
" [ 10 10 15 42 34 50 10 7 1139 17]\n",
|
|
" [ 10 4 3 21 212 7 2 75 27 987]]\n",
|
|
"0.875757575758\n",
|
|
"[[1267 1 5 2 2 25 20 1 9 1]\n",
|
|
" [ 0 1490 8 3 1 3 6 2 2 5]\n",
|
|
" [ 16 2 1296 29 12 2 11 14 31 1]\n",
|
|
" [ 8 9 36 1265 2 43 3 22 69 14]\n",
|
|
" [ 4 7 11 2 1161 4 12 10 8 139]\n",
|
|
" [ 25 1 4 58 16 1019 25 3 38 16]\n",
|
|
" [ 31 4 8 0 9 12 1325 0 8 0]\n",
|
|
" [ 1 12 17 10 11 2 0 1338 13 76]\n",
|
|
" [ 11 13 17 31 19 42 9 6 1169 17]\n",
|
|
" [ 11 4 4 21 106 11 2 62 24 1103]]\n",
|
|
"0.897041847042\n",
|
|
"[[1282 0 5 0 2 17 18 0 7 2]\n",
|
|
" [ 0 1491 7 4 1 2 6 1 2 6]\n",
|
|
" [ 16 1 1299 29 12 3 8 12 33 1]\n",
|
|
" [ 6 8 31 1282 2 39 4 23 63 13]\n",
|
|
" [ 2 7 13 2 1177 2 12 12 8 123]\n",
|
|
" [ 18 1 6 62 12 1024 19 3 42 18]\n",
|
|
" [ 22 4 6 1 9 14 1334 0 7 0]\n",
|
|
" [ 0 13 19 9 13 2 0 1336 15 73]\n",
|
|
" [ 6 11 11 32 20 46 8 5 1179 16]\n",
|
|
" [ 12 2 3 23 92 5 2 66 25 1118]]\n",
|
|
"0.903463203463\n",
|
|
"With only 11 components, a random forest acheived an accuracy of 0.9034632034632034.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for comp in range(2, 100):\n",
|
|
" pca, X_pca = do_pca(comp, X)\n",
|
|
" acc = fit_random_forest_classifier(X_pca, y)\n",
|
|
" if acc > .90:\n",
|
|
" print(\"With only {} components, a random forest acheived an accuracy of {}.\".format(comp, acc))\n",
|
|
" break"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"`9.` It is possible that extra features in the dataset even lead to overfitting or the [curse of dimensionality](https://stats.stackexchange.com/questions/65379/machine-learning-curse-of-dimensionality-explained). Do you have evidence of this happening for this dataset? Can you support your evidence with a visual or table? To avoid printing out all of the metric results, I created another function called `fit_random_forest_classifier2`. I ran through a significant number of components to create the visual for the solution, but I strongly recommend you look in the range below 100 principal components!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 46,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# I would highly recommend not running the below code, as it had to run overnight to complete.\n",
|
|
"# Instead, you can run a smaller number of components that still allows you to see enough.\n",
|
|
"\n",
|
|
"\n",
|
|
"#accs = []\n",
|
|
"#comps = []\n",
|
|
"#for comp in range(2, 700):\n",
|
|
"# comps.append(comp)\n",
|
|
"# pca, X_pca = do_pca(comp, X)\n",
|
|
"# acc = fit_random_forest_classifier2(X_pca, y)\n",
|
|
"# accs.append(acc)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 48,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nYII=\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x1394e07f0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(comps, accs, 'bo');\n",
|
|
"plt.xlabel('Number of Components');\n",
|
|
"plt.ylabel('Accuracy');\n",
|
|
"plt.title('Number of Components by Accuracy');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 58,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(0.94126984126984126, 61)"
|
|
]
|
|
},
|
|
"execution_count": 58,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# The max accuracy and corresponding number of components\n",
|
|
"np.max(accs), comps[np.where(accs == np.max(accs))[0][0]]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Here you can see that the accuracy quickly levels off. The maximum accuracy is actually acheived at 61 principal components. Given the slight negative trend also indicates that the final components are mostly containing noise. The 61 components here contain the information needed to be able to determine the images nearly to the same ability as using the entire image. Next, let's take a closer look at exactly what other information we get from PCA, and how we can interpret it.** "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|