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

XGBoostError: value 0 for Parameter num_class should be greater equal to 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: value 0 for Parameter num_class should be greater equal to 1

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

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

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

一般11和14个元素的数据集很小。我强烈建议不要以这种规模训练 ML 模型。如果你真的想用很少数量的训练样本检查你的模型有多好,你应该做完整的留一法交叉验证(即以相同的方式训练一个模型而没有一个例子并在该例子上测试生成的模型) .如果结果看起来对您有利(但很可能不会)- 那么您可以在完整数据集上训练模型并使用该模型。