使用XGBClassifier出现Dataset is empty, or contains only positive or negative samples.错误

问题:

之前在lightgbm中使用了早停early_stopping参数,于是我也想在xgboost中使用类似的方法进行早停,从其他地方找到的代码大致都是这样写的:

from xgboost import XGBClassifier

param = {"objective": "multi:softmax",
            "num_class": 5}

clf = XGBClassifier(**param)

clf.fit(X_train, y_train, eval_set=[(x_val, y_val)], early_stopping_rounds=100)

preds = model.predict(X_val)

acc = accuracy_score(y_val, preds)

此时出现了错误,错误为

WARNING: ../auc.cc:330: Dataset is empty, or contains only positive or negative samples.

(数据集为空,或仅包含正样本或负样本。)

可能的原因:

在处理分类问题时,错误地设置了类别数。例如,在处理二分类问题时,误将n_classs参数设置错误5.

原因二:类别极不均衡,导致划分之后的训练集中只有一个类别的样本

解决方法:将类别数修改正确即可

from xgboost import XGBClassifier

param = {"objective": "multi:softmax",
            "num_class": 2}

clf = XGBClassifier(**param)

clf.fit(X_train, y_train, eval_set=[(x_val, y_val)], early_stopping_rounds=100)

preds = model.predict(X_val)

acc = accuracy_score(y_val, preds)

疑问:

发现即便错误地将n_classs参数设置为5,但是只要不使用early_stooping_rounds参数,就不会出现上方的错误,不知道为什么会这样。。

from xgboost import XGBClassifier

param = {"objective": "multi:softmax",
            "num_class": 5}

clf = XGBClassifier(**param)

clf.fit(X_train, y_train)

preds = model.predict(X_val)

acc = accuracy_score(y_val, preds)

这样就不会报错。。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年5月23日 下午2:31
下一篇 2022年5月23日 下午2:35

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!