xgboost的XGBClassifier为不同的num_class参数提供了不同的拟合度

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

我意外地发现,如果将XGBClassifier的参数目标设置为多类并增加类数,则我的二进制数据集将变得更好。但是,与此同时,拟合需要更长的时间,并消耗两倍的内存。

很遗憾,我无法为此行为创建玩具示例。但是在下面的示例中,对于不同的num_class参数值,我仍然看到不同的对数损失:

X = DataFrame([[0.5, 0.2, 0.1], [0.3, 0.4, 0.1], [0.4, 0.1, 0.5], [0.8, 0.4, 0.4]])
y = Series([0, 0, 1, 1])

regressor = xgb.XGBClassifier(subsample=1, n_estimators=2, max_depth=4, objective="multi:softprob", num_class=4)

regressor.fit(X, y)

[num_class=2导致对数损失0.644,对于num_class=3我得到0.741,对于num_class=10我得到1.126。

我想这与某些早期停止标准或某种学习率适应有关吗?有什么想法吗?

python xgboost xgbclassifier
1个回答
0
投票

通常,logloss分数越低越好-而似乎您认为logloss分数越高越好。

下图显示了单个正实例的对数损失贡献,其中预测概率的范围从0(完全错误的预测)到1(正确的预测)。从向右平缓的向下倾斜可以明显看出,随着预测概率的提高,对数损失逐渐减小。但是,以相反的方向移动时,对数损失会随着预测的概率接近0而迅速增加。]<<

因此,对于您的情况,num_class = 2将返回“最佳”对数损失分数,因为这是真实的类数。我建议使用此线程来进一步阅读日志丢失分数-https://stats.stackexchange.com/questions/276067/whats-considered-a-good-log-loss

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