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。因此,问题似乎是由其他原因引起的。

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

4

1 回答 1

1

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

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

于 2020-06-06T02:24:50.153 回答