我意外地发现,如果将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。
我想这与某些早期停止标准或某种学习率适应有关吗?有什么想法吗?
通常,logloss分数越低越好-而似乎您认为logloss分数越高越好。
下图显示了单个正实例的对数损失贡献,其中预测概率的范围从0(完全错误的预测)到1(正确的预测)。从向右平缓的向下倾斜可以明显看出,随着预测概率的提高,对数损失逐渐减小。但是,以相反的方向移动时,对数损失会随着预测的概率接近0而迅速增加。]<<
因此,对于您的情况,num_class = 2将返回“最佳”对数损失分数,因为这是真实的类数。我建议使用此线程来进一步阅读日志丢失分数-https://stats.stackexchange.com/questions/276067/whats-considered-a-good-log-loss