我试图比较两种不同的功能集,将客户分为高价值、中价值和低价值。这是我使用的代码:
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。因此,问题似乎是由其他原因引起的
有人知道问题出在哪里吗?感谢您的帮助
原因是XGBoost是根据您提供的训练数据推断类的数量。对于
multi:softmax
,类的最小数量应该是3个(如果有2个类,那么应该使用二进制分类目标)。因此,这里最可能的问题是,在数据集中,只有2个或更少的唯一值作为目标通常,数据集的11和14元素非常小。我强烈建议不要在这样的规模上训练ML模型。如果你真的想用很少的训练样本来检验你的模型有多好,你应该做完全的漏掉一个交叉验证(即,用同样的方法训练一个模型,而不只是一个例子,并在这个例子上测试结果模型)。如果结果对您有利(但很可能不会),那么您可以在完整的数据集上训练模型并使用该模型
相关问题 更多 >
编程相关推荐