美文网首页
xgboost 做多分类的实现

xgboost 做多分类的实现

作者: bamuyy | 来源:发表于2019-12-04 16:06 被阅读0次
    1. 多分类的情况下,相当于树有多个输出,假设有 K 个类,那么最终会有 K 个输出。内部实现就是一次迭代是 K 个树,每个树只输出类 K_i 的概率即可,然后通过所有 K_i 进行 softmax, 求最终的概率
      a) 多分类 w_1, w_2, ...., w_k初始化的时候, 都设置为 0.
      b) 如果是二分类的话, 初始值为 a_0, 且 sigmoid(a_0) = p(正类)

    2. 最终的损失函数多分类的交叉墒值, 损失和 w_1, w_2, ... w_k 相关。
      具体过程是:
      w_i \rightarrow p_i = softmax(w_i)
      L = -\sum_i y_iln(p_i)

    3 求解的时候, 对于每一轮迭代 t, 假设前面已经有了 (t-1)*K 颗树,分别对于 t-1 颗树对 K 个类别的预测。现在求 w_{tk} 的树。 用 L 对 w_{tk} 求导即可

    4 具体的求导过程见 https://github.com/dmlc/xgboost/blob/release_0.72/src/objective/multiclass_obj.cc
    这个文件,但是奇怪的是: 二阶导数乘了一个2, 不知道为啥。。。
    h = fmax(2.0f * p * (1.0f - p) * wt, eps);
    基于如下的考虑:
    https://homes.cs.washington.edu/~tqchen/data/pdf/GBCRF-AISTATS15.pdf

    related :

    https://github.com/dmlc/xgboost/issues/1825

    简单而言: 在对 f(x + z) = f(x) + zf'(x) + 0.5z^2f''(x) + o(x^2)
    展开的时候, min ( f(x) + z
    f'(x) + 0.5z^2f''(x)) 不一定minize 了 f(x+z)
    因为 f(x) + zf'(x) + 0.5z^2f''(x) 不一定比 f(x +z) 小, 优化它没有用
    相反 f(x) + z
    f'(x) + z^2*f''(x) 则优化了 f(x+z) 的上界限, 间接求到最优解释。
    以上只针对 multi-loss 有效, 在 multi-loss 中 f''(x) 必定 > 0, 其余的场合不一定适合

    1. 有必要讲 category 类型转为 onehot 的吗?
      有必要的,会增加非线性表达能力。例如: category 1, 2, 3,
      切分点为 1.5, group(1) group(2, 3)
      or 2.5, group(1, 2) group(3)
      永远无法切出 group(1, 3) group(2) 这种效果,采用 onehot 是可以的。
      缺失值会根据情况放在 左边 或者 右边,不用额外考虑了

    2. split 的时候, feature 会重复使用吗?
      会的, 每次都会随机选 feature, 不会排除已经用过的 feature

    相关文章

      网友评论

          本文标题:xgboost 做多分类的实现

          本文链接:https://www.haomeiwen.com/subject/lnjlgctx.html