在多标签数据集上运行 XGBoost 模型时,我遇到了
ValueError
。错误消息为: ValueError: 预期的类标签 {0,1,2,3,4,5,6,7,8},得到 {0,1,3,4,5,6,7,8,9}
我的数据集由 500 个实例组成,标签范围从 0 到 9,总共有 10 个类。少数类(标签
9
)有 37 个实例。尽管如此,我还是收到一条错误,指示意外的类标签9
。
我已经尝试使用不同的值进行交叉验证(3、5 和 10),但没有成功。有趣的是,来自
sklearn
的其他模型,例如随机森林和 AdaBoost,不会产生此错误并按预期工作。
有没有人在 XGBoost 上遇到过类似的问题或者可以找出导致此错误的可能原因?任何有关如何解决此问题的见解或建议将不胜感激。
将 xgboost 导入为 xgb 从 sklearn.model_selection 导入 train_test_split 从 sklearn.metrics 导入 precision_score
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 42)
模型 = xgb.XGBClassifier() model.fit(X_train, y_train)
y_pred = model.predict(X_test) 打印(准确度分数(y_test,y_pred))
我要检查两件事:
n_classes - 1
。y
符合这个格式吗?尝试 print(np.unique(y))
检查您是否获得 [0, 1, 2, ..., n_classes -1]
。
要强制从两个拆分中的所有标签进行采样,请尝试将代码修改为
... = train_test_split(..., stratify=y)
。一切都和以前一样,但是这次确保测试分割的标签分布接近原始,因此不会丢失任何标签。
我认为即使你没有得到错误(特别是当存在不平衡时),分层也是一个好主意,因为它使测试分割的分布代表原始数据集,而不是具有被随机采样过程扭曲的分布.