XGBoostError:参数num_class的值0应该大于等于1

问题描述 投票:0回答:1

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

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:参数num_class的值0应该大于等于1

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

有人知道问题出在哪里吗?任何帮助表示赞赏!

python xgboost xgbclassifier
1个回答
0
投票

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

通常,数据集的11和14元素很小。我强烈建议不要在这种规模上训练ML模型。如果您想用很少的训练样本来真正检查模型的质量,则应该进行完全留一法的交叉验证(即,以相同的方式训练模型,而没有一个示例,并在该示例上测试结果模型) 。如果结果对您来说看起来不错(但很可能不会)-那么您可以在完整数据集上训练模型并使用该模型。

© www.soinside.com 2019 - 2024. All rights reserved.