XGBoosError:参数num_类的值0应大于等于1

2024-05-13 13:07:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较两种不同的功能集,将客户分为高价值、中价值和低价值。这是我使用的代码:

ltv_xgb_model = xgb.XGBClassifier(max_depth=5, learning_rate=0.1,objective='multi:softmax',n_jobs=-1).fit(X_train, y_train)        

第一个数据集在培训数据中有11个客户,在测试数据中有2个客户。尽管客户数量有限,但分类器能够为其中一个特征集实现50%的精度

第二个数据集在培训数据中有14个客户,在测试数据中有2个客户。虽然我们有一个更大的训练集,但分类器抛出了一个错误:

XGBoostError: value 0 for Parameter num_class should be greater equal to 1

论坛上以前的帖子提到.fit()方法会自动设置num\u class参数。请参见此处:XGBClassifier num_class is invalid。因此,问题似乎是由其他原因引起的

有人知道问题出在哪里吗?感谢您的帮助


Tags: 数据代码model客户分类器trainnumclass
1条回答
网友
1楼 · 发布于 2024-05-13 13:07:54

原因是XGBoost是根据您提供的训练数据推断类的数量。对于multi:softmax,类的最小数量应该是3个(如果有2个类,那么应该使用二进制分类目标)。因此,这里最可能的问题是,在数据集中,只有2个或更少的唯一值作为目标

通常,数据集的11和14元素非常小。我强烈建议不要在这样的规模上训练ML模型。如果你真的想用很少的训练样本来检验你的模型有多好,你应该做完全的漏掉一个交叉验证(即,用同样的方法训练一个模型,而不只是一个例子,并在这个例子上测试结果模型)。如果结果对您有利(但很可能不会),那么您可以在完整的数据集上训练模型并使用该模型

相关问题 更多 >