-
多分类的情况下,相当于树有多个输出,假设有 K 个类,那么最终会有 K 个输出。内部实现就是一次迭代是 K 个树,每个树只输出类 的概率即可,然后通过所有 进行 softmax, 求最终的概率
a) 多分类 初始化的时候, 都设置为 0.
b) 如果是二分类的话, 初始值为 , 且 sigmoid() = p(正类) -
最终的损失函数多分类的交叉墒值, 损失和 相关。
具体过程是:
3 求解的时候, 对于每一轮迭代 t, 假设前面已经有了 (t-1)*K 颗树,分别对于 t-1 颗树对 K 个类别的预测。现在求 的树。 用 L 对 求导即可
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) + zf'(x) + 0.5z^2f''(x)) 不一定minize 了 f(x+z)
因为 f(x) + zf'(x) + 0.5z^2f''(x) 不一定比 f(x +z) 小, 优化它没有用
相反 f(x) + zf'(x) + z^2*f''(x) 则优化了 f(x+z) 的上界限, 间接求到最优解释。
以上只针对 multi-loss 有效, 在 multi-loss 中 f''(x) 必定 > 0, 其余的场合不一定适合
-
有必要讲 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 是可以的。
缺失值会根据情况放在 左边 或者 右边,不用额外考虑了 -
split 的时候, feature 会重复使用吗?
会的, 每次都会随机选 feature, 不会排除已经用过的 feature
网友评论