This commit is contained in:
johanleroy
2025-09-22 10:16:27 +02:00
parent b45bba2ee7
commit 8d18901f96

View File

@@ -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.<locals>.decorator.<locals>.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.<locals>.decorator.<locals>.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.<locals>.decorator.<locals>.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": {