diff --git a/l2/TM-Lab2.ipynb b/l2/TM-Lab2.ipynb index 309b149a4670a7baa178c18043e497b34ecb0a71..34f2502510d6c383ceb12334b361584b0a77f2e6 100644 --- a/l2/TM-Lab2.ipynb +++ b/l2/TM-Lab2.ipynb @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 311, "metadata": { "editable": true, "slideshow": { @@ -47,7 +47,7 @@ }, "outputs": [], "source": [ - "%matplotlib inline" + "#%matplotlib inline" ] }, { @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 312, "metadata": { "deletable": false, "editable": false, @@ -111,9 +111,84 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 313, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>id</th>\n", + " <th>words</th>\n", + " <th>party</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>H5-002-004</td>\n", + " <td>eders majestäter eders kungliga högheter herr ...</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>H5-003-001</td>\n", + " <td>aktuell debatt om situationen för ensamkommand...</td>\n", + " <td>V</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>H5-003-002</td>\n", + " <td>herr talman och ledamöter jag vill börja med a...</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>H5-003-003</td>\n", + " <td>herr talman åhörare den här debatten handlar a...</td>\n", + " <td>M</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>H5-003-004</td>\n", + " <td>herr talman ansvar och rättssäkerhet är två or...</td>\n", + " <td>SD</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " id words party\n", + "0 H5-002-004 eders majestäter eders kungliga högheter herr ... S\n", + "1 H5-003-001 aktuell debatt om situationen för ensamkommand... V\n", + "2 H5-003-002 herr talman och ledamöter jag vill börja med a... S\n", + "3 H5-003-003 herr talman åhörare den här debatten handlar a... M\n", + "4 H5-003-004 herr talman ansvar och rättssäkerhet är två or... SD" + ] + }, + "execution_count": 313, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "speeches_201718.head()" ] @@ -127,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 314, "metadata": { "deletable": false, "editable": false, @@ -156,9 +231,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 315, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['C', 'KD', 'L', 'M', 'MP', 'S', 'SD', 'V']\n" + ] + } + ], "source": [ "parties = sorted(training_data['party'].unique())\n", "print(parties)" @@ -191,7 +274,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 316, "metadata": {}, "outputs": [], "source": [ @@ -202,7 +285,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 317, "metadata": { "deletable": false, "nbgrader": { @@ -220,17 +303,37 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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4eHhl7Ncn3V0bV6M6y8E118QpsnLy9MzzzyjBx54QHa7XZs2bVJubq6RdyouJD4+XpJ04sSJwBbiZ6dPn1ZpaanS0tJ022236Re/+IXWrl0ru73jv/5Mv2a7Ex4zBZHa2lo98sgj7o2kVqtVgwYN0n333adVq1apoaFBlZWVAa7SP1yPZZqbm7Vt2zb953/+Z6BLumSd7emqq67Sddddp+uuu059+vQxIsj449r86KOPFB0drX79+l2Giv3v29/+tk6dOqV33nlH1dXV2rt3r/Ly8gJdlt9ce+216tWrl959990Lju/fv18/+tGPtHfv3stc2aW555579PWvf11XXnmlHn30Ub3//vud/nZl06/Z7oQwE0TCw8P1u9/9Tq+88sp5Y65/GfTq1etyl9Ulxo0bp3fffVfl5eW69tprlZKSEuiSLlko9uRyqdfm6dOntWnTJo0dOzaoNzlfTHx8vHJycvTaa6/p1VdfVUZGhq677rpAl+U3VqtVd9xxhzZu3KjDhw+fN758+XJ9+OGHnX5EEyzOvQPzjW98Q/n5+SotLdX27dsvel4oXLPdCY+Zgkh8fLwmT56sX//612poaNDYsWPVs2dP7du3T8uWLdPXv/51DR8+PNBl+sWNN96o6667Tk888YSmTZsW6HL8IhR7cvHm2mxqatKRI0cknf0OmY8//ljLli1Te3u7Zs6cGcAuLt0dd9yhwsJCxcbG6mc/+1mgy/G7e++9V3/5y19011136ec//7mGDh2qEydO6IUXXtCmTZu0ZMkSRUdHB7rMS1JYWKi//vWvmj17tjuch/I1e+DAAf35z3/2OBYZGakRI0YEqKKuQZgJMjNnzlS/fv20YcMGrVu3Tk1NTbrqqqs0bty4kPsLcty4cfrtb38bEo+YXEKxJ5fOXpt/+MMf9Ic//EHS2X8VJyYm6pvf/KYWL17s3itkqm984xuKjo7WiRMnQupdf12ioqK0du1arVy5Us8++6w+//xzRUZGatCgQXr++edD4h9TkZGRevzxx/X9739f999/v9rb20P6mt28efN575F09dVX649//GOAKuoalvb29vZAFwEAAOAr9swAAACjEWYAAIDRCDMAAMBohBkAAGA0wgwAADAaYQYAABiNMAMAAIxGmAEAAEYjzAAAAKMRZgAAgNEIMwAAwGj/D77hTsEdnR30AAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "\"\"\"Produce a plot for the 2017/2018 speeches.\"\"\"\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "def plot_speeches(speech_data):\n", + " pa = np.array(speech_data[\"party\"])\n", + " unique, counts = np.unique(pa, return_counts=True)\n", + " argsorter = counts.argsort()[::-1]\n", + " sorted_uniques = unique[argsorter]\n", + " sorted_counts = counts[argsorter]\n", + " plt.bar(sorted_uniques, sorted_counts)\n", + " plt.show()\n", + "plot_speeches(training_data)\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 318, "metadata": { "deletable": false, "nbgrader": { @@ -248,12 +351,22 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "\"\"\"Produce a plot for the 2018/2019 speeches.\"\"\"\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "plot_speeches(test_data)" ] }, { @@ -286,7 +399,7 @@ } }, "source": [ - "YOUR ANSWER HERE" + "While S and M dominated both years, there were some changes. MP made third most speeches the first year, but was then dropped to sixth place, for instance. Most parties made fewer (or far fewer) speeches in the second year, the exceptions being SD and V. This isn't very strange, since 2018 was the election year, so they probably campaigned a lot before it. It's also worth noting that SD and V gained a lot more votes that election, while MP lost votes, and that is reflected in the number of speeches seen in the plots. In regards to SD and V, edge parties tend to do more campaigning, so that could be a factor." ] }, { @@ -313,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 319, "metadata": { "deletable": false, "nbgrader": { @@ -331,10 +444,479 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Macro precision score against test data: 0.5736152919943005\n", + "Macro precision score against training data: 0.8911125377417104\n", + "Classification report against test data:\n", + " precision recall f1-score support\n", + "\n", + " C 0.63 0.04 0.07 671\n", + " KD 0.70 0.02 0.03 821\n", + " L 0.92 0.02 0.04 560\n", + " M 0.36 0.68 0.47 1644\n", + " MP 0.36 0.25 0.29 809\n", + " S 0.46 0.84 0.59 2773\n", + " SD 0.57 0.12 0.20 1060\n", + " V 0.59 0.15 0.24 950\n", + "\n", + " accuracy 0.43 9288\n", + " macro avg 0.57 0.26 0.24 9288\n", + "weighted avg 0.52 0.43 0.34 9288\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "<style>#sk-container-id-7 {\n", + " /* Definition of color scheme common for light and dark mode */\n", + " --sklearn-color-text: black;\n", + " --sklearn-color-line: gray;\n", + " /* Definition of color scheme for unfitted estimators */\n", + " --sklearn-color-unfitted-level-0: #fff5e6;\n", + " --sklearn-color-unfitted-level-1: #f6e4d2;\n", + " --sklearn-color-unfitted-level-2: #ffe0b3;\n", + " --sklearn-color-unfitted-level-3: chocolate;\n", + " /* Definition of color scheme for fitted estimators */\n", + " --sklearn-color-fitted-level-0: #f0f8ff;\n", + " --sklearn-color-fitted-level-1: #d4ebff;\n", + " --sklearn-color-fitted-level-2: #b3dbfd;\n", + " --sklearn-color-fitted-level-3: cornflowerblue;\n", + "\n", + " /* Specific color for light theme */\n", + " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", + " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", + " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", + " --sklearn-color-icon: #696969;\n", + "\n", + " @media (prefers-color-scheme: dark) {\n", + " /* Redefinition of color scheme for dark theme */\n", + " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", + " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", + " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", + " --sklearn-color-icon: #878787;\n", + " }\n", + "}\n", + "\n", + "#sk-container-id-7 {\n", + " color: var(--sklearn-color-text);\n", + "}\n", + "\n", + "#sk-container-id-7 pre {\n", + " padding: 0;\n", + "}\n", + "\n", + "#sk-container-id-7 input.sk-hidden--visually {\n", + " border: 0;\n", + " clip: rect(1px 1px 1px 1px);\n", + " clip: rect(1px, 1px, 1px, 1px);\n", + " height: 1px;\n", + " margin: -1px;\n", + " overflow: hidden;\n", + " padding: 0;\n", + " position: absolute;\n", + " width: 1px;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-dashed-wrapped {\n", + " border: 1px dashed var(--sklearn-color-line);\n", + " margin: 0 0.4em 0.5em 0.4em;\n", + " box-sizing: border-box;\n", + " padding-bottom: 0.4em;\n", + " background-color: var(--sklearn-color-background);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-container {\n", + " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", + " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", + " so we also need the `!important` here to be able to override the\n", + " default hidden behavior on the sphinx rendered scikit-learn.org.\n", + " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", + " display: inline-block !important;\n", + " position: relative;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-text-repr-fallback {\n", + " display: none;\n", + "}\n", + "\n", + "div.sk-parallel-item,\n", + "div.sk-serial,\n", + "div.sk-item {\n", + " /* draw centered vertical line to link estimators */\n", + " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", + " background-size: 2px 100%;\n", + " background-repeat: no-repeat;\n", + " background-position: center center;\n", + "}\n", + "\n", + "/* Parallel-specific style estimator block */\n", + "\n", + "#sk-container-id-7 div.sk-parallel-item::after {\n", + " content: \"\";\n", + " width: 100%;\n", + " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", + " flex-grow: 1;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-parallel {\n", + " display: flex;\n", + " align-items: stretch;\n", + " justify-content: center;\n", + " background-color: var(--sklearn-color-background);\n", + " position: relative;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-parallel-item {\n", + " display: flex;\n", + " flex-direction: column;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-parallel-item:first-child::after {\n", + " align-self: flex-end;\n", + " width: 50%;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-parallel-item:last-child::after {\n", + " align-self: flex-start;\n", + " width: 50%;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-parallel-item:only-child::after {\n", + " width: 0;\n", + "}\n", + "\n", + "/* Serial-specific style estimator block */\n", + "\n", + "#sk-container-id-7 div.sk-serial {\n", + " display: flex;\n", + " flex-direction: column;\n", + " align-items: center;\n", + " background-color: var(--sklearn-color-background);\n", + " padding-right: 1em;\n", + " padding-left: 1em;\n", + "}\n", + "\n", + "\n", + "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", + "clickable and can be expanded/collapsed.\n", + "- Pipeline and ColumnTransformer use this feature and define the default style\n", + "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", + "*/\n", + "\n", + "/* Pipeline and ColumnTransformer style (default) */\n", + "\n", + "#sk-container-id-7 div.sk-toggleable {\n", + " /* Default theme specific background. It is overwritten whether we have a\n", + " specific estimator or a Pipeline/ColumnTransformer */\n", + " background-color: var(--sklearn-color-background);\n", + "}\n", + "\n", + "/* Toggleable label */\n", + "#sk-container-id-7 label.sk-toggleable__label {\n", + " cursor: pointer;\n", + " display: block;\n", + " width: 100%;\n", + " margin-bottom: 0;\n", + " padding: 0.5em;\n", + " box-sizing: border-box;\n", + " text-align: center;\n", + "}\n", + "\n", + "#sk-container-id-7 label.sk-toggleable__label-arrow:before {\n", + " /* Arrow on the left of the label */\n", + " content: \"▸\";\n", + " float: left;\n", + " margin-right: 0.25em;\n", + " color: var(--sklearn-color-icon);\n", + "}\n", + "\n", + "#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {\n", + " color: var(--sklearn-color-text);\n", + "}\n", + "\n", + "/* Toggleable content - dropdown */\n", + "\n", + "#sk-container-id-7 div.sk-toggleable__content {\n", + " max-height: 0;\n", + " max-width: 0;\n", + " overflow: hidden;\n", + " text-align: left;\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-toggleable__content.fitted {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-toggleable__content pre {\n", + " margin: 0.2em;\n", + " border-radius: 0.25em;\n", + " color: var(--sklearn-color-text);\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-toggleable__content.fitted pre {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", + " /* Expand drop-down */\n", + " max-height: 200px;\n", + " max-width: 100%;\n", + " overflow: auto;\n", + "}\n", + "\n", + "#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", + " content: \"▾\";\n", + "}\n", + "\n", + "/* Pipeline/ColumnTransformer-specific style */\n", + "\n", + "#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Estimator-specific style */\n", + "\n", + "/* Colorize estimator box */\n", + "#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-label label.sk-toggleable__label,\n", + "#sk-container-id-7 div.sk-label label {\n", + " /* The background is the default theme color */\n", + " color: var(--sklearn-color-text-on-default-background);\n", + "}\n", + "\n", + "/* On hover, darken the color of the background */\n", + "#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "/* Label box, darken color on hover, fitted */\n", + "#sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", + " color: var(--sklearn-color-text);\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Estimator label */\n", + "\n", + "#sk-container-id-7 div.sk-label label {\n", + " font-family: monospace;\n", + " font-weight: bold;\n", + " display: inline-block;\n", + " line-height: 1.2em;\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-label-container {\n", + " text-align: center;\n", + "}\n", + "\n", + "/* Estimator-specific */\n", + "#sk-container-id-7 div.sk-estimator {\n", + " font-family: monospace;\n", + " border: 1px dotted var(--sklearn-color-border-box);\n", + " border-radius: 0.25em;\n", + " box-sizing: border-box;\n", + " margin-bottom: 0.5em;\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-0);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-estimator.fitted {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-0);\n", + "}\n", + "\n", + "/* on hover */\n", + "#sk-container-id-7 div.sk-estimator:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-2);\n", + "}\n", + "\n", + "#sk-container-id-7 div.sk-estimator.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-2);\n", + "}\n", + "\n", + "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", + "\n", + "/* Common style for \"i\" and \"?\" */\n", + "\n", + ".sk-estimator-doc-link,\n", + "a:link.sk-estimator-doc-link,\n", + "a:visited.sk-estimator-doc-link {\n", + " float: right;\n", + " font-size: smaller;\n", + " line-height: 1em;\n", + " font-family: monospace;\n", + " background-color: var(--sklearn-color-background);\n", + " border-radius: 1em;\n", + " height: 1em;\n", + " width: 1em;\n", + " text-decoration: none !important;\n", + " margin-left: 1ex;\n", + " /* unfitted */\n", + " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-unfitted-level-1);\n", + "}\n", + "\n", + ".sk-estimator-doc-link.fitted,\n", + "a:link.sk-estimator-doc-link.fitted,\n", + "a:visited.sk-estimator-doc-link.fitted {\n", + " /* fitted */\n", + " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-fitted-level-1);\n", + "}\n", + "\n", + "/* On hover */\n", + "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", + ".sk-estimator-doc-link:hover,\n", + "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", + ".sk-estimator-doc-link:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", + ".sk-estimator-doc-link.fitted:hover,\n", + "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", + ".sk-estimator-doc-link.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "/* Span, style for the box shown on hovering the info icon */\n", + ".sk-estimator-doc-link span {\n", + " display: none;\n", + " z-index: 9999;\n", + " position: relative;\n", + " font-weight: normal;\n", + " right: .2ex;\n", + " padding: .5ex;\n", + " margin: .5ex;\n", + " width: min-content;\n", + " min-width: 20ex;\n", + " max-width: 50ex;\n", + " color: var(--sklearn-color-text);\n", + " box-shadow: 2pt 2pt 4pt #999;\n", + " /* unfitted */\n", + " background: var(--sklearn-color-unfitted-level-0);\n", + " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", + "}\n", + "\n", + ".sk-estimator-doc-link.fitted span {\n", + " /* fitted */\n", + " background: var(--sklearn-color-fitted-level-0);\n", + " border: var(--sklearn-color-fitted-level-3);\n", + "}\n", + "\n", + ".sk-estimator-doc-link:hover span {\n", + " display: block;\n", + "}\n", + "\n", + "/* \"?\"-specific style due to the `<a>` HTML tag */\n", + "\n", + "#sk-container-id-7 a.estimator_doc_link {\n", + " float: right;\n", + " font-size: 1rem;\n", + " line-height: 1em;\n", + " font-family: monospace;\n", + " background-color: var(--sklearn-color-background);\n", + " border-radius: 1rem;\n", + " height: 1rem;\n", + " width: 1rem;\n", + " text-decoration: none;\n", + " /* unfitted */\n", + " color: var(--sklearn-color-unfitted-level-1);\n", + " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", + "}\n", + "\n", + "#sk-container-id-7 a.estimator_doc_link.fitted {\n", + " /* fitted */\n", + " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", + " color: var(--sklearn-color-fitted-level-1);\n", + "}\n", + "\n", + "/* On hover */\n", + "#sk-container-id-7 a.estimator_doc_link:hover {\n", + " /* unfitted */\n", + " background-color: var(--sklearn-color-unfitted-level-3);\n", + " color: var(--sklearn-color-background);\n", + " text-decoration: none;\n", + "}\n", + "\n", + "#sk-container-id-7 a.estimator_doc_link.fitted:hover {\n", + " /* fitted */\n", + " background-color: var(--sklearn-color-fitted-level-3);\n", + "}\n", + "</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[('vectorizer', CountVectorizer()),\n", + " ('classifier', MultinomialNB())])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-21\" type=\"checkbox\" ><label for=\"sk-estimator-id-21\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> Pipeline<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[('vectorizer', CountVectorizer()),\n", + " ('classifier', MultinomialNB())])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-22\" type=\"checkbox\" ><label for=\"sk-estimator-id-22\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> CountVectorizer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html\">?<span>Documentation for CountVectorizer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>CountVectorizer()</pre></div> </div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-23\" type=\"checkbox\" ><label for=\"sk-estimator-id-23\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> MultinomialNB<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.naive_bayes.MultinomialNB.html\">?<span>Documentation for MultinomialNB</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>MultinomialNB()</pre></div> </div></div></div></div></div></div>" + ], + "text/plain": [ + "Pipeline(steps=[('vectorizer', CountVectorizer()),\n", + " ('classifier', MultinomialNB())])" + ] + }, + "execution_count": 319, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB\n", + "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.metrics import classification_report, precision_score\n", + "train_X = np.array(training_data[\"words\"])\n", + "train_Y = np.array(training_data[\"party\"])\n", + "\n", + "test_X = np.array(test_data[\"words\"])\n", + "test_Y = np.array(test_data[\"party\"])\n", + "def run_naive_bayes_classifier(train_X, train_Y, test_X, test_Y):\n", + " pipeline = Pipeline(steps=[\n", + " ('vectorizer', CountVectorizer()),\n", + " ('classifier', MultinomialNB())\n", + " ])\n", + " model = pipeline.fit(train_X, train_Y)\n", + " predicted = model.predict(test_X)\n", + " predicted2 = model.predict(train_X)\n", + "\n", + " score1 = (precision_score(test_Y, predicted, average='macro'))\n", + " score2 = (precision_score(train_Y, predicted2, average='macro'))\n", + " print(f'Macro precision score against test data: {score1}')\n", + " print(f'Macro precision score against training data: {score2}')\n", + " print(\"Classification report against test data:\")\n", + " print(classification_report(test_Y, predicted))\n", + " return model\n", + "run_naive_bayes_classifier(train_X, train_Y, test_X, test_Y)" ] }, { @@ -364,7 +946,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 320, "metadata": { "deletable": false, "nbgrader": { @@ -382,10 +964,49 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " C 0.00 0.00 0.00 671\n", + " KD 0.00 0.00 0.00 821\n", + " L 0.00 0.00 0.00 560\n", + " M 0.00 0.00 0.00 1644\n", + " MP 0.00 0.00 0.00 809\n", + " S 0.30 1.00 0.46 2773\n", + " SD 0.00 0.00 0.00 1060\n", + " V 0.00 0.00 0.00 950\n", + "\n", + " accuracy 0.30 9288\n", + " macro avg 0.04 0.12 0.06 9288\n", + "weighted avg 0.09 0.30 0.14 9288\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jackkolm/Documents/TextMining/text-mining/.venv/lib/python3.11/site-packages/sklearn/metrics/_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/Users/jackkolm/Documents/TextMining/text-mining/.venv/lib/python3.11/site-packages/sklearn/metrics/_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/Users/jackkolm/Documents/TextMining/text-mining/.venv/lib/python3.11/site-packages/sklearn/metrics/_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + } + ], "source": [ - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "from sklearn.dummy import DummyClassifier\n", + "\n", + "dc_mf = DummyClassifier(strategy='most_frequent')\n", + "model = dc_mf.fit(train_X, train_Y)\n", + "#print(model.score(test_X, test_Y))\n", + "predicted = model.predict(test_X)\n", + "print(classification_report(test_Y, predicted))\n" ] }, { @@ -399,7 +1020,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 321, "metadata": { "deletable": false, "nbgrader": { @@ -417,10 +1038,35 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " C 0.09 0.08 0.08 671\n", + " KD 0.10 0.07 0.08 821\n", + " L 0.06 0.06 0.06 560\n", + " M 0.18 0.20 0.19 1644\n", + " MP 0.09 0.11 0.10 809\n", + " S 0.30 0.35 0.32 2773\n", + " SD 0.13 0.08 0.10 1060\n", + " V 0.10 0.07 0.08 950\n", + "\n", + " accuracy 0.18 9288\n", + " macro avg 0.13 0.13 0.13 9288\n", + "weighted avg 0.17 0.18 0.18 9288\n", + "\n" + ] + } + ], "source": [ - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "dc_stratified = DummyClassifier(strategy='stratified')\n", + "model = dc_stratified.fit(train_X, train_Y)\n", + "#print(model.score(test_X, test_Y))\n", + "predicted = model.predict(test_X)\n", + "print(classification_report(test_Y, predicted))\n" ] }, { @@ -443,7 +1089,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 322, "metadata": { "deletable": false, "nbgrader": { @@ -461,12 +1107,70 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGgCAYAAACE80yQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsD0lEQVR4nO3de3SU5YHH8V9mJskkQJDEkOCFS8MSREsDEiTnCHIii1DRNYbSrgYrEIxCRVSgrtAqV1mIgLhFRO4LEbABKvUCQs+6xUKa4G3XEBEERCVEQBjAXJhM9g9Pxp0GMDOZZJ6Z+X7O4ZQ8z/Nmnt/wdvzxzjshoq6urk4AAAAGsgR6AwAAAJdDUQEAAMaiqAAAAGNRVAAAgLEoKgAAwFgUFQAAYCyKCgAAMBZFBQAAGMsW6A34Q11dnVyu4Pq5dRZLRNDt2RfkDC3kDC3hkDMcMkrBmdNiiVBERMSPrguJouJy1en06QuB3kaj2WwWtWvXSg7Hd3I6XYHeTrMhZ2ghZ2gJh5zhkFEK3pzx8a1ktf54UeGtHwAAYCyKCgAAMBZFBQAAGIuiAgAAjEVRAQAAxqKoAAAAY1FUAACAsSgqAADAWBQVAABgLIoKAAAwFkUFAAAYi6ICAACMRVEBAADGoqgAAABjUVQAAICxbIHegMkslghZLBF+/75Wq8Xjf5uDy1Unl6uuUWuDNac3GSVyNhU5/cOE/29K4ZHTpIxS+OT0t4i6urrAPbqf1Na6dPr0Bb9+T4slQlddFdusZaI51da6dObMdz96cgVzzsZmlMgZDMjpKZgzSuGRk3O2aeLjWzXq+eCKymVYLBGyWi3KX79PX544F+jteOW6pDaadP/NslgiGvUiEYw5vckokdN05GwoWDNK4ZGTc7blUFR+xJcnzunQV2cDvY1mR87QQs7QEQ4ZJXLi8oLvGhQAAAgbXhWVoqIipaamXvLX7bffLkn68ssvlZeXp969e+vWW2/VokWLVFtb6/F91q9fr9tvv109e/bUfffdp9LSUv8lAgAAIcOrt3569eql3bt3e4x9+OGHevTRRzVu3DhdvHhRY8aMUefOnbVhwwZ98cUXmjp1qiwWiyZMmCBJ2rJli+bNm6eZM2eqR48eWrZsmUaNGqW33npL8fHx/ksGAACCnldXVKKiopSYmOj+1apVKz333HPKyspSdna2tm/frq+//lrz5s1Tt27dNGjQID3xxBNas2aNampqJElLly5VTk6O7r77bnXt2lVz5sxRTEyMXnvttWYJCAAAgleT7lFZunSpKisr9dvf/laSVFJSohtvvFFt27Z1r+nXr5/Onz+v/fv369SpUzpy5IgyMjLc8zabTX369FFxcXFTtgIAAEKQz5/6OX36tFavXq0nn3xSV111lSSpvLxcycnJHuvat28vSTp+/Lhstu8frkOHDg3WlJWV+boVSZLN5t/7goPxs+7/qDEZgj1nY/dPzuBATu/WmC4ccnLONj+fi0pBQYHatGmjX/7yl+6xqqoqxcXFeayLjo6WJFVXV6uyslLS928h/eOa6upqX7ciiyVC7dq18vn4UBUXFxPoLTS7cMgokTPUkDN0hENGKbA5fS4qW7du1T333CO73e4es9vt7ntR6tUXkNjYWPfaS62JifH9SXC56uRwfOfz8ZditVqC/gR0OCpVW+u64ppgz9mYjBI5gwU5fxDsGaXwyMk567u4uJjm+8m0ZWVlOnbsmO666y6P8eTkZB04cMBjrKKiQpKUlJTkfsunoqJCKSkpHmuSkpJ82Yqb0+nfJzAU1Na6Qv55CYeMEjlDDTlDRzhklAKb06c3nUpKSpSQkKDu3bt7jKenp6u0tFTnz593j+3du1etWrVS9+7dlZCQoC5duqioqMg973Q6VVJSovT0dB8jAACAUOVTUSktLVVqamqD8UGDBikxMVETJ05UWVmZdu7cqQULFmj06NHu+1JGjx6tVatWacuWLTp48KCefvppVVVVafjw4U1LAgAAQo5Pb/1888037k/6/H/R0dFavny5pk+frhEjRqht27a67777NG7cOPeaESNG6Ny5c1q0aJHOnDmjm266SatWreKHvQEAgAZ8KiqvvPLKZec6deqklStXXvH4MWPGaMyYMb48NAAACCPB/cFuAAAQ0igqAADAWBQVAABgLIoKAAAwFkUFAAAYi6ICAACMRVEBAADGoqgAAABjUVQAAICxKCoAAMBYFBUAAGAsigoAADAWRQUAABiLogIAAIxFUQEAAMaiqAAAAGNRVAAAgLEoKgAAwFgUFQAAYCyKCgAAMBZFBQAAGIuiAgAAjEVRAQAAxqKoAAAAY1FUAACAsSgqAADAWBQVAABgLIoKAAAwFkUFAAAYi6ICAACMRVEBAADGoqgAAABjUVQA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ax4UlRYUHx+vzMxMvfnmm3rjjTeUnp6uTp06BXpbPomKitJrr72m119/vcFc/d9Orr766ssef/78eW3dulVDhgwJuhsvpabnN9nQoUP1/vvvq7CwUNdff71SUlICvaUWE87Zg9X/v3Jy6623KicnR8uWLdOePXuueFwwvwZZLBYNHz5cmzdv1vHjxxvML1++XP/zP//T6LfATMdbPy1s+PDhmjRpkuLi4vToo48Gejs+i4+PV25url544QVduHBBQ4YMUevWrXXw4EEtWbJEt9xyi/r06SPp+/sXvvnmG0nf363++eefa8mSJaqrq9PEiRMDmMJ33uQPNjfccIM6deqk559/Xnl5eYHeTosKh+xHjx7Vf//3f3uM2e129e3bN0A78q9Jkybpb3/7myZPnuz+i0QovgY9/PDD+utf/6r77rtPjz32mHr37q0zZ87o1Vdf1datW7Vw4ULFxsYGept+QVFpYbfeeqtiY2N15syZoP1ptPUmTpyozp07a9OmTVq/fr2qqqp0zTXXaOjQoR4v8m+99ZbeeustSd//7ScxMVGDBg3SggUL3Pc4BKPG5g9GQ4cO1UsvvRSWb32EevZt27Y1+JlO1157rf7yl78EaEf+ZbfbNW/ePP3qV7/SU089pbq6upB8DYqJidG6deu0cuVKvfLKK/r6669lt9vVo0cP/ed//mfQ/kXpUiLq6urqAr0JAACAS+EeFQAAYCyKCgAAMBZFBQAAGIuiAgAAjEVRAQAAxqKoAAAAY1FUAACAsSgqAADAWBQVAABgLIoKAAAwFkUFAAAY6/8AjZzPw73VVt4AAAAASUVORK5CYII=", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Macro precision score against test data: 0.40694919223605797\n", + "Macro precision score against training data: 0.9349225198554201\n", + "Classification report against test data:\n", + " precision recall f1-score support\n", + "\n", + " C 0.27 0.45 0.34 671\n", + " KD 0.30 0.37 0.34 821\n", + " L 0.27 0.45 0.34 560\n", + " M 0.37 0.52 0.43 1644\n", + " MP 0.33 0.36 0.34 809\n", + " S 0.85 0.26 0.40 2773\n", + " SD 0.45 0.41 0.43 1060\n", + " V 0.40 0.53 0.46 950\n", + "\n", + " accuracy 0.40 9288\n", + " macro avg 0.41 0.42 0.39 9288\n", + "weighted avg 0.50 0.40 0.40 9288\n", + "\n" + ] + } + ], "source": [ "\"\"\"Implement undersampling with the classifier from Problem 2 and report its performance on the test data.\"\"\"\n", + "import random\n", "\n", - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "\n", + "parties, _count = np.unique(training_data[\"party\"], return_counts=True)\n", + "min_count = min(_count.tolist())\n", + "\n", + "count_dict = {}\n", + "for party in parties:\n", + " count_dict[party] = 0\n", + "\n", + "indexes = [i for i in range(len(training_data[\"party\"]))]\n", + "random.shuffle(indexes)\n", + "\n", + "to_drop = []\n", + "\n", + "for i in indexes:\n", + " party = training_data[\"party\"][i]\n", + " count_dict[party] += 1\n", + " \n", + " if count_dict[party] > min_count:\n", + " to_drop.append(i)\n", + "\n", + "new_train_data = training_data.copy().drop(to_drop)\n", + "\n", + "plot_speeches(new_train_data)\n", + "current_model = run_naive_bayes_classifier(new_train_data[\"words\"], new_train_data[\"party\"], test_X, test_Y)\n" ] }, { @@ -487,19 +1191,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 323, "metadata": { "tags": [ "solution" ] }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from sklearn.metrics import ConfusionMatrixDisplay\n", "\n", "with sns.axes_style(\"white\"): # Seaborn’s default style doesn’t play well with ConfusionMatrixDisplay, so we change it temporarily\n", " ConfusionMatrixDisplay.from_estimator(\n", - " model, # The model that you want to plot the confusion matrix for\n", + " current_model, # The model that you want to plot the confusion matrix for\n", " test_data['words'], # The input data for the model\n", " test_data['party'], # The correct (gold-standard) labels for the input data\n", " normalize='true',\n", @@ -507,6 +1222,13 @@ " )" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -518,7 +1240,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 324, "metadata": { "deletable": false, "nbgrader": { @@ -533,10 +1255,38 @@ "task": false } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "C is most often confused with M\n", + "KD is most often confused with M\n", + "L is most often confused with M\n", + "M is most often confused with C\n", + "MP is most often confused with M\n", + "S is most often confused with M\n", + "SD is most often confused with M\n", + "V is most often confused with M\n" + ] + } + ], "source": [ "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "from sklearn.metrics import confusion_matrix\n", + "\n", + "predictions = current_model.predict(test_X)\n", + "cm = confusion_matrix(test_Y, predictions, normalize='true')\n", + "for i in range(len(cm)):\n", + " cm[i][i] = 0\n", + "for index, val in enumerate(cm):\n", + " val = val.tolist()\n", + " biggest = max(val)\n", + " biggest_index = val.index(biggest)\n", + " party = parties[index]\n", + " biggest_party = parties[biggest_index]\n", + " print(f'{party} is most often confused with {biggest_party}')\n", + "#for predicted_class in predictions:" ] }, { @@ -566,12 +1316,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 325, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'memory': None,\n", + " 'steps': [('vectorizer', CountVectorizer()), ('classifier', MultinomialNB())],\n", + " 'verbose': False,\n", + " 'vectorizer': CountVectorizer(),\n", + " 'classifier': MultinomialNB(),\n", + " 'vectorizer__analyzer': 'word',\n", + " 'vectorizer__binary': False,\n", + " 'vectorizer__decode_error': 'strict',\n", + " 'vectorizer__dtype': numpy.int64,\n", + " 'vectorizer__encoding': 'utf-8',\n", + " 'vectorizer__input': 'content',\n", + " 'vectorizer__lowercase': True,\n", + " 'vectorizer__max_df': 1.0,\n", + " 'vectorizer__max_features': None,\n", + " 'vectorizer__min_df': 1,\n", + " 'vectorizer__ngram_range': (1, 1),\n", + " 'vectorizer__preprocessor': None,\n", + " 'vectorizer__stop_words': None,\n", + " 'vectorizer__strip_accents': None,\n", + " 'vectorizer__token_pattern': '(?u)\\\\b\\\\w\\\\w+\\\\b',\n", + " 'vectorizer__tokenizer': None,\n", + " 'vectorizer__vocabulary': None,\n", + " 'classifier__alpha': 1.0,\n", + " 'classifier__class_prior': None,\n", + " 'classifier__fit_prior': True,\n", + " 'classifier__force_alpha': True}" + ] + }, + "execution_count": 325, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Replace \"nb_pipe\" with the variable that has your model pipeline, if necessary\n", - "nb_pipe.get_params()" + " \n", + "current_model.get_params()" ] }, { @@ -607,10 +1394,57 @@ "solution" ] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 12 candidates, totalling 60 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jackkolm/Documents/TextMining/text-mining/.venv/lib/python3.11/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.\n", + " warnings.warn(\n" + ] + } + ], "source": [ - "# YOUR CODE HERE\n", - "raise NotImplementedError()" + "from sklearn.feature_extraction.text import TfidfVectorizer \n", + "from sklearn.linear_model import LogisticRegression \n", + "from sklearn.preprocessing import StandardScaler \n", + "from sklearn.decomposition import TruncatedSVD \n", + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "\n", + "\n", + "\n", + "new_model_params = current_model.get_params()\n", + "mid_pipeline = Pipeline(steps=[\n", + " ('vectorizer', CountVectorizer()),\n", + " ('classifier', MultinomialNB())\n", + " ])\n", + "me_params = {\n", + " 'vectorizer__ngram_range': [(1, 1), (1, 2), (1, 3)],\n", + " 'vectorizer__max_df': [0.2, 0.5, 0.75, 1.0]\n", + " }\n", + "\n", + "gs = GridSearchCV(estimator=mid_pipeline, param_grid=me_params, cv=5, n_jobs=-1, verbose=1)\n", + "gs.fit(np.array(new_train_data['words']), np.array(new_train_data['party']))\n", + "print(f'Best params: {gs.best_params_}\\nBest estimator: {gs.best_estimator_}\\nBest index: {gs.best_index_}\\nBest score: {gs.best_score_}')\n", + "#super_pipeline = Pipeline(steps=[ ('tfidf', TfidfVectorizer()), \n", + "# ('svd', TruncatedSVD(n_components=100)), \n", + "# ('scaler', StandardScaler(with_mean=False)), \n", + "# ('logreg', LogisticRegression(max_iter=1000))])\n", + "#new_model = super_pipeline.fit(new_train_data['words'], new_train_data['party'])\n", + "#super_pipeline.set_params([new_model_params])\n", + "#p = new_model.predict(test_X)\n", + "#t = precision_score(test_Y, p, average='macro')\n", + "#print(t)\n", + "# Macro precision score against test data: 0.4101062636660445\n", + "\n" ] }, { @@ -667,7 +1501,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -681,7 +1515,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.11.0" } }, "nbformat": 4,