from sklearn.preprocessing import LabelEncoder import xgboost as xgb # LabelEncoderを使用してクラスラベルを変換する label_encoder = LabelEncoder() y_train_encoded = label_encoder.fit_transform(y_train) y_test_encoded = label_encoder.transform(y_test) # XGBoostモデルの作成とトレーニング xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) xgb_model.fit(X_train, y_train_encoded) # テストセットでの予測 y_pred_encoded = xgb_model.predict(X_test) # モデルの評価 accuracy = accuracy_score(y_test_encoded, y_pred_encoded) precision = precision_score(y_test_encoded, y_pred_encoded, average=’weighted’) recall = recall_score(y_test_encoded, y_pred_encoded, average=’weighted’) f1 = f1_score(y_test_encoded, y_pred_encoded, average=’weighted’) roc_auc = roc_auc_score(y_test_encoded, xgb_model.predict_proba(X_test), multi_class=’ovr’) print(“Accuracy:”, accuracy) print(“Precision:”, precision) print(“Recall:”, recall) print(“F1 Score:”, f1) print(“ROC AUC Score:”, roc_auc) from sklearn.preprocessing import LabelEncoder import xgboost as xgb # LabelEncoderを使用してクラスラベルを変換する label_encoder = LabelEncoder() y_train_encoded = label_encoder.fit_transform(y_train) y_test_encoded = label_encoder.transform(y_test) # XGBoostモデルの作成とトレーニング xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) xgb_model.fit(X_train, y_train_encoded) # テストセットでの予測 y_pred_encoded = xgb_model.predict(X_test) # モデルの評価 accuracy = accuracy_score(y_test_encoded, y_pred_encoded) precision = precision_score(y_test_encoded, y_pred_encoded, average=’weighted’) recall = recall_score(y_test_encoded, y_pred_encoded, average=’weighted’) f1 = f1_score(y_test_encoded, y_pred_encoded, average=’weighted’) roc_auc = roc_auc_score(y_test_encoded, xgb_model.predict_proba(X_test), multi_class=’ovr’) print(“Accuracy:”, accuracy) print(“Precision:”, precision) print(“Recall:”, recall) print(“F1 Score:”, f1) print(“ROC AUC Score:”, roc_auc) from sklearn.preprocessing import LabelEncoder import xgboost as xgb # LabelEncoderを使用してクラスラベルを変換する label_encoder = LabelEncoder() y_train_encoded = label_encoder.fit_transform(y_train) y_test_encoded = label_encoder.transform(y_test) # XGBoostモデルの作成とトレーニング xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) xgb_model.fit(X_train, y_train_encoded) # テストセットでの予測 y_pred_encoded = xgb_model.predict(X_test) # モデルの評価 accuracy = accuracy_score(y_test_encoded, y_pred_encoded) precision = precision_score(y_test_encoded, y_pred_encoded, average=’weighted’) recall = recall_score(y_test_encoded, y_pred_encoded, average=’weighted’) f1 = f1_score(y_test_encoded, y_pred_encoded, average=’weighted’) roc_auc = roc_auc_score(y_test_encoded, xgb_model.predict_proba(X_test), multi_class=’ovr’) print(“Accuracy:”, accuracy) print(“Precision:”, precision) print(“Recall:”, recall) print(“F1 Score:”, f1) print(“ROC AUC Score:”, roc_auc) from sklearn.preprocessing import LabelEncoder import xgboost as xgb # LabelEncoderを使用してクラスラベルを変換する label_encoder = LabelEncoder() y_train_encoded = label_encoder.fit_transform(y_train) y_test_encoded = label_encoder.transform(y_test) # XGBoostモデルの作成とトレーニング xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) xgb_model.fit(X_train, y_train_encoded) # テストセットでの予測 y_pred_encoded = xgb_model.predict(X_test) # モデルの評価 accuracy = accuracy_score(y_test_encoded, y_pred_encoded) precision = precision_score(y_test_encoded, y_pred_encoded, average=’weighted’) recall = recall_score(y_test_encoded, y_pred_encoded, average=’weighted’) f1 = f1_score(y_test_encoded, y_pred_encoded, average=’weighted’) roc_auc = roc_auc_score(y_test_encoded, xgb_model.predict_proba(X_test), multi_class=’ovr’) print(“Accuracy:”, accuracy) print(“Precision:”, precision) print(“Recall:”, recall) print(“F1 Score:”, f1) print(“ROC AUC Score:”, roc_auc)————————————————————————— XGBoostError Traceback (most recent call last) Cell In[61], line 12 10 # XGBoostモデルの作成とトレーニング 11 xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) —> 12 xgb_model.fit(X_train, y_train) 14 # テストセットでの予測 15 y_pred = xgb_model.predict(X_test) File /home/share/temp/venv/lib/python3.8/site-packages/xgboost/core.py:730, in require_keyword_args.<locals>.throw_if.<locals>.inner_f(*args, **kwargs) 728 for k, arg in zip(sig.parameters, args): 729 kwargs[k] = arg –> 730 return func(**kwargs) File /home/share/temp/venv/lib/python3.8/site-packages/xgboost/sklearn.py:1500, in XGBClassifier.fit(self, X, y, sample_weight, base_margin, eval_set, eval_metric, early_stopping_rounds, verbose, xgb_model, sample_weight_eval_set, base_margin_eval_set, feature_weights, callbacks) 1489 params[“num_class”] = self.n_classes_ 1491 ( 1492 model, 1493 metric, (…) 1498 xgb_model, eval_metric, params, early_stopping_rounds, callbacks 1499 ) -> 1500 train_dmatrix, evals = _wrap_evaluation_matrices( 1501 missing=self.missing, 1502 X=X, … [bt] (6) /usr/lib/python3.8/lib-dynload/_ctypes.cpython-38-x86_64-linux-gnu.so(_ctypes_callproc+0x5b6) [0x7fc1a4d77306] [bt] (7) /usr/lib/python3.8/lib-dynload/_ctypes.cpython-38-x86_64-linux-gnu.so(+0x139dc) [0x7fc1a4d779dc] [bt] (8) /home/share/temp/venv/bin/python(_PyObject_MakeTpCall+0x296) [0x5d6066] Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings…
エラーメッセージを見ると、XGBoostのfitメソッドに渡されたy_trainが正しくないようです。XGBoostでは、y_trainにはクラスラベルではなく、予測したい目的変数の値が渡される必要があります。
具体的には、XGBoostではクラスラベルを使うのではなく、回帰モデルとして扱われます。そのため、目的変数は連続値である必要があります。そのため、回帰の場合にはy_trainには数値データが入っている必要があります。
もしXGBoostを使ってクラス分類を行いたい場合は、XGBClassifierを使いますが、その場合にはクラスラベルが必要です。正しいクラスラベルがy_trainに含まれていることを確認してください。
正しいクラスラベルがy_trainに含まれている場合、XGBoostの場合、ラベルエンコーディングやOne-hotエンコーディングは必要ありません。通常は、整数のクラスラベルがそのまま使われます。

ディスカッション
コメント一覧
まだ、コメントがありません