我偶然发现,如果将XGBClassifier的参数目标设置为multiclass并增加类数,则我的二进制数据集将变得更好。但是,与此同时,拟合需要更长的时间并消耗两倍的内存。
不幸的是,我无法为此行为创建玩具示例。但是在下面的示例中,对于不同的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,其中3我得到0.741,10我得到1.126。
我想这与某些早期停止标准或某种学习率适应有关吗?有什么想法吗?
答案 0 :(得分:0)
通常,logloss得分越低越好-而似乎您认为logloss得分越高越好。
下图显示了单个正例的对数损失贡献,其中预测概率范围从0(完全错误的预测)到1(正确的预测)。从向右平缓的向下倾斜可以明显看出,随着预测概率的提高,对数损失逐渐减少。但是,沿相反方向移动时,对数损耗会随着预测概率接近0迅速上升。
因此,对于您的情况,具有num_class = 2将返回“最佳”对数损失得分,因为这是真实的类数。我建议使用此线程来进一步阅读日志丢失分数-https://stats.stackexchange.com/questions/276067/whats-considered-a-good-log-loss