————————————————————————— ValueError Traceback (most recent call last) Cell In[70], line 59 57 # XGBoostモデルの作成とトレーニング 58 xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) —> 59 xgb_model.fit(X_train, y_train) 61 # テストセットでの予測 62 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:1471, 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) 1466 expected_classes = self.classes_ 1467 if ( 1468 classes.shape != expected_classes.shape 1469 or not (classes == expected_classes).all() 1470 ): -> 1471 raise ValueError( 1472 f”Invalid classes inferred from unique values of `y`. ” 1473 f”Expected: {expected_classes}, got {classes}” 1474 ) 1476 params = self.get_xgb_params() 1478 if callable(self.objective): ValueError: Invalid classes inferred from unique values of `y`. Expected: [0 1 2 3 4 5], got [ 60 80 100 120 140 160]
エラーメッセージによると、XGBoostのfitメソッドに渡された目的変数y_trainに、予想されていないクラスが含まれています。XGBoostは、ラベルを整数の0から始まる連続した数値にエンコードすることを期待していますが、あなたの目的変数には[60, 80, 100, 120, 140, 160]という値が含まれています。
この問題を解決するために、目的変数を0から始まる連続した整数値にエンコードする必要があります。そのためには、LabelEncoderを使って目的変数をエンコードすることができます。
以下のようにLabelEncoderを使って目的変数をエンコードし、XGBoostモデルをトレーニングすることができます。
python
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)
このようにして、XGBoostモデルを適切にトレーニングし、評価することができます。

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