————————————————————————— ValueError Traceback (most recent call last) Cell In[108], line 5 3 # XGBoostモデルの作成とトレーニング 4 xgb_model = xgb.XGBClassifier(n_estimators=1000, random_state=100) —-> 5 xgb_model.fit(X_train, y_train) 7 # テストセットでの予測 8 y_pred = xgb_model.predict(X_test) File ~anaconda3libsite-packagesxgboostcore.py:729, in require_keyword_args.<locals>.throw_if.<locals>.inner_f(*args, **kwargs) 727 for k, arg in zip(sig.parameters, args): 728 kwargs[k] = arg –> 729 return func(**kwargs) File ~anaconda3libsite-packagesxgboostsklearn.py:1467, 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) 1462 expected_classes = self.classes_ 1463 if ( 1464 classes.shape != expected_classes.shape 1465 or not (classes == expected_classes).all() 1466 ): -> 1467 raise ValueError( 1468 f”Invalid classes inferred from unique values of `y`. ” 1469 f”Expected: {expected_classes}, got {classes}” 1470 ) 1472 params = self.get_xgb_params() 1474 if callable(self.objective): ValueError: Invalid classes inferred from unique values of `y`. Expected: [0 1 2 3 4 5 6 7], got [ 60 80 100 120 140 160 180 200]
XGBoostのfitメソッドが、yの値をクラスラベルとして扱っているためエラーが発生しています。XGBoostは、クラスラベルが整数値であり、0から始まる連続した値であることを期待しています。
解決策としては、yのクラスラベルを0から始まる整数値に変換する必要があります。LabelEncoderを使用してyのクラスラベルを変換することができます。
以下に修正例を示します。
python
from sklearn.preprocessing import LabelEncoder # 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モデルを適切にトレーニングし、評価できるようになります。

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