0

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。

我想这与一些早期停止标准或一些学习率适应有关?有任何想法吗?

4

1 回答 1

0

通常,logloss 分数越低越好 - 而您似乎将更高的 logloss 分数解释为更好。

下图显示了单个正例的 Log Loss 贡献,其中预测概率范围从 0(完全错误的预测)到 1(正确的预测)。从向右的平缓向下倾斜可以明显看出,随着预测概率的提高,Log Loss 逐渐下降。但是,如果朝相反的方向移动,随着预测概率接近 0,Log Loss 会迅速上升。

对正确类别的概率估计损失对数

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

于 2020-02-23T22:12:27.090 回答