【问题标题】:XGBClassifier from xgboost gives different fits for different num_class parameters来自 xgboost 的 XGBClassifier 为不同的 num_class 参数提供了不同的拟合
【发布时间】:2020-02-24 08:08:45
【问题描述】:

我偶然发现如果我将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】:

    通常情况下,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

    【讨论】:

    • 感谢您的回答。在我实际的真实世界数据中,随着课程数量的增加,日志损失变得更好,它减少了。在我的玩具示例中,我看到相反的情况,在这种情况下日志丢失增加了。所以我没有误解它。实际的问题是为什么我通过简单地改变类的数量会得到不同的日志损失?!
    猜你喜欢
    • 2016-05-24
    • 2019-10-30
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2021-12-02
    • 2017-02-11
    • 2017-07-29
    • 2018-07-05
    相关资源
    最近更新 更多