From d6b69cb7b0ac665828818a556cf98d582e44dbe7 Mon Sep 17 00:00:00 2001 From: ftc Date: Sun, 17 Mar 2024 17:41:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=BE=E8=AE=A1=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day7-2/设计任务.ipynb | 147 +++++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 60 deletions(-) diff --git a/day7-2/设计任务.ipynb b/day7-2/设计任务.ipynb index 5b5fbc4..965fbec 100644 --- a/day7-2/设计任务.ipynb +++ b/day7-2/设计任务.ipynb @@ -7,8 +7,8 @@ "metadata": { "collapsed": true, "ExecuteTime": { - "end_time": "2024-03-06T09:19:47.509049Z", - "start_time": "2024-03-06T09:19:46.666579Z" + "end_time": "2024-03-17T09:28:59.471252Z", + "start_time": "2024-03-17T09:28:58.553306Z" } }, "outputs": [ @@ -73,8 +73,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:19:47.515259Z", - "start_time": "2024-03-06T09:19:47.509049Z" + "end_time": "2024-03-17T09:28:59.479314Z", + "start_time": "2024-03-17T09:28:59.472685Z" } }, "id": "12cba69d3fdf8cfd", @@ -101,8 +101,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:19:47.642561Z", - "start_time": "2024-03-06T09:19:47.516805Z" + "end_time": "2024-03-17T09:28:59.582745Z", + "start_time": "2024-03-17T09:28:59.480678Z" } }, "id": "9e533d74d4b7d7d0", @@ -129,8 +129,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:19:47.713724Z", - "start_time": "2024-03-06T09:19:47.644010Z" + "end_time": "2024-03-17T09:28:59.654808Z", + "start_time": "2024-03-17T09:28:59.584065Z" } }, "id": "8b42a29a44597f40", @@ -156,8 +156,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:19:47.764659Z", - "start_time": "2024-03-06T09:19:47.714724Z" + "end_time": "2024-03-17T09:28:59.712613Z", + "start_time": "2024-03-17T09:28:59.654808Z" } }, "id": "7ee5bd73a091520d", @@ -218,8 +218,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:19:48.517952Z", - "start_time": "2024-03-06T09:19:47.764659Z" + "end_time": "2024-03-17T09:29:00.415610Z", + "start_time": "2024-03-17T09:28:59.713377Z" } }, "id": "104d0dc4bc8b04ea", @@ -230,10 +230,10 @@ "outputs": [ { "data": { - "text/plain": "LogisticRegression(max_iter=500, solver='liblinear')", - "text/html": "
LogisticRegression(max_iter=500, solver='liblinear')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + "text/plain": "LogisticRegression(max_iter=500)", + "text/html": "
LogisticRegression(max_iter=500)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" }, - "execution_count": 19, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -257,12 +257,12 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:31:26.556683Z", - "start_time": "2024-03-06T09:31:26.216832Z" + "end_time": "2024-03-17T09:29:01.618795Z", + "start_time": "2024-03-17T09:29:00.415610Z" } }, "id": "e17710987c4427e2", - "execution_count": 19 + "execution_count": 8 }, { "cell_type": "code", @@ -273,15 +273,15 @@ "text": [ " precision recall f1-score support\n", "\n", - " 0 0.48 0.84 0.61 5405\n", - " 1 0.57 0.51 0.54 3410\n", - " 2 0.44 0.13 0.20 3003\n", - " 3 1.00 0.00 0.00 1251\n", - " 4 0.92 0.47 0.63 416\n", + " 0 0.49 0.83 0.62 5405\n", + " 1 0.59 0.56 0.57 3410\n", + " 2 0.45 0.11 0.17 3003\n", + " 3 0.47 0.03 0.05 1251\n", + " 4 0.86 0.54 0.66 416\n", "\n", - " accuracy 0.51 13485\n", - " macro avg 0.68 0.39 0.40 13485\n", - "weighted avg 0.56 0.51 0.45 13485\n" + " accuracy 0.52 13485\n", + " macro avg 0.57 0.41 0.42 13485\n", + "weighted avg 0.51 0.52 0.46 13485\n" ] } ], @@ -294,12 +294,12 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:31:26.575730Z", - "start_time": "2024-03-06T09:31:26.559135Z" + "end_time": "2024-03-17T09:29:01.634701Z", + "start_time": "2024-03-17T09:29:01.618795Z" } }, "id": "183b0923964733f4", - "execution_count": 20 + "execution_count": 9 }, { "cell_type": "code", @@ -310,15 +310,15 @@ "text": [ " precision recall f1-score support\n", "\n", - " 0 0.49 0.82 0.61 5405\n", - " 1 0.58 0.53 0.55 3410\n", - " 2 0.45 0.15 0.23 3003\n", - " 3 1.00 0.00 0.00 1251\n", - " 4 0.92 0.47 0.62 416\n", + " 0 0.49 0.81 0.61 5405\n", + " 1 0.59 0.59 0.59 3410\n", + " 2 0.45 0.12 0.19 3003\n", + " 3 0.42 0.03 0.05 1251\n", + " 4 0.83 0.54 0.66 416\n", "\n", - " accuracy 0.51 13485\n", - " macro avg 0.69 0.40 0.40 13485\n", - "weighted avg 0.56 0.51 0.46 13485\n" + " accuracy 0.52 13485\n", + " macro avg 0.56 0.42 0.42 13485\n", + "weighted avg 0.51 0.52 0.46 13485\n" ] } ], @@ -338,12 +338,12 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:34:25.574265Z", - "start_time": "2024-03-06T09:34:19.935200Z" + "end_time": "2024-03-17T09:29:21.656003Z", + "start_time": "2024-03-17T09:29:01.634701Z" } }, "id": "7f1f461f73aa6ad1", - "execution_count": 22 + "execution_count": 10 }, { "cell_type": "code", @@ -351,9 +351,9 @@ { "data": { "text/plain": "LinearRegression()", - "text/html": "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + "text/html": "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" }, - "execution_count": 23, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -372,12 +372,12 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:39:30.570602Z", - "start_time": "2024-03-06T09:39:30.555366Z" + "end_time": "2024-03-17T09:29:21.676154Z", + "start_time": "2024-03-17T09:29:21.657248Z" } }, "id": "4dbef42a69018bef", - "execution_count": 23 + "execution_count": 11 }, { "cell_type": "code", @@ -391,26 +391,21 @@ "RMSE: 1224.5883287956751\n", "MAPE: 0.4410460064763934\n", "R2: 0.9073168343584097\n", - "Explained Variance: 0.9073543014656212\n", - "Accuracy: 0.0\n" + "Explained Variance: 0.9073543014656212\n" ] }, { "ename": "ValueError", - "evalue": "Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].", + "evalue": "Classification metrics can't handle a mix of multiclass and continuous targets", "output_type": "error", "traceback": [ "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[1;31mValueError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[1;32mIn[24], line 13\u001B[0m\n\u001B[0;32m 11\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mExplained Variance:\u001B[39m\u001B[38;5;124m'\u001B[39m, explained_variance_score(y_test, y_pred))\n\u001B[0;32m 12\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mAccuracy:\u001B[39m\u001B[38;5;124m'\u001B[39m, accuracy_score(y_test, y_pred \u001B[38;5;241m>\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;241m0.5\u001B[39m))\n\u001B[1;32m---> 13\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mF1 Score:\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[43mf1_score\u001B[49m\u001B[43m(\u001B[49m\u001B[43my_test\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m>\u001B[39;49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m0.5\u001B[39;49m\u001B[43m)\u001B[49m)\n", + "Cell \u001B[1;32mIn[12], line 12\u001B[0m\n\u001B[0;32m 10\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mR2:\u001B[39m\u001B[38;5;124m'\u001B[39m, r2_score(y_test, y_pred))\n\u001B[0;32m 11\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mExplained Variance:\u001B[39m\u001B[38;5;124m'\u001B[39m, explained_variance_score(y_test, y_pred))\n\u001B[1;32m---> 12\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mAccuracy:\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[43maccuracy_score\u001B[49m\u001B[43m(\u001B[49m\u001B[43my_test\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m)\u001B[49m)\n\u001B[0;32m 13\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mF1 Score:\u001B[39m\u001B[38;5;124m'\u001B[39m, f1_score(y_test, y_pred \u001B[38;5;241m>\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;241m0.5\u001B[39m))\n", "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:213\u001B[0m, in \u001B[0;36mvalidate_params..decorator..wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m 207\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m 208\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[0;32m 209\u001B[0m skip_parameter_validation\u001B[38;5;241m=\u001B[39m(\n\u001B[0;32m 210\u001B[0m prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[0;32m 211\u001B[0m )\n\u001B[0;32m 212\u001B[0m ):\n\u001B[1;32m--> 213\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 214\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m InvalidParameterError \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[0;32m 215\u001B[0m \u001B[38;5;66;03m# When the function is just a wrapper around an estimator, we allow\u001B[39;00m\n\u001B[0;32m 216\u001B[0m \u001B[38;5;66;03m# the function to delegate validation to the estimator, but we replace\u001B[39;00m\n\u001B[0;32m 217\u001B[0m \u001B[38;5;66;03m# the name of the estimator by the name of the function in the error\u001B[39;00m\n\u001B[0;32m 218\u001B[0m \u001B[38;5;66;03m# message to avoid confusion.\u001B[39;00m\n\u001B[0;32m 219\u001B[0m msg \u001B[38;5;241m=\u001B[39m re\u001B[38;5;241m.\u001B[39msub(\n\u001B[0;32m 220\u001B[0m \u001B[38;5;124mr\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;124m\\\u001B[39m\u001B[38;5;124mw+ must be\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m 221\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__qualname__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m must be\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m 222\u001B[0m \u001B[38;5;28mstr\u001B[39m(e),\n\u001B[0;32m 223\u001B[0m )\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1271\u001B[0m, in \u001B[0;36mf1_score\u001B[1;34m(y_true, y_pred, labels, pos_label, average, sample_weight, zero_division)\u001B[0m\n\u001B[0;32m 1091\u001B[0m \u001B[38;5;129m@validate_params\u001B[39m(\n\u001B[0;32m 1092\u001B[0m {\n\u001B[0;32m 1093\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124my_true\u001B[39m\u001B[38;5;124m\"\u001B[39m: [\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124marray-like\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124msparse matrix\u001B[39m\u001B[38;5;124m\"\u001B[39m],\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1118\u001B[0m zero_division\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mwarn\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m 1119\u001B[0m ):\n\u001B[0;32m 1120\u001B[0m \u001B[38;5;250m \u001B[39m\u001B[38;5;124;03m\"\"\"Compute the F1 score, also known as balanced F-score or F-measure.\u001B[39;00m\n\u001B[0;32m 1121\u001B[0m \n\u001B[0;32m 1122\u001B[0m \u001B[38;5;124;03m The F1 score can be interpreted as a harmonic mean of the precision and\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1269\u001B[0m \u001B[38;5;124;03m array([0.66666667, 1. , 0.66666667])\u001B[39;00m\n\u001B[0;32m 1270\u001B[0m \u001B[38;5;124;03m \"\"\"\u001B[39;00m\n\u001B[1;32m-> 1271\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfbeta_score\u001B[49m\u001B[43m(\u001B[49m\n\u001B[0;32m 1272\u001B[0m \u001B[43m \u001B[49m\u001B[43my_true\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1273\u001B[0m \u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1274\u001B[0m \u001B[43m \u001B[49m\u001B[43mbeta\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m1\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1275\u001B[0m \u001B[43m \u001B[49m\u001B[43mlabels\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mlabels\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1276\u001B[0m \u001B[43m \u001B[49m\u001B[43mpos_label\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mpos_label\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1277\u001B[0m \u001B[43m \u001B[49m\u001B[43maverage\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43maverage\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1278\u001B[0m \u001B[43m \u001B[49m\u001B[43msample_weight\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43msample_weight\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1279\u001B[0m \u001B[43m \u001B[49m\u001B[43mzero_division\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mzero_division\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1280\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:186\u001B[0m, in \u001B[0;36mvalidate_params..decorator..wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m 184\u001B[0m global_skip_validation \u001B[38;5;241m=\u001B[39m get_config()[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mskip_parameter_validation\u001B[39m\u001B[38;5;124m\"\u001B[39m]\n\u001B[0;32m 185\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m global_skip_validation:\n\u001B[1;32m--> 186\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 188\u001B[0m func_sig \u001B[38;5;241m=\u001B[39m signature(func)\n\u001B[0;32m 190\u001B[0m \u001B[38;5;66;03m# Map *args/**kwargs to the function signature\u001B[39;00m\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1463\u001B[0m, in \u001B[0;36mfbeta_score\u001B[1;34m(y_true, y_pred, beta, labels, pos_label, average, sample_weight, zero_division)\u001B[0m\n\u001B[0;32m 1283\u001B[0m \u001B[38;5;129m@validate_params\u001B[39m(\n\u001B[0;32m 1284\u001B[0m {\n\u001B[0;32m 1285\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124my_true\u001B[39m\u001B[38;5;124m\"\u001B[39m: [\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124marray-like\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124msparse matrix\u001B[39m\u001B[38;5;124m\"\u001B[39m],\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1312\u001B[0m zero_division\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mwarn\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m 1313\u001B[0m ):\n\u001B[0;32m 1314\u001B[0m \u001B[38;5;250m \u001B[39m\u001B[38;5;124;03m\"\"\"Compute the F-beta score.\u001B[39;00m\n\u001B[0;32m 1315\u001B[0m \n\u001B[0;32m 1316\u001B[0m \u001B[38;5;124;03m The F-beta score is the weighted harmonic mean of precision and recall,\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1460\u001B[0m \u001B[38;5;124;03m 0.12...\u001B[39;00m\n\u001B[0;32m 1461\u001B[0m \u001B[38;5;124;03m \"\"\"\u001B[39;00m\n\u001B[1;32m-> 1463\u001B[0m _, _, f, _ \u001B[38;5;241m=\u001B[39m \u001B[43mprecision_recall_fscore_support\u001B[49m\u001B[43m(\u001B[49m\n\u001B[0;32m 1464\u001B[0m \u001B[43m \u001B[49m\u001B[43my_true\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1465\u001B[0m \u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1466\u001B[0m \u001B[43m \u001B[49m\u001B[43mbeta\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbeta\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1467\u001B[0m \u001B[43m \u001B[49m\u001B[43mlabels\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mlabels\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1468\u001B[0m \u001B[43m \u001B[49m\u001B[43mpos_label\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mpos_label\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1469\u001B[0m \u001B[43m \u001B[49m\u001B[43maverage\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43maverage\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1470\u001B[0m \u001B[43m \u001B[49m\u001B[43mwarn_for\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mf-score\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1471\u001B[0m \u001B[43m \u001B[49m\u001B[43msample_weight\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43msample_weight\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1472\u001B[0m \u001B[43m \u001B[49m\u001B[43mzero_division\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mzero_division\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 1473\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 1474\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m f\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:186\u001B[0m, in \u001B[0;36mvalidate_params..decorator..wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m 184\u001B[0m global_skip_validation \u001B[38;5;241m=\u001B[39m get_config()[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mskip_parameter_validation\u001B[39m\u001B[38;5;124m\"\u001B[39m]\n\u001B[0;32m 185\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m global_skip_validation:\n\u001B[1;32m--> 186\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 188\u001B[0m func_sig \u001B[38;5;241m=\u001B[39m signature(func)\n\u001B[0;32m 190\u001B[0m \u001B[38;5;66;03m# Map *args/**kwargs to the function signature\u001B[39;00m\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1767\u001B[0m, in \u001B[0;36mprecision_recall_fscore_support\u001B[1;34m(y_true, y_pred, beta, labels, pos_label, average, warn_for, sample_weight, zero_division)\u001B[0m\n\u001B[0;32m 1604\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"Compute precision, recall, F-measure and support for each class.\u001B[39;00m\n\u001B[0;32m 1605\u001B[0m \n\u001B[0;32m 1606\u001B[0m \u001B[38;5;124;03mThe precision is the ratio ``tp / (tp + fp)`` where ``tp`` is the number of\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1764\u001B[0m \u001B[38;5;124;03m array([2, 2, 2]))\u001B[39;00m\n\u001B[0;32m 1765\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m 1766\u001B[0m _check_zero_division(zero_division)\n\u001B[1;32m-> 1767\u001B[0m labels \u001B[38;5;241m=\u001B[39m \u001B[43m_check_set_wise_labels\u001B[49m\u001B[43m(\u001B[49m\u001B[43my_true\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43maverage\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mlabels\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mpos_label\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 1769\u001B[0m \u001B[38;5;66;03m# Calculate tp_sum, pred_sum, true_sum ###\u001B[39;00m\n\u001B[0;32m 1770\u001B[0m samplewise \u001B[38;5;241m=\u001B[39m average \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124msamples\u001B[39m\u001B[38;5;124m\"\u001B[39m\n", - "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1556\u001B[0m, in \u001B[0;36m_check_set_wise_labels\u001B[1;34m(y_true, y_pred, average, labels, pos_label)\u001B[0m\n\u001B[0;32m 1554\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m y_type \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmulticlass\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[0;32m 1555\u001B[0m average_options\u001B[38;5;241m.\u001B[39mremove(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124msamples\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m-> 1556\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m 1557\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mTarget is \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m but average=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mbinary\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m. Please \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m 1558\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mchoose another average setting, one of \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m.\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m%\u001B[39m (y_type, average_options)\n\u001B[0;32m 1559\u001B[0m )\n\u001B[0;32m 1560\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m pos_label \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m (\u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;241m1\u001B[39m):\n\u001B[0;32m 1561\u001B[0m warnings\u001B[38;5;241m.\u001B[39mwarn(\n\u001B[0;32m 1562\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mNote that pos_label (set to \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m) is ignored when \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m 1563\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124maverage != \u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mbinary\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m (got \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m). You may use \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 1566\u001B[0m \u001B[38;5;167;01mUserWarning\u001B[39;00m,\n\u001B[0;32m 1567\u001B[0m )\n", - "\u001B[1;31mValueError\u001B[0m: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted']." + "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:213\u001B[0m, in \u001B[0;36maccuracy_score\u001B[1;34m(y_true, y_pred, normalize, sample_weight)\u001B[0m\n\u001B[0;32m 147\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"Accuracy classification score.\u001B[39;00m\n\u001B[0;32m 148\u001B[0m \n\u001B[0;32m 149\u001B[0m \u001B[38;5;124;03mIn multilabel classification, this function computes subset accuracy:\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 209\u001B[0m \u001B[38;5;124;03m0.5\u001B[39;00m\n\u001B[0;32m 210\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m 212\u001B[0m \u001B[38;5;66;03m# Compute accuracy for each possible representation\u001B[39;00m\n\u001B[1;32m--> 213\u001B[0m y_type, y_true, y_pred \u001B[38;5;241m=\u001B[39m \u001B[43m_check_targets\u001B[49m\u001B[43m(\u001B[49m\u001B[43my_true\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_pred\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 214\u001B[0m check_consistent_length(y_true, y_pred, sample_weight)\n\u001B[0;32m 215\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m y_type\u001B[38;5;241m.\u001B[39mstartswith(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmultilabel\u001B[39m\u001B[38;5;124m\"\u001B[39m):\n", + "File \u001B[1;32m~\\scoop\\apps\\python\\current\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:94\u001B[0m, in \u001B[0;36m_check_targets\u001B[1;34m(y_true, y_pred)\u001B[0m\n\u001B[0;32m 91\u001B[0m y_type \u001B[38;5;241m=\u001B[39m {\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmulticlass\u001B[39m\u001B[38;5;124m\"\u001B[39m}\n\u001B[0;32m 93\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(y_type) \u001B[38;5;241m>\u001B[39m \u001B[38;5;241m1\u001B[39m:\n\u001B[1;32m---> 94\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m 95\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mClassification metrics can\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mt handle a mix of \u001B[39m\u001B[38;5;132;01m{0}\u001B[39;00m\u001B[38;5;124m and \u001B[39m\u001B[38;5;132;01m{1}\u001B[39;00m\u001B[38;5;124m targets\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;241m.\u001B[39mformat(\n\u001B[0;32m 96\u001B[0m type_true, type_pred\n\u001B[0;32m 97\u001B[0m )\n\u001B[0;32m 98\u001B[0m )\n\u001B[0;32m 100\u001B[0m \u001B[38;5;66;03m# We can't have more than one value on y_type => The set is no more needed\u001B[39;00m\n\u001B[0;32m 101\u001B[0m y_type \u001B[38;5;241m=\u001B[39m y_type\u001B[38;5;241m.\u001B[39mpop()\n", + "\u001B[1;31mValueError\u001B[0m: Classification metrics can't handle a mix of multiclass and continuous targets" ] } ], @@ -432,12 +427,44 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-03-06T09:40:10.607951Z", - "start_time": "2024-03-06T09:40:10.377554Z" + "end_time": "2024-03-17T09:29:22.047077Z", + "start_time": "2024-03-17T09:29:21.676154Z" } }, "id": "66c2aa439eb755cb", - "execution_count": 24 + "execution_count": 12 + }, + { + "cell_type": "code", + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAKBCAYAAABK2Qr7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABf90lEQVR4nO3deVhUdeP+8XtYBBEQFJVQds2lNM01zRCzLLcysyRzzdRo99HKfFwzK59S28xME3dTW/TRDDNcStHUXFDMSlBxx0DAJUSZ3x/+nG8T1gN1hiMz79d1zXUx5zMz3DNTDvd8zvkci9VqtQoAAAAA8I+5mR0AAAAAAJwFBQsAAAAADELBAgAAAACDULAAAAAAwCAULAAAAAAwCAULAAAAAAxCwQIAAAAAg1CwAAAAAMAgFCwAAAAAMAgFCwBc1Lp162SxWK55GTNmjNnxTHH1Ndm5c6fZUQAAZZSH2QEAAOaaP3++brzxRrttISEhhv6OnTt3at26dXruuecMfVxXdPDgQSUkJLhsCQaA6x0zWADg4urVq6cmTZrYXRxRsKZMmWLoY7qqgwcPauzYsWbHAAD8CQoWAAAAABiEggUA+EsffPCBatasqQoVKuj222/Xjh077MYTExPVuHFj+fj4KCIiwm6mqm/fvrJYLOrXr58OHTp0zWO8IiIilJCQYPeYbdq0sbvN1et79+5V586dFRAQYHf7rKws9enTR4GBgapataoGDx6sc+fOGfL8Dx48KIvFokmTJqlq1aqqW7euvvzyS4WHhyskJETff/+97ditDz74QGFhYapUqZL69OmjnJwcu8eaPXu2atWqJW9vb7Vs2VJbt261G+/bt6/69u2rI0eOKC4uTkFBQTp06JAkacyYMbJYLIqNjZUk22vZt29fu8eYP3++6tWrJx8fH9WpU0cLFy60jSUkJCgiIkL79+/XHXfcIR8fHzVo0EDbtm2z3ebixYsaOnSoqlatqoCAAHXq1EkHDhyw+x2ffvqp6tevr/Lly6tRo0b65ptv/vHrDADOgoIFAPhTs2fP1rPPPqunnnpKX375pYKCgtS2bVv9+uuvkqS0tDTdd999aty4sVavXq0XX3xR//rXv/Ttt99KulIKtm7dqtGjR+uGG27Q1q1btXXrVg0cOLDEWQ4cOKDY2FiFhYVp/PjxdmPdunXT9u3bNW/ePH3wwQdavny5Bg8e/M9fgN9ZtmyZ5syZo19++UUDBgzQ1KlTVblyZc2ePdt2m3Hjxumtt97SBx98oNWrV6tfv362sYSEBPXv318PP/ywVqxYoRtuuEGxsbH68ccf7X5PVlaWWrVqJU9PT40ZM0aVKlWSJA0cOFBbt27VtGnTJMn2Wv6+iH733Xfq1auXunXrptWrVysuLk69e/dWWlqa7TZnz57VPffco3vuuUfLli2TJLvXqk+fPpo9e7YmTpyopUuXKicnR/fcc48KCgokXVkIpHv37uratasSExPVtGlT3XvvvUWeBwC4LCsAwCWtXbvWKqnIZevWrbbbREREWJ955hnb9aysLKu7u7v1448/tlqtVuvPP/9s/eijj6wXLlywWq1Wa05OjvWGG26wvvHGG3a/a9asWdbw8PBr5ggPD7fOmjXLbltMTIx19OjRdtclWT///PMi91+3bp1VkvWHH36wbXv77betnp6e1t9++604L4XN1ddkx44dtm3p6elWSdaNGzdarVarNSwszPrqq69arVartXfv3tY+ffrY7jdnzhzb/T7++GOrJGtGRobtefbq1cs2fvHiRWt0dLS1b9++tm19+vSxSrJOmTLlf2a8lh07dlgTEhJs148dO2Z1d3e3fvLJJ1ar9cr7IMn61ltv2W6zePFiq4eHh9VqtVp/+uknqyTr3LlzbeO7du2yduvWzfY82rRpY+3SpYtt/PLly9agoCDrqFGj/jQzALgSVhEEABe3aNEi1a5d23b96s95eXk6ePCg3nnnHb3zzjt29/n5558lSTVr1lReXp5GjRqlDRs2aMeOHbp06ZLOnz//jzIVFhYW2Xbvvffq/vvvL7J99+7dkqRbb721yNihQ4eKrJD4d11d+MNisdj9/HutWrWy/dy0aVNJV2bevLy8dOjQIbVt29Y27unpqZiYGG3ZssXuMW666SY9/fTTfytjw4YNlZubq6efflrfffed9uzZo8LCQrv3w83NTU888YTtepUqVXTp0iVJsu3+efvtt9vGGzRooKVLl9qu7969W1lZWUWe+9X/JgDA1VGwAMDF1a5dWw0bNiyy3Wq1SpLGjx+vjh072o1VrVpV0pXd5rp166a4uDjFx8erefPmGjRo0D/OlJGRUWRbs2bN/vT27u7u2rp1a5E/+sPCwv5xlpK4+ppJ/1cS3dzc7Lb/1X0kqUmT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+uGHH9SlSxd9++23mjNnju6++26z47kEVk+7Ppw5c0Z+fn4qLCzUggULlJeXpz59+rDCKVzGihUr1KNHD0VFRdnOB/fjjz9q/vz56tq1q9nxXIIrfiZTsJxUZmamKleurEuXLmnt2rVq1aqVJk6cqPvuu0+NGzc2O55LOHPmjH7++WdFRESoXLlyWrRokTp06KARI0aoZ8+eat++vdkRndovv/yiTz75REePHlWNGjVsH7AAANdy6tQpffXVV7bzwd19992qXr262bFciqt9JlOwAACGy8rK0ltvvaVx48bp8OHDev7553Xp0iX95z//Ud26dc2O5xK++uorNW/eXIGBgWZHAQCXwiqCgAMkJyerTZs2io6OVlRUlN0FjvfFF18oIiLCbjneq8v2onQ88sgj2r17tywWi5555hkFBAQoKChIjz32mNnRXMbgwYO1bds2s2O4tBEjRig/P99u24kTJ/TQQw+ZlAgofa74mcwMFuAA0dHRatmypXr37l3kZMMxMTEmpXIdN9xwg/r27av+/fsXef3Dw8NNSuVafH19lZqaquDgYFWrVk0nT57U6dOnVatWrSLnx4JjTJo0Sd98842WLVsmDw/WtDJDmzZtdPDgQU2ZMkX333+/3nvvPY0aNUrdu3fXhx9+aHY8oFS44mcy/+I6gaioKO3evVu+vr6KjIz80yVh09LSSjmZ68rKytL48eOd9h+O653VatXjjz/OjKGJqlatqi1btig/P18333yzypUrp5SUFFWrVs3saC6jcuXKys7OVuPGjTV48GC7BUd69+5tYjLXsW7dOq1atUrDhg1TfHy8QkND9fXXX3MstIO5u7srOztb/v7+dqeOuMpqtcpisejy5csmJXQtrviZTMFyArNmzZKPj48kKSEhwdwwkCQNGTJEY8eO1fTp0/nm2ATjx4/X008/rTlz5qhy5cpmx3FJr776qh599FF5enpq0aJF+v7779W1a1dNmjTJ7GguIyEhQV5eXvLy8tLixYtt2y0WCwWrlJw7d05btmxRZmamWrZsqU2bNmnbtm269dZb//TLUPxzaWlp8vf3l3TlpMMwlyt+JrOLIOAA/fr105dffilPT0+1aNHC9g+9JH388ccmJnMNsbGx2rNnj86fP6+6devavf6c3LP0nD17Vh4eHvL29lZ2drZOnTql2rVrmx0LKDXVqlXT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sFqtSk9PtytYhw8f1sWLF01M5Rr69Okj6cq3w4MHD5ab25VTXrq5ualmzZqaM2eOmfFcSr169XTfffcpODhY3t7edmPsKgtX4efnp7Zt27pMuZIoWACcEMu0m2/06NHq3r277rrrLoWFhenYsWNKTEzUm2++aXY0p3d1htDNzU0pKSnsFmuiGTNmaPr06apVq5bZUQDTvPvuuxo4cKCmTZtm96WbM2MXQQBOh2Xarw+7du3SsmXLdPz4cVWtWlWdO3dWkyZNzI7lMu6991599tlnKl++vNlRXNYTTzyhvLw89e7du8gM1h133GFSKsDx/rjo0enTp3Xu3DkFBgbafenjrDO5FCwATunIkSOaN2+eMjIyFB4erkceeYRl2gGUqsjIyGtut1gsTvuHJSBdWfTo0qVL8vD4653lYmJiSilR6aJgAXA6LI1svi+++ELPPfecMjIybNusVqtTrxoF/JmTJ0/avuzhlBFwBddaxdSVcAwWAKfTvn37P10aGaXjiSeeUN++fdW/f3+VK1fO7DiAKXJzc9W3b18tW7ZMXl5eys/P55QRcAlXv1BzVcxgAXA6LI1svuDgYG3atElRUVFmR3EpUVFR2r17t3x9ff/yxM/snlY6OGUEXJWbm9tfFixn36OBGSwAToelkc03fvx4Pf3005ozZ44qV65sdhyXMWvWLPn4+EiSEhISzA0DThkBl7Z+/Xr5+fmZHcMUFCwAToelkc03f/587dmzR2FhYapbt67d7lBJSUkmJnNuvz9g3FkPHi9LOGUEXFmDBg1cdldYChYApxMXF6d169YpLCysyAwWSkffvn3NjgCY7u2331bHjh21ePFi2ykjNm3apC+//NLsaIBD/X423RVxDBYAp3N1aWSLxaLDhw8rICBA3t7eKleuHLsImuzixYssegGnV1hYqC1btsjb21tVqlTR3LlzNXPmTPXv3199+vRR9erVzY4IwIEoWACcwvHjx/X000/r8uXL+vzzzyVJL7zwgt566y15eHgoJCREy5YtU4MGDUxO6hpOnDih8ePHa//+/baDmK1Wq/bt26cTJ06YnA5wnJSUFD3wwAPKzs7Ws88+q5EjR0q6srvUwYMHFRgYqFWrVqlevXomJwXgKG5mBwAAI/Tp00eFhYUaPXq0JGnevHl6//33tXbtWv3222/q1auXnnnmGZNTuo5evXopKytLPj4+Kl++vLp37679+/crPj7e7GiAQz3++ON6/PHHderUKVu5kqTdu3crOztbcXFxGjBggIkJATgaM1gAnIK/v7/27dun6tWr6/Lly6pZs6b69etnO7HwsWPHVKdOHeXm5pqc1DX4+fnpl19+0c8//6yXX35ZGzZs0KpVq/TKK69o06ZNZsdzWn+1NPvvsaus4/j6+mr37t1/eoqC9PR01a9fX2fPni3lZABKC4tcAHAKN954o7755hv17t1br7/+us6cOaPnn3/eNv7tt9/qhhtuMDGha6levbpWr16thx56SKmpqbpw4YJuvvlmpaSkmB3NqbE0u/natWun559/XjNnzlRQUJDd2Llz5zR69Gi1atXKpHQASgMzWACcwubNm3X//fcrJydHbm5umjt3rh544AGlpaVpwIABSk5O1qxZs9SjRw+zo7qEZcuWKS4uTocOHdILL7yg77//XlarVeHh4Vq1apXZ8QCHycrKUu/evZWYmKioqChVrVpV7u7uOnPmjPbv36+6detq+fLlqlGjhtlRATgIBQuA07hw4YL27dun0NBQValSRdKVxS8++eQTtWvXTjfffLPJCV3LmTNn5Ofnp8LCQi1YsEB5eXnq06ePy554Eq7lwIEDSk5O1rFjx1RQUKCAgAA1bNhQLVu2LNZunADKLgoWAAAuhKXyAcCxOAYLAAAnxFL5AGAOlmkHAMAJsVQ+AJiDXQQBAHBCLJUPAOZgBgsAACd0dan8pk2bslQ+AJQijsECAMAJvfHGG4qLi9M999yjzp07q0mTJrJarbr99tvNjgYATo1dBAEAcFJnzpyRr6+vrFar5s+fr7Nnz7JUPgA4GAULAAAAAAzCMVgAAMN99dVXys7ONjuGS3Nzc5O7u/s1LwAAx6FgAQAMN3jwYG3bts3sGC4tPT1daWlpSktL0549e5SQkKCbbrpJCxYsMDsaADg1dhEEABhu0qRJ+uabb7Rs2TJ5eLCe0vUiMzNTnTt31ubNm82OAgBOi089AIDhKleurOzsbDVu3FiDBw9WhQoVbGO9e/c2MZlrK1++vE6cOGF2DABwasxgAQAMFxsbe83tFotFSUlJpZzGNcXGxspisdiuFxYWKjU1VXfffbfmzZtnYjIAcG4ULAAAnNDs2bPtrlssFlWvXl1t27a1K14AAGOxiyAAwGFOnTqlw4cPKyIiQkFBQWbHcRkZGRkKDg62reQYEBCgevXqKSwszORkAOD8KFgAAMPl5OSob9++WrZsmby8vHTx4kV17dpVH3/8sfz9/c2O57QOHz6snj17auPGjfLz81PFihUlXTnh8Llz59S8eXNlZWVp2rRpatOmjblhAcBJsUw7AMBwTz75pAoLC3XkyBFduHBBGRkZunTpkuLj482O5tT69eunatWq6dChQ8rJydHhw4d16NAhvfLKK/L399dPP/0kSWrdurXJSQHAeXEMFgDAcJUrV9b27dsVERFh25aenq7GjRsrKyvLvGBOrnz58tq3b5/d6y5JixYtksVi0W233abatWvrwoUL5gQEABfADBYAwHBhYWFFVgtMSkpSeHi4SYlcQ61atYosbiFJPXr00MMPP6wZM2boxhtvNCEZALgOZrAAAIbbsGGDOnbsqFatWikqKkppaWnatGmTVq5cye5pDvTdd9/pvvvuU8WKFdWgQQPbMVjZ2dnavXu3Lly4oOXLl6t58+YmJwUA50XBAgA4xJEjRzRv3jxlZGQoLCxMPXv2VI0aNcyO5fRycnL03//+VykpKbZVBCtXrqwGDRqoU6dO8vPzMzkhADg3ChYAAAAAGIRjsAAAAADAIBQsAAAAADAIJxoGABgiMjJSFovlf94uLS2tFNIAAGAOChYAwBAJCQlmRwAAwHQscgEAAAAABuEYLAAAAAAwCAULAOAwp06d0rZt25SZmWl2FAAASgUFCwBguJycHHXt2lXBwcFq3bq1goOD9eCDDyo3N9fsaAAAOBQFCwBguCeffFKFhYU6cuSILly4oIyMDF26dEnx8fFmRwMAwKFY5AIAYLjKlStr+/btioiIsG1LT09X48aNlZWVZV4wAAAcjBksAIDhwsLClJSUZLctKSlJ4eHhJiUCAKB0MIMFADDchg0b1LFjR7Vq1UpRUVE6cOCAkpOTtXLlSrVu3drseAAAOAwFCwDgEEeOHNG8efOUkZGhsLAw9ezZUzVq1DA7FgAADkXBAgAYprCwUFu2bJG3t7caNWokSVq8eLFq1Kih5s2by93d3eSEAAA4FsdgAQAMkZKSotq1a6tz585asWKFbfurr76qe+65R1FRUdq7d6+JCQEAcDxmsAAAhmjRooUeeOABDR06VG5u9t/fXbp0Sf/+97+1YcMGbdq0yaSEAAA4HgULAGAIX19f7d69W1FRUdccT09PV/369XX27NlSTgYAQOlhF0EAgCHatWun559/XqdPny4ydu7cOY0ePVqtWrUyIRkAAKWHGSwAgCGysrLUu3dvJSYmKioqSlWrVpW7u7vOnDmj/fv3q27dulq+fDkrCQIAnBoFCwBgqKvnvDp27JgKCgoUEBCghg0bqmXLlrJYLGbHAwDAoShYAAAAAGAQjsECAAAAAINQsAAAAADAIBQsAAAAADAIBQsAUCYlJCTIYrEUuaxZs8bsaAAAF+ZhdgAAAP6um2++Wd9++63dNl9f33/0mBaLRenp6YqIiPhHjwMAcE0ULABAmeXu7q6AgACzYwAAYMMuggAAp/PVV1+pfv36CggI0IABA5Sfn28b++ijjxQWFiY/Pz898MADOnv2rCSpTp06tvN0RUZGymKxaNGiRZKkMWPGqG/fvrbHWLdund0MV0REhNasWaPhw4crODhYe/futY3NmTNHtWrVUlBQkF5++WVdPTuK1WrVCy+8oCpVqigwMFBPPfWUOHMKAJR9FCwAQJmVkpKigIAA2yUlJUW//PKL7rvvPj377LPaunWrvv/+e/3nP/+RJO3du1dPPPGEZsyYodTUVP3666+aOnWqJGnr1q3Kzs6WJO3atUvZ2dnq1q1bsbOMHDlSR44c0fz5823la8OGDRowYIAmTZqkb775RrNnz9b8+fMlSYmJifroo4+0Zs0abdiwQcuWLdPq1asNfHUAAGZgF0EAQJlVu3Ztffnll7brISEh+s9//qOGDRtqwIABkqT4+Hh9/PHH+ve//63o6GidOHFC3t7e2rJliwoKCrR//35Jkp+fn+1x/P39S7zrYcWKFTV37ly7bXPnzlXXrl3VuXNnSVKvXr20fPlyPfrooypfvrwkqaCgQLfeeqvS0tLk5sb3ngBQ1lGwAABlVrly5YosRnHkyBHt2LHDVpAuXbpkW/jiwoULevzxx/Xtt9/qlltukbu7uy5fvlzi33v+/Pki255++uki244cOaK1a9fasly8eFENGjSQJMXExOiFF15Qv379dPz4cXXv3l1vvfWWfHx8SpwHAHD94KsyAIBTqVGjhjp37qydO3dq586d2rVrl77++mtJ0ttvv62cnBwdP35c33zzjW677bYi97dYLEWOhbJYLCosLLRd3759e5H7VahQ4ZpZBg0aZJdl9uzZkqS0tDQ98MADSklJ0Z49e7Rx40ZNmzbtHz13AID5KFgAAKfSo0cPffvtt/r555/l5eWld999V/369ZMk5eXlqbCwUJmZmVqwYIE++OCDImUqOjpaq1at0tGjR7VhwwZJUvXq1bV9+3YVFBTol19+0YcfflisLL1799ayZct04sQJeXh4aMSIERoxYoQkac2aNeratat27NihCxcuSLoy2wYAKNsoWAAApxIdHa05c+ZoyJAhqlmzpnbv3q2FCxdKkp577jnl5+frxhtv1KxZs/TYY49p586ddvf/4IMP9NZbbykyMtJWpOLi4lS9enXVrl1b/fr108iRI4uVpXXr1ho7dqx69eqlunXr6uLFi7ZFNfr166eYmBi1b99eDRo0UK1atRQfH2/cCwEAMIXFypqwAAAAAGAIZrAAAAAAwCAULAAAAAAwCAULAAAAAAxCwQIAAAAAg1CwAAAAAMAgFCwAAAAAMAgFCwAAAAAMQsECAAAAAINQsAAAAADAIBQsAAAAADAIBQsAAAAADPL/AIGB0jXfnc1OAAAAAElFTkSuQmCC" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "coefficients = pd.Series(model.coef_, index=X.columns)\n", + "coefficients = coefficients.abs().sort_values(ascending=False)\n", + "plt.figure(figsize=(10, 6))\n", + "coefficients.plot(kind='bar')\n", + "plt.title(\"Feature Importance\")\n", + "plt.xlabel(\"Features\")\n", + "plt.ylabel(\"Absolute Coefficients\")\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-17T09:40:09.378544Z", + "start_time": "2024-03-17T09:40:09.228811Z" + } + }, + "id": "f402407df2c950b2", + "execution_count": 13 }, { "cell_type": "code", @@ -446,7 +473,7 @@ "metadata": { "collapsed": false }, - "id": "c6b5a8df8372f03" + "id": "bb27ee443a1c4182" } ], "metadata": {