使用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日
下一篇 2022年5月23日

相关推荐