diff --git a/03_overfitting_and_cross_validation.ipynb b/03_overfitting_and_cross_validation.ipynb index 26e78cb63f281545fe95fb18b07bee67447069dc..48d8e6cc3668be0b4410852ad10969eac49e0dd9 100644 --- a/03_overfitting_and_cross_validation.ipynb +++ b/03_overfitting_and_cross_validation.ipynb @@ -3,7 +3,15 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:02.046041Z", + "iopub.status.busy": "2021-03-02T13:54:02.045749Z", + "iopub.status.idle": "2021-03-02T13:54:02.426924Z", + "shell.execute_reply": "2021-03-02T13:54:02.426218Z", + "shell.execute_reply.started": "2021-03-02T13:54:02.045967Z" + } + }, "outputs": [ { "data": { @@ -103,15 +111,15 @@ " div#maintoolbar {display: none !important;}\n", " /*\n", "\n", - " div#site { \n", - " border-top: 20px solid #1F407A; \n", - " border-right: 20px solid #1F407A; \n", + " div#site {\n", + " border-top: 20px solid #1F407A;\n", + " border-right: 20px solid #1F407A;\n", " margin-bottom: 0;\n", " padding-bottom: 0;\n", " }\n", - " div#toc-wrapper { \n", - " border-left: 20px solid #1F407A; \n", - " border-top: 20px solid #1F407A; \n", + " div#toc-wrapper {\n", + " border-left: 20px solid #1F407A;\n", + " border-top: 20px solid #1F407A;\n", "\n", " }\n", "\n", @@ -184,6 +192,13 @@ "cell_type": "code", "execution_count": 2, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:02.429163Z", + "iopub.status.busy": "2021-03-02T13:54:02.428969Z", + "iopub.status.idle": "2021-03-02T13:54:03.335884Z", + "shell.execute_reply": "2021-03-02T13:54:03.335258Z", + "shell.execute_reply.started": "2021-03-02T13:54:02.429141Z" + }, "scrolled": true }, "outputs": [ @@ -238,7 +253,15 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:03.337455Z", + "iopub.status.busy": "2021-03-02T13:54:03.337185Z", + "iopub.status.idle": "2021-03-02T13:54:03.343547Z", + "shell.execute_reply": "2021-03-02T13:54:03.342934Z", + "shell.execute_reply.started": "2021-03-02T13:54:03.337428Z" + } + }, "outputs": [ { "name": "stdout", @@ -256,7 +279,15 @@ { "cell_type": "code", "execution_count": 4, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:03.344863Z", + "iopub.status.busy": "2021-03-02T13:54:03.344669Z", + "iopub.status.idle": "2021-03-02T13:54:03.351020Z", + "shell.execute_reply": "2021-03-02T13:54:03.350368Z", + "shell.execute_reply.started": "2021-03-02T13:54:03.344839Z" + } + }, "outputs": [ { "name": "stdout", @@ -313,7 +344,15 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:03.352411Z", + "iopub.status.busy": "2021-03-02T13:54:03.352086Z", + "iopub.status.idle": "2021-03-02T13:54:03.566878Z", + "shell.execute_reply": "2021-03-02T13:54:03.566233Z", + "shell.execute_reply.started": "2021-03-02T13:54:03.352384Z" + } + }, "outputs": [ { "data": { @@ -358,7 +397,15 @@ { "cell_type": "code", "execution_count": 6, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:03.568259Z", + "iopub.status.busy": "2021-03-02T13:54:03.567988Z", + "iopub.status.idle": "2021-03-02T13:54:03.577770Z", + "shell.execute_reply": "2021-03-02T13:54:03.576898Z", + "shell.execute_reply.started": "2021-03-02T13:54:03.568234Z" + } + }, "outputs": [], "source": [ "# utility functions copy-pasted from previous script\n", @@ -423,7 +470,15 @@ { "cell_type": "code", "execution_count": 7, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:03.582291Z", + "iopub.status.busy": "2021-03-02T13:54:03.582067Z", + "iopub.status.idle": "2021-03-02T13:54:08.423607Z", + "shell.execute_reply": "2021-03-02T13:54:08.423011Z", + "shell.execute_reply.started": "2021-03-02T13:54:03.582265Z" + } + }, "outputs": [ { "name": "stdout", @@ -497,7 +552,15 @@ { "cell_type": "code", "execution_count": 8, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:08.426238Z", + "iopub.status.busy": "2021-03-02T13:54:08.426064Z", + "iopub.status.idle": "2021-03-02T13:54:11.075424Z", + "shell.execute_reply": "2021-03-02T13:54:11.074635Z", + "shell.execute_reply.started": "2021-03-02T13:54:08.426218Z" + } + }, "outputs": [ { "name": "stdout", @@ -599,7 +662,15 @@ { "cell_type": "code", "execution_count": 9, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:11.076849Z", + "iopub.status.busy": "2021-03-02T13:54:11.076706Z", + "iopub.status.idle": "2021-03-02T13:54:12.601253Z", + "shell.execute_reply": "2021-03-02T13:54:12.600652Z", + "shell.execute_reply.started": "2021-03-02T13:54:11.076832Z" + } + }, "outputs": [ { "name": "stdout", @@ -762,7 +833,15 @@ { "cell_type": "code", "execution_count": 10, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:12.602726Z", + "iopub.status.busy": "2021-03-02T13:54:12.602322Z", + "iopub.status.idle": "2021-03-02T13:54:12.614241Z", + "shell.execute_reply": "2021-03-02T13:54:12.613699Z", + "shell.execute_reply.started": "2021-03-02T13:54:12.602703Z" + } + }, "outputs": [ { "data": { @@ -797,7 +876,15 @@ { "cell_type": "code", "execution_count": 11, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:12.615599Z", + "iopub.status.busy": "2021-03-02T13:54:12.615410Z", + "iopub.status.idle": "2021-03-02T13:54:12.667954Z", + "shell.execute_reply": "2021-03-02T13:54:12.667184Z", + "shell.execute_reply.started": "2021-03-02T13:54:12.615576Z" + } + }, "outputs": [ { "name": "stdout", @@ -851,6 +938,13 @@ "cell_type": "code", "execution_count": 12, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:12.669506Z", + "iopub.status.busy": "2021-03-02T13:54:12.669182Z", + "iopub.status.idle": "2021-03-02T13:54:12.673909Z", + "shell.execute_reply": "2021-03-02T13:54:12.673206Z", + "shell.execute_reply.started": "2021-03-02T13:54:12.669478Z" + }, "scrolled": true }, "outputs": [ @@ -895,6 +989,13 @@ "cell_type": "code", "execution_count": 13, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:12.675079Z", + "iopub.status.busy": "2021-03-02T13:54:12.674814Z", + "iopub.status.idle": "2021-03-02T13:54:15.109545Z", + "shell.execute_reply": "2021-03-02T13:54:15.108639Z", + "shell.execute_reply.started": "2021-03-02T13:54:12.675054Z" + }, "tags": [ "solution" ] @@ -975,6 +1076,13 @@ "cell_type": "code", "execution_count": 14, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.111573Z", + "iopub.status.busy": "2021-03-02T13:54:15.111270Z", + "iopub.status.idle": "2021-03-02T13:54:15.130034Z", + "shell.execute_reply": "2021-03-02T13:54:15.129430Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.111546Z" + }, "tags": [ "solution" ] @@ -1084,7 +1192,15 @@ { "cell_type": "code", "execution_count": 15, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.131263Z", + "iopub.status.busy": "2021-03-02T13:54:15.131002Z", + "iopub.status.idle": "2021-03-02T13:54:15.165660Z", + "shell.execute_reply": "2021-03-02T13:54:15.165057Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.131238Z" + } + }, "outputs": [ { "name": "stdout", @@ -1216,13 +1332,21 @@ "source": [ "### Demonstration\n", "\n", - "We demonstrate what we explained before using the MNIST dataset." + "We demonstrate what we've explained before using the MNIST dataset." ] }, { "cell_type": "code", - "execution_count": 54, - "metadata": {}, + "execution_count": 16, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.167008Z", + "iopub.status.busy": "2021-03-02T13:54:15.166723Z", + "iopub.status.idle": "2021-03-02T13:54:15.277083Z", + "shell.execute_reply": "2021-03-02T13:54:15.276490Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.166981Z" + } + }, "outputs": [ { "name": "stdout", @@ -1255,29 +1379,45 @@ }, { "cell_type": "code", - "execution_count": 55, - "metadata": {}, + "execution_count": 17, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.278713Z", + "iopub.status.busy": "2021-03-02T13:54:15.278418Z", + "iopub.status.idle": "2021-03-02T13:54:15.492609Z", + "shell.execute_reply": "2021-03-02T13:54:15.491985Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.278687Z" + } + }, "outputs": [ { "data": { - "image/png": "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cUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYWKuVbK2NjYYGNt3rx5sLFg2OuXDGno13G+cc8phTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKdS8vBzDxMTEYGMdzob8mU1OTg42Vgr3nFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCxVyOYcj/bn/VqlWDjTW0IS+RMOTruHHjxsHGSuGeUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFKoaq3t/saq3d94gC1btmyooXjggQcGGwtg3bp1g421Zs2awcYa8me2evXqwcYaWmutZlrunlMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQsVcK2VIa9euHXS89evXDzbW5s2bBxtrfHx8sLEOZ14rRTrEGKcUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUao+XY5A0d9xzSqGMUwplnFIo45RCGacUyjilUP8DHpy7RLLJO2wAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { + "image/png": { + "height": 247, + "width": 231 + }, "needs_background": "light" }, "output_type": "display_data" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 864x288 with 1 Axes>" ] }, "metadata": { + "image/png": { + "height": 40, + "width": 683 + }, "needs_background": "light" }, "output_type": "display_data" @@ -1285,13 +1425,18 @@ ], "source": [ "import matplotlib.pyplot as plt\n", - "plt.imshow(digits.images[0], cmap=\"gray\", )\n", - "plt.axis('off')\n", + "\n", + "plt.imshow(\n", + " digits.images[0],\n", + " cmap=\"gray\",\n", + ")\n", + "plt.axis(\"off\")\n", "plt.title(f\"image for figure {labels[0]}\")\n", + "\n", "fig = plt.figure(figsize=(12, 4))\n", "ax = plt.imshow(features[0][None, :], cmap=\"gray\")\n", "plt.title(\"image flattened\")\n", - "plt.axis('off');" + "plt.axis(\"off\");" ] }, { @@ -1305,8 +1450,16 @@ }, { "cell_type": "code", - "execution_count": 57, - "metadata": {}, + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.494276Z", + "iopub.status.busy": "2021-03-02T13:54:15.494066Z", + "iopub.status.idle": "2021-03-02T13:54:15.579879Z", + "shell.execute_reply": "2021-03-02T13:54:15.579321Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.494249Z" + } + }, "outputs": [ { "name": "stdout", @@ -1368,12 +1521,17 @@ " labels_validation,\n", ") = train_test_split(features, labels, test_size=0.2, stratify=labels, random_state=42)\n", "\n", + "\n", "def report(labels):\n", " print(\"number of all samples:\", len(labels))\n", " for number in range(10):\n", - " print(f\"proportion of images for class {number}:\", round(sum(labels == number) / len(labels), 3))\n", + " print(\n", + " f\"proportion of images for class {number}:\",\n", + " round(sum(labels == number) / len(labels), 3),\n", + " )\n", " print()\n", "\n", + "\n", "print(\"# Whole dataset \")\n", "report(labels)\n", "print(\"# Cross-validation dataset \")\n", @@ -1401,14 +1559,23 @@ }, { "cell_type": "code", - "execution_count": 56, - "metadata": {}, + "execution_count": 19, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:15.581114Z", + "iopub.status.busy": "2021-03-02T13:54:15.580880Z", + "iopub.status.idle": "2021-03-02T13:54:17.602810Z", + "shell.execute_reply": "2021-03-02T13:54:17.601849Z", + "shell.execute_reply.started": "2021-03-02T13:54:15.581092Z" + }, + "tags": [] + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "score = 0.103 +/- 0.011, C = 1.0e+01, gamma = 1.0e-01\n" + "score = 0.103 +/- 0.011, C = 1.0e+00, gamma = 1.0e-01\n" ] } ], @@ -1417,8 +1584,10 @@ "\n", "cross_validator = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)\n", "\n", + "C = 1\n", + "gamma = 0.1\n", + "classifier = SVC(C=C, gamma=gamma)\n", "\n", - "classifier = SVC(C=1, gamma=0.1)\n", "test_scores = cross_val_score(\n", " classifier,\n", " features_crosseval,\n", @@ -1446,8 +1615,16 @@ }, { "cell_type": "code", - "execution_count": 58, - "metadata": {}, + "execution_count": 20, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:17.605178Z", + "iopub.status.busy": "2021-03-02T13:54:17.604700Z", + "iopub.status.idle": "2021-03-02T13:54:34.060634Z", + "shell.execute_reply": "2021-03-02T13:54:34.059518Z", + "shell.execute_reply.started": "2021-03-02T13:54:17.605104Z" + } + }, "outputs": [ { "name": "stdout", @@ -1468,7 +1645,7 @@ "score = 0.104 +/- 0.014, C = 1.0e+01, gamma = 1.0e-01\n", "\n", "BEST RESULT CROSS VALIDATION\n", - "score = 0.991 +/- 0.007, C = 1.0e+00, gamma = 0.0\n" + "score = 0.991 +/- 0.007, C = 1.0e+00, gamma = 1.0e-03\n" ] } ], @@ -1515,7 +1692,7 @@ "print()\n", "print(\"BEST RESULT CROSS VALIDATION\")\n", "print(\n", - " \"score = {:.3f} +/- {:.3f}, C = {:.1e}, gamma = {:.1f}\".format(\n", + " \"score = {:.3f} +/- {:.3f}, C = {:.1e}, gamma = {:.1e}\".format(\n", " best_score_mean, best_score_std, best_C, best_gamma\n", " )\n", ")" @@ -1530,8 +1707,16 @@ }, { "cell_type": "code", - "execution_count": 60, - "metadata": {}, + "execution_count": 21, + "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:34.062814Z", + "iopub.status.busy": "2021-03-02T13:54:34.062415Z", + "iopub.status.idle": "2021-03-02T13:54:34.175797Z", + "shell.execute_reply": "2021-03-02T13:54:34.175001Z", + "shell.execute_reply.started": "2021-03-02T13:54:34.062792Z" + } + }, "outputs": [ { "name": "stdout", @@ -1569,8 +1754,15 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 22, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:54:34.177260Z", + "iopub.status.busy": "2021-03-02T13:54:34.176925Z", + "iopub.status.idle": "2021-03-02T13:56:11.509026Z", + "shell.execute_reply": "2021-03-02T13:56:11.508222Z", + "shell.execute_reply.started": "2021-03-02T13:54:34.177221Z" + }, "tags": [ "solution" ] @@ -1584,77 +1776,77 @@ "\n", "#### 5 folds\n", "OPTIMIZE HYPERPARAMETERS\n", - "score = 0.933 +/- 0.024, C = 10.0, gamma = 0.75\n", - "score = 0.950 +/- 0.034, C = 10.0, gamma = 1.00\n", - "score = 0.950 +/- 0.034, C = 10.0, gamma = 1.25\n", - "score = 0.954 +/- 0.036, C = 30.0, gamma = 0.75\n", - "score = 0.946 +/- 0.021, C = 30.0, gamma = 1.00\n", - "score = 0.946 +/- 0.021, C = 30.0, gamma = 1.25\n", - "score = 0.958 +/- 0.013, C = 50.0, gamma = 0.75\n", - "score = 0.958 +/- 0.019, C = 50.0, gamma = 1.00\n", - "score = 0.958 +/- 0.023, C = 50.0, gamma = 1.25\n", - "score = 0.963 +/- 0.020, C = 70.0, gamma = 0.75\n", - "score = 0.958 +/- 0.023, C = 70.0, gamma = 1.00\n", - "score = 0.963 +/- 0.020, C = 70.0, gamma = 1.25\n", - "score = 0.958 +/- 0.013, C = 90.0, gamma = 0.75\n", - "score = 0.963 +/- 0.020, C = 90.0, gamma = 1.00\n", - "score = 0.958 +/- 0.023, C = 90.0, gamma = 1.25\n", + "score = 0.103 +/- 0.003, C = 10.0, gamma = 0.75\n", + "score = 0.103 +/- 0.003, C = 10.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 10.0, gamma = 1.25\n", + "score = 0.103 +/- 0.003, C = 30.0, gamma = 0.75\n", + "score = 0.103 +/- 0.003, C = 30.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 30.0, gamma = 1.25\n", + "score = 0.103 +/- 0.003, C = 50.0, gamma = 0.75\n", + "score = 0.103 +/- 0.003, C = 50.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 50.0, gamma = 1.25\n", + "score = 0.103 +/- 0.003, C = 70.0, gamma = 0.75\n", + "score = 0.103 +/- 0.003, C = 70.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 70.0, gamma = 1.25\n", + "score = 0.103 +/- 0.003, C = 90.0, gamma = 0.75\n", + "score = 0.103 +/- 0.003, C = 90.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 90.0, gamma = 1.25\n", "\n", "BEST RESULT CROSS VALIDATION\n", - "score = 0.963 +/- 0.020, C = 90.0, gamma = 1.00\n", + "score = 0.103 +/- 0.003, C = 90.0, gamma = 1.25\n", "\n", "VALIDATION\n", - "score = 0.933\n", + "score = 0.103\n", "\n", "\n", "#### 10 folds\n", "OPTIMIZE HYPERPARAMETERS\n", - "score = 0.958 +/- 0.032, C = 10.0, gamma = 0.75\n", - "score = 0.950 +/- 0.036, C = 10.0, gamma = 1.00\n", - "score = 0.950 +/- 0.036, C = 10.0, gamma = 1.25\n", - "score = 0.958 +/- 0.026, C = 30.0, gamma = 0.75\n", - "score = 0.967 +/- 0.025, C = 30.0, gamma = 1.00\n", - "score = 0.967 +/- 0.025, C = 30.0, gamma = 1.25\n", - "score = 0.967 +/- 0.025, C = 50.0, gamma = 0.75\n", - "score = 0.967 +/- 0.025, C = 50.0, gamma = 1.00\n", - "score = 0.958 +/- 0.026, C = 50.0, gamma = 1.25\n", - "score = 0.963 +/- 0.022, C = 70.0, gamma = 0.75\n", - "score = 0.967 +/- 0.025, C = 70.0, gamma = 1.00\n", - "score = 0.954 +/- 0.029, C = 70.0, gamma = 1.25\n", - "score = 0.963 +/- 0.022, C = 90.0, gamma = 0.75\n", - "score = 0.963 +/- 0.029, C = 90.0, gamma = 1.00\n", - "score = 0.946 +/- 0.033, C = 90.0, gamma = 1.25\n", + "score = 0.099 +/- 0.003, C = 10.0, gamma = 0.75\n", + "score = 0.099 +/- 0.003, C = 10.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 10.0, gamma = 1.25\n", + "score = 0.099 +/- 0.003, C = 30.0, gamma = 0.75\n", + "score = 0.099 +/- 0.003, C = 30.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 30.0, gamma = 1.25\n", + "score = 0.099 +/- 0.003, C = 50.0, gamma = 0.75\n", + "score = 0.099 +/- 0.003, C = 50.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 50.0, gamma = 1.25\n", + "score = 0.099 +/- 0.003, C = 70.0, gamma = 0.75\n", + "score = 0.099 +/- 0.003, C = 70.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 70.0, gamma = 1.25\n", + "score = 0.099 +/- 0.003, C = 90.0, gamma = 0.75\n", + "score = 0.099 +/- 0.003, C = 90.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 90.0, gamma = 1.25\n", "\n", "BEST RESULT CROSS VALIDATION\n", - "score = 0.967 +/- 0.025, C = 70.0, gamma = 1.00\n", + "score = 0.127 +/- 0.063, C = 90.0, gamma = 1.25\n", "\n", "VALIDATION\n", - "score = 0.950\n", + "score = 0.103\n", "\n", "\n", "#### 20 folds\n", "OPTIMIZE HYPERPARAMETERS\n", - "score = 0.967 +/- 0.049, C = 10.0, gamma = 0.75\n", - "score = 0.958 +/- 0.049, C = 10.0, gamma = 1.00\n", - "score = 0.954 +/- 0.049, C = 10.0, gamma = 1.25\n", - "score = 0.958 +/- 0.042, C = 30.0, gamma = 0.75\n", - "score = 0.954 +/- 0.041, C = 30.0, gamma = 1.00\n", - "score = 0.950 +/- 0.041, C = 30.0, gamma = 1.25\n", - "score = 0.954 +/- 0.041, C = 50.0, gamma = 0.75\n", - "score = 0.958 +/- 0.042, C = 50.0, gamma = 1.00\n", - "score = 0.946 +/- 0.048, C = 50.0, gamma = 1.25\n", - "score = 0.954 +/- 0.041, C = 70.0, gamma = 0.75\n", - "score = 0.954 +/- 0.041, C = 70.0, gamma = 1.00\n", - "score = 0.946 +/- 0.040, C = 70.0, gamma = 1.25\n", - "score = 0.954 +/- 0.041, C = 90.0, gamma = 0.75\n", - "score = 0.954 +/- 0.041, C = 90.0, gamma = 1.00\n", - "score = 0.942 +/- 0.038, C = 90.0, gamma = 1.25\n", + "score = 0.101 +/- 0.011, C = 10.0, gamma = 0.75\n", + "score = 0.110 +/- 0.038, C = 10.0, gamma = 1.00\n", + "score = 0.128 +/- 0.092, C = 10.0, gamma = 1.25\n", + "score = 0.101 +/- 0.011, C = 30.0, gamma = 0.75\n", + "score = 0.110 +/- 0.038, C = 30.0, gamma = 1.00\n", + "score = 0.128 +/- 0.092, C = 30.0, gamma = 1.25\n", + "score = 0.101 +/- 0.011, C = 50.0, gamma = 0.75\n", + "score = 0.110 +/- 0.038, C = 50.0, gamma = 1.00\n", + "score = 0.128 +/- 0.092, C = 50.0, gamma = 1.25\n", + "score = 0.101 +/- 0.011, C = 70.0, gamma = 0.75\n", + "score = 0.110 +/- 0.038, C = 70.0, gamma = 1.00\n", + "score = 0.128 +/- 0.092, C = 70.0, gamma = 1.25\n", + "score = 0.101 +/- 0.011, C = 90.0, gamma = 0.75\n", + "score = 0.110 +/- 0.038, C = 90.0, gamma = 1.00\n", + "score = 0.128 +/- 0.092, C = 90.0, gamma = 1.25\n", "\n", "BEST RESULT CROSS VALIDATION\n", - "score = 0.967 +/- 0.049, C = 10.0, gamma = 0.75\n", + "score = 0.128 +/- 0.092, C = 90.0, gamma = 1.25\n", "\n", "VALIDATION\n", - "score = 0.950\n" + "score = 0.103\n" ] } ], @@ -1744,13 +1936,20 @@ "\n", "2. Run cross-validation for the `SVC` classifier applied to the `\"data/spiral.csv\"` data set. Try different `C` and `gamma` values.\n", "\n", - "3. Implement same strategy for the iris data set introduced in script 1." + "3. Implement same strategy for the iris data set introduced in script 1 (`sklearn.datasets.load_iris`)." ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:56:11.510518Z", + "iopub.status.busy": "2021-03-02T13:56:11.510275Z", + "iopub.status.idle": "2021-03-02T13:56:12.206666Z", + "shell.execute_reply": "2021-03-02T13:56:12.206095Z", + "shell.execute_reply.started": "2021-03-02T13:56:11.510492Z" + }, "tags": [ "solution" ] @@ -1764,14 +1963,14 @@ "score = 0.925 +/- 0.055, C = 1.0, penalty = l1\n", "score = 0.929 +/- 0.033, C = 10.0, penalty = l1\n", "score = 0.929 +/- 0.033, C = 100.0, penalty = l1\n", - "score = 0.929 +/- 0.033, C = 1000.0, penalty = l1\n", + "score = 0.933 +/- 0.033, C = 1000.0, penalty = l1\n", "score = 0.804 +/- 0.083, C = 1.0, penalty = l2\n", "score = 0.917 +/- 0.049, C = 10.0, penalty = l2\n", "score = 0.921 +/- 0.039, C = 100.0, penalty = l2\n", "score = 0.929 +/- 0.033, C = 1000.0, penalty = l2\n", "\n", "BEST RESULT CROSS VALIDATION\n", - "score = 0.929 +/- 0.033, C = 1000.0, penalty = l2\n", + "score = 0.933 +/- 0.033, C = 1000.0, penalty = l1\n", "\n", "VALIDATION\n", "score = 0.850\n" @@ -1779,6 +1978,8 @@ } ], "source": [ + "# SOLUTION\n", + "# 1.\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.model_selection import cross_val_score\n", "from sklearn.svm import SVC\n", @@ -1834,7 +2035,7 @@ ")\n", "\n", "\n", - "classifier = LogisticRegression(C=best_C, penalty=best_penalty)\n", + "classifier = LogisticRegression(C=best_C, penalty=best_penalty, solver=\"liblinear\")\n", "\n", "classifier.fit(features_crosseval, labels_crosseval)\n", "predicted = classifier.predict(features_validation)\n", @@ -1853,6 +2054,13 @@ "cell_type": "code", "execution_count": 24, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:56:12.207999Z", + "iopub.status.busy": "2021-03-02T13:56:12.207733Z", + "iopub.status.idle": "2021-03-02T13:56:13.238012Z", + "shell.execute_reply": "2021-03-02T13:56:13.237356Z", + "shell.execute_reply.started": "2021-03-02T13:56:12.207972Z" + }, "tags": [ "solution" ] @@ -1885,6 +2093,8 @@ } ], "source": [ + "# SOLUTION\n", + "# 2.\n", "df = pd.read_csv(\"data/spiral.csv\")\n", "\n", "features = df.iloc[:, :-1]\n", @@ -1948,8 +2158,15 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": { + "execution": { + "iopub.execute_input": "2021-03-02T13:56:13.244092Z", + "iopub.status.busy": "2021-03-02T13:56:13.243883Z", + "iopub.status.idle": "2021-03-02T13:56:13.433226Z", + "shell.execute_reply": "2021-03-02T13:56:13.432534Z", + "shell.execute_reply.started": "2021-03-02T13:56:13.244068Z" + }, "tags": [ "solution" ] @@ -1982,6 +2199,8 @@ } ], "source": [ + "# SOLUTION\n", + "# 3.\n", "from sklearn.datasets import load_iris\n", "\n", "data = load_iris()\n", @@ -2047,13 +2266,6 @@ "# Here, SVC is robust" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -2079,7 +2291,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.9.1" }, "latex_envs": { "LaTeX_envs_menu_present": true,