From 8d18901f9639a0a857bf75e8e634a9e84e1e7534 Mon Sep 17 00:00:00 2001 From: johanleroy Date: Mon, 22 Sep 2025 10:16:27 +0200 Subject: [PATCH] V2 JL --- notebook_JL.ipynb | 91 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 15 deletions(-) diff --git a/notebook_JL.ipynb b/notebook_JL.ipynb index 01b5e91..7fb14a2 100644 --- a/notebook_JL.ipynb +++ b/notebook_JL.ipynb @@ -898,8 +898,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-09-22T08:11:02.878804Z", - "start_time": "2025-09-22T08:11:02.873263Z" + "end_time": "2025-09-22T08:13:33.163838Z", + "start_time": "2025-09-22T08:13:33.155293Z" } }, "cell_type": "code", @@ -921,7 +921,7 @@ ], "id": "807e025a16c8d928", "outputs": [], - "execution_count": 18 + "execution_count": 24 }, { "metadata": {}, @@ -936,8 +936,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-09-22T08:11:34.505314Z", - "start_time": "2025-09-22T08:11:34.260276Z" + "end_time": "2025-09-22T08:14:39.436643Z", + "start_time": "2025-09-22T08:14:39.390644Z" } }, "cell_type": "code", @@ -952,26 +952,87 @@ "print(classification_report(y_val, y_pred))" ], "id": "e19fe3c651f5d9fa", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dummy accuracy: 1.0\n", + " precision recall f1-score support\n", + "\n", + " 1.0 1.00 1.00 1.00 1963\n", + "\n", + " accuracy 1.00 1963\n", + " macro avg 1.00 1.00 1.00 1963\n", + "weighted avg 1.00 1.00 1.00 1963\n", + "\n" + ] + } + ], + "execution_count": 28 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "# 6) Modèles & évaluation\n", + "\n", + "Pistes : LogisticRegression (avec `class_weight='balanced'`), RandomForest, XGBoost." + ], + "id": "c0e6ac20dcb92ec5" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-22T08:16:16.027920Z", + "start_time": "2025-09-22T08:16:15.920246Z" + } + }, + "cell_type": "code", + "source": [ + "# %% Logistic Regression pipeline\n", + "lr_pipe = Pipeline(steps=[('pre', preprocessor), ('clf', LogisticRegression(max_iter=2000, class_weight='balanced', random_state=RANDOM_STATE))])\n", + "\n", + "lr_pipe.fit(X_train, y_train)\n", + "yp = lr_pipe.predict(X_val)\n", + "print('LR accuracy:', accuracy_score(y_val, yp))\n", + "print(classification_report(y_val, yp))\n", + "\n", + "# RandomForest\n", + "rf_pipe = Pipeline(steps=[('pre', preprocessor), ('clf', RandomForestClassifier(n_estimators=200, class_weight='balanced', random_state=RANDOM_STATE))])\n", + "rf_pipe.fit(X_train, y_train)\n", + "yp_rf = rf_pipe.predict(X_val)\n", + "print('RF accuracy:', accuracy_score(y_val, yp_rf))\n", + "print(classification_report(y_val, yp_rf))\n", + "\n", + "# XGBoost (si disponible)\n", + "if has_xgb:\n", + " xgb_clf = xgb.XGBClassifier(use_label_encoder=False, eval_metric='logloss', random_state=RANDOM_STATE)\n", + " xgb_pipe = Pipeline(steps=[('pre', preprocessor), ('clf', xgb_clf)])\n", + " xgb_pipe.fit(X_train, y_train)\n", + " yp_xgb = xgb_pipe.predict(X_val)\n", + " print('XGB accuracy:', accuracy_score(y_val, yp_xgb))\n", + " print(classification_report(y_val, yp_xgb))" + ], + "id": "85dbe897dee3bc10", "outputs": [ { "ename": "ValueError", - "evalue": "Input y contains NaN.", + "evalue": "This solver needs samples of at least 2 classes in the data, but the data contains only one class: np.float64(1.0)", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mValueError\u001B[39m Traceback (most recent call last)", - "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[19]\u001B[39m\u001B[32m, line 1\u001B[39m\n\u001B[32m----> \u001B[39m\u001B[32m1\u001B[39m X_train, X_val, y_train, y_val = \u001B[43mtrain_test_split\u001B[49m\u001B[43m(\u001B[49m\u001B[43mX\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtest_size\u001B[49m\u001B[43m=\u001B[49m\u001B[32;43m0.2\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstratify\u001B[49m\u001B[43m=\u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mrandom_state\u001B[49m\u001B[43m=\u001B[49m\u001B[43mRANDOM_STATE\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 3\u001B[39m \u001B[38;5;66;03m# Baseline Dummy\u001B[39;00m\n\u001B[32m 4\u001B[39m dummy = Pipeline(steps=[(\u001B[33m'\u001B[39m\u001B[33mpre\u001B[39m\u001B[33m'\u001B[39m, preprocessor), (\u001B[33m'\u001B[39m\u001B[33mclf\u001B[39m\u001B[33m'\u001B[39m, DummyClassifier(strategy=\u001B[33m'\u001B[39m\u001B[33mmost_frequent\u001B[39m\u001B[33m'\u001B[39m))])\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:218\u001B[39m, in \u001B[36mvalidate_params..decorator..wrapper\u001B[39m\u001B[34m(*args, **kwargs)\u001B[39m\n\u001B[32m 212\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m 213\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[32m 214\u001B[39m skip_parameter_validation=(\n\u001B[32m 215\u001B[39m prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[32m 216\u001B[39m )\n\u001B[32m 217\u001B[39m ):\n\u001B[32m--> \u001B[39m\u001B[32m218\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 219\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m InvalidParameterError \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[32m 220\u001B[39m \u001B[38;5;66;03m# When the function is just a wrapper around an estimator, we allow\u001B[39;00m\n\u001B[32m 221\u001B[39m \u001B[38;5;66;03m# the function to delegate validation to the estimator, but we replace\u001B[39;00m\n\u001B[32m 222\u001B[39m \u001B[38;5;66;03m# the name of the estimator by the name of the function in the error\u001B[39;00m\n\u001B[32m 223\u001B[39m \u001B[38;5;66;03m# message to avoid confusion.\u001B[39;00m\n\u001B[32m 224\u001B[39m msg = re.sub(\n\u001B[32m 225\u001B[39m \u001B[33mr\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mparameter of \u001B[39m\u001B[33m\\\u001B[39m\u001B[33mw+ must be\u001B[39m\u001B[33m\"\u001B[39m,\n\u001B[32m 226\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mparameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc.\u001B[34m__qualname__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m must be\u001B[39m\u001B[33m\"\u001B[39m,\n\u001B[32m 227\u001B[39m \u001B[38;5;28mstr\u001B[39m(e),\n\u001B[32m 228\u001B[39m )\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_split.py:2940\u001B[39m, in \u001B[36mtrain_test_split\u001B[39m\u001B[34m(test_size, train_size, random_state, shuffle, stratify, *arrays)\u001B[39m\n\u001B[32m 2936\u001B[39m CVClass = ShuffleSplit\n\u001B[32m 2938\u001B[39m cv = CVClass(test_size=n_test, train_size=n_train, random_state=random_state)\n\u001B[32m-> \u001B[39m\u001B[32m2940\u001B[39m train, test = \u001B[38;5;28mnext\u001B[39m(\u001B[43mcv\u001B[49m\u001B[43m.\u001B[49m\u001B[43msplit\u001B[49m\u001B[43m(\u001B[49m\u001B[43mX\u001B[49m\u001B[43m=\u001B[49m\u001B[43marrays\u001B[49m\u001B[43m[\u001B[49m\u001B[32;43m0\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m=\u001B[49m\u001B[43mstratify\u001B[49m\u001B[43m)\u001B[49m)\n\u001B[32m 2942\u001B[39m train, test = ensure_common_namespace_device(arrays[\u001B[32m0\u001B[39m], train, test)\n\u001B[32m 2944\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mlist\u001B[39m(\n\u001B[32m 2945\u001B[39m chain.from_iterable(\n\u001B[32m 2946\u001B[39m (_safe_indexing(a, train), _safe_indexing(a, test)) \u001B[38;5;28;01mfor\u001B[39;00m a \u001B[38;5;129;01min\u001B[39;00m arrays\n\u001B[32m 2947\u001B[39m )\n\u001B[32m 2948\u001B[39m )\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_split.py:2429\u001B[39m, in \u001B[36mStratifiedShuffleSplit.split\u001B[39m\u001B[34m(self, X, y, groups)\u001B[39m\n\u001B[32m 2424\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m groups \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[32m 2425\u001B[39m warnings.warn(\n\u001B[32m 2426\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mThe groups parameter is ignored by \u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m.\u001B[34m__class__\u001B[39m.\u001B[34m__name__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m\"\u001B[39m,\n\u001B[32m 2427\u001B[39m \u001B[38;5;167;01mUserWarning\u001B[39;00m,\n\u001B[32m 2428\u001B[39m )\n\u001B[32m-> \u001B[39m\u001B[32m2429\u001B[39m y = \u001B[43mcheck_array\u001B[49m\u001B[43m(\u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minput_name\u001B[49m\u001B[43m=\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43my\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mensure_2d\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdtype\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mNone\u001B[39;49;00m\u001B[43m)\u001B[49m\n\u001B[32m 2430\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28msuper\u001B[39m().split(X, y, groups)\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1105\u001B[39m, in \u001B[36mcheck_array\u001B[39m\u001B[34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_writeable, force_all_finite, ensure_all_finite, ensure_non_negative, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001B[39m\n\u001B[32m 1099\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[32m 1100\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mFound array with dim \u001B[39m\u001B[38;5;132;01m{\u001B[39;00marray.ndim\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m,\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 1101\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33m while dim <= 2 is required\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mcontext\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m.\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 1102\u001B[39m )\n\u001B[32m 1104\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m ensure_all_finite:\n\u001B[32m-> \u001B[39m\u001B[32m1105\u001B[39m \u001B[43m_assert_all_finite\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1106\u001B[39m \u001B[43m \u001B[49m\u001B[43marray\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1107\u001B[39m \u001B[43m \u001B[49m\u001B[43minput_name\u001B[49m\u001B[43m=\u001B[49m\u001B[43minput_name\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1108\u001B[39m \u001B[43m \u001B[49m\u001B[43mestimator_name\u001B[49m\u001B[43m=\u001B[49m\u001B[43mestimator_name\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1109\u001B[39m \u001B[43m \u001B[49m\u001B[43mallow_nan\u001B[49m\u001B[43m=\u001B[49m\u001B[43mensure_all_finite\u001B[49m\u001B[43m \u001B[49m\u001B[43m==\u001B[49m\u001B[43m \u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mallow-nan\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[32m 1110\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1112\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m copy:\n\u001B[32m 1113\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m _is_numpy_namespace(xp):\n\u001B[32m 1114\u001B[39m \u001B[38;5;66;03m# only make a copy if `array` and `array_orig` may share memory`\u001B[39;00m\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\utils\\validation.py:120\u001B[39m, in \u001B[36m_assert_all_finite\u001B[39m\u001B[34m(X, allow_nan, msg_dtype, estimator_name, input_name)\u001B[39m\n\u001B[32m 117\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m first_pass_isfinite:\n\u001B[32m 118\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m120\u001B[39m \u001B[43m_assert_all_finite_element_wise\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 121\u001B[39m \u001B[43m \u001B[49m\u001B[43mX\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 122\u001B[39m \u001B[43m \u001B[49m\u001B[43mxp\u001B[49m\u001B[43m=\u001B[49m\u001B[43mxp\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 123\u001B[39m \u001B[43m \u001B[49m\u001B[43mallow_nan\u001B[49m\u001B[43m=\u001B[49m\u001B[43mallow_nan\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 124\u001B[39m \u001B[43m \u001B[49m\u001B[43mmsg_dtype\u001B[49m\u001B[43m=\u001B[49m\u001B[43mmsg_dtype\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 125\u001B[39m \u001B[43m \u001B[49m\u001B[43mestimator_name\u001B[49m\u001B[43m=\u001B[49m\u001B[43mestimator_name\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 126\u001B[39m \u001B[43m \u001B[49m\u001B[43minput_name\u001B[49m\u001B[43m=\u001B[49m\u001B[43minput_name\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 127\u001B[39m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n", - "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\utils\\validation.py:169\u001B[39m, in \u001B[36m_assert_all_finite_element_wise\u001B[39m\u001B[34m(X, xp, allow_nan, msg_dtype, estimator_name, input_name)\u001B[39m\n\u001B[32m 152\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m estimator_name \u001B[38;5;129;01mand\u001B[39;00m input_name == \u001B[33m\"\u001B[39m\u001B[33mX\u001B[39m\u001B[33m\"\u001B[39m \u001B[38;5;129;01mand\u001B[39;00m has_nan_error:\n\u001B[32m 153\u001B[39m \u001B[38;5;66;03m# Improve the error message on how to handle missing values in\u001B[39;00m\n\u001B[32m 154\u001B[39m \u001B[38;5;66;03m# scikit-learn.\u001B[39;00m\n\u001B[32m 155\u001B[39m msg_err += (\n\u001B[32m 156\u001B[39m \u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[38;5;132;01m{\u001B[39;00mestimator_name\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m does not accept missing values\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 157\u001B[39m \u001B[33m\"\u001B[39m\u001B[33m encoded as NaN natively. For supervised learning, you might want\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m (...)\u001B[39m\u001B[32m 167\u001B[39m \u001B[33m\"\u001B[39m\u001B[33m#estimators-that-handle-nan-values\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 168\u001B[39m )\n\u001B[32m--> \u001B[39m\u001B[32m169\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(msg_err)\n", - "\u001B[31mValueError\u001B[39m: Input y contains NaN." + "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[33]\u001B[39m\u001B[32m, line 4\u001B[39m\n\u001B[32m 1\u001B[39m \u001B[38;5;66;03m# %% Logistic Regression pipeline\u001B[39;00m\n\u001B[32m 2\u001B[39m lr_pipe = Pipeline(steps=[(\u001B[33m'\u001B[39m\u001B[33mpre\u001B[39m\u001B[33m'\u001B[39m, preprocessor), (\u001B[33m'\u001B[39m\u001B[33mclf\u001B[39m\u001B[33m'\u001B[39m, LogisticRegression(max_iter=\u001B[32m2000\u001B[39m, class_weight=\u001B[33m'\u001B[39m\u001B[33mbalanced\u001B[39m\u001B[33m'\u001B[39m, random_state=RANDOM_STATE))])\n\u001B[32m----> \u001B[39m\u001B[32m4\u001B[39m \u001B[43mlr_pipe\u001B[49m\u001B[43m.\u001B[49m\u001B[43mfit\u001B[49m\u001B[43m(\u001B[49m\u001B[43mX_train\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_train\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 5\u001B[39m yp = lr_pipe.predict(X_val)\n\u001B[32m 6\u001B[39m \u001B[38;5;28mprint\u001B[39m(\u001B[33m'\u001B[39m\u001B[33mLR accuracy:\u001B[39m\u001B[33m'\u001B[39m, accuracy_score(y_val, yp))\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\base.py:1365\u001B[39m, in \u001B[36m_fit_context..decorator..wrapper\u001B[39m\u001B[34m(estimator, *args, **kwargs)\u001B[39m\n\u001B[32m 1358\u001B[39m estimator._validate_params()\n\u001B[32m 1360\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[32m 1361\u001B[39m skip_parameter_validation=(\n\u001B[32m 1362\u001B[39m prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[32m 1363\u001B[39m )\n\u001B[32m 1364\u001B[39m ):\n\u001B[32m-> \u001B[39m\u001B[32m1365\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfit_method\u001B[49m\u001B[43m(\u001B[49m\u001B[43mestimator\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\pipeline.py:663\u001B[39m, in \u001B[36mPipeline.fit\u001B[39m\u001B[34m(self, X, y, **params)\u001B[39m\n\u001B[32m 657\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m._final_estimator != \u001B[33m\"\u001B[39m\u001B[33mpassthrough\u001B[39m\u001B[33m\"\u001B[39m:\n\u001B[32m 658\u001B[39m last_step_params = \u001B[38;5;28mself\u001B[39m._get_metadata_for_step(\n\u001B[32m 659\u001B[39m step_idx=\u001B[38;5;28mlen\u001B[39m(\u001B[38;5;28mself\u001B[39m) - \u001B[32m1\u001B[39m,\n\u001B[32m 660\u001B[39m step_params=routed_params[\u001B[38;5;28mself\u001B[39m.steps[-\u001B[32m1\u001B[39m][\u001B[32m0\u001B[39m]],\n\u001B[32m 661\u001B[39m all_params=params,\n\u001B[32m 662\u001B[39m )\n\u001B[32m--> \u001B[39m\u001B[32m663\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_final_estimator\u001B[49m\u001B[43m.\u001B[49m\u001B[43mfit\u001B[49m\u001B[43m(\u001B[49m\u001B[43mXt\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mlast_step_params\u001B[49m\u001B[43m[\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mfit\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 665\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\base.py:1365\u001B[39m, in \u001B[36m_fit_context..decorator..wrapper\u001B[39m\u001B[34m(estimator, *args, **kwargs)\u001B[39m\n\u001B[32m 1358\u001B[39m estimator._validate_params()\n\u001B[32m 1360\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[32m 1361\u001B[39m skip_parameter_validation=(\n\u001B[32m 1362\u001B[39m prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[32m 1363\u001B[39m )\n\u001B[32m 1364\u001B[39m ):\n\u001B[32m-> \u001B[39m\u001B[32m1365\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfit_method\u001B[49m\u001B[43m(\u001B[49m\u001B[43mestimator\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\PycharmProjects\\ENI-hotel\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1335\u001B[39m, in \u001B[36mLogisticRegression.fit\u001B[39m\u001B[34m(self, X, y, sample_weight)\u001B[39m\n\u001B[32m 1333\u001B[39m classes_ = \u001B[38;5;28mself\u001B[39m.classes_\n\u001B[32m 1334\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m n_classes < \u001B[32m2\u001B[39m:\n\u001B[32m-> \u001B[39m\u001B[32m1335\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[32m 1336\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mThis solver needs samples of at least 2 classes\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 1337\u001B[39m \u001B[33m\"\u001B[39m\u001B[33m in the data, but the data contains only one\u001B[39m\u001B[33m\"\u001B[39m\n\u001B[32m 1338\u001B[39m \u001B[33m\"\u001B[39m\u001B[33m class: \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[33m\"\u001B[39m % classes_[\u001B[32m0\u001B[39m]\n\u001B[32m 1339\u001B[39m )\n\u001B[32m 1341\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(\u001B[38;5;28mself\u001B[39m.classes_) == \u001B[32m2\u001B[39m:\n\u001B[32m 1342\u001B[39m n_classes = \u001B[32m1\u001B[39m\n", + "\u001B[31mValueError\u001B[39m: This solver needs samples of at least 2 classes in the data, but the data contains only one class: np.float64(1.0)" ] } ], - "execution_count": 19 + "execution_count": 33 } ], "metadata": {