xgboost可以处理的特征属性:

输入值可能有连续属性、二元属性、标称属性(类型比二元多)、序数属性(衣码小中大号等)

2. 模型训练1:树的分叉

刚读xgboost原理 https://arxiv.org/pdf/1603.02754.pdf 的时候会有困惑,为什么2.2小节能够同时得到树的结构和书的权值,实际上是先通过3节讲的树的分裂得到树结构,然后才有公式(4)的演进。

传统决策树举例:

CART选择Gini系数划分树杈,Gini系数代表不纯度, 为0时称作0不纯度,用来将样本进行分类后度量不纯度,选取不纯度小的分杈方法,CART用二分法来规避分叉过多带来的零不纯度。

Gini(t)=1-\sum_{0}^{c}{p(i)}^2


评价函数eval_metric: Logloss=-(ylog(p)+(1-y)log(1-p)) ,代入sigmoid函数如下:

Logloss(y_i,\widehat{y_i})=(y_iln(1+e^{-\widehat{y_i}})+(1-y_i)log(1+e^{\widehat{y_i}}))

一阶导数 g_i=\partial_{y_i^{(t-1)}}l(y_i,{\hat{y}}_i^{(t-1)})=-y_i(1-\frac{1}{1+e^{-{\hat{y}}_i^{t-1}}})+(1-y_i)\frac{1}{1+e^{-{\hat{y}}_i^{t-1}}}=P_i^{t-1}-y_i

二阶导数 h_i=\partial_{y_i^{(t-1)}}^2l(y_i,{\hat{y}}_i^{(t-1)})=\ \frac{e^{-{\hat{y}}_i^{t-1}}}{\left(1+e^{-{\hat{y}}_i^{t-1}}\right)^2}=P_i^{t-1}(1-P_i^{t-1})

分类器输出: https://blog.csdn.net/u014033218/article/details/90516849

binary:logistic和 'objective': 'reg:logistic'的输出是一样的,都是预测的概率

binary:logitraw是输出的得分,用sigmoid()函数处理后就和上述两个概率值一致

XGBClassifier里就是把预测的概率值,取阈值0.5,小于这个值的为0,大于这个值的为1,

b.  多元分类器 multi:softmax:

目标函数softmax: p_i=\frac{e^{{\hat{y}}_i}}{\sum_{j}e^{{\hat{y}}_j}}

def softmax(x):    e =np.exp(x)   return e / np.sum(e)

求导: \partial_{y_i}p(y_i)=p_i.(1-p_i)\ i=j ;

\partial_{y_i}p(y_i)=-p_i.p_j\ i\neq j

评价函数mlogloss: logloss=-\frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{M}{y_{ij}log(p_{i,j})}

只针对第i个样本可以得到 logloss=-\sum_{}{y_{j}log(p_{j})}

N:样本数; M:类别数; y_{ij} :第i个样本属于分类j时为为1,否则为0;

p_{ij} :第i个样本被预测为第j类的概率  (平均为1/j), 即softmax输出的第j个layer

一阶导数: \frac{\partial logloss}{\partial{\hat{y}}_i}=\sum_{j}\frac{\partial logloss}{\partial p_j}.\frac{\partial p_j}{\partial{\hat{y}}_i}=\frac{\partial logloss}{\partial p_i}.\frac{\partial p_i}{\partial{\hat{y}}_c}+\sum_{j\neq i}\frac{\partial logloss}{\partial  p_j}.\frac{\partial p_j}{\partial{\hat{y}}_i}

=-{y_i.\frac{1}{p_i}.p}_i(1-p_i)+\sum_{j\neq i}{\frac{-y_j}{p_j}\left(-1\right).p_i.p_j=-}y_i+{y_ip}_i+\sum_{j\neq i}{y_j.p_i}=p_i-y_i

二阶导数: \frac{\partial^2logloss}{\partial^2{\hat{y}}_i}=p_i.(1-p_i)

代码: https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_softmax.py



多元分类输出: https://blog.csdn.net/phyllisyuell/article/details/81011660

我们这里以标签为0,1,2的三分类数据为例。

每个类别有独立的树,有对应的wjc, j是第几片叶子,c是第几个类别的树。

multi:softmax是使用softmax后产生的分类结果,输出为0,1,2。

multi:softprob是y通过softmax后输出的概率矩阵,输出的是n*3的概率矩阵(n为测试数据的条数)。

选取最大概率的赋予对应的类别eg[0.34,0.56,0.42],对应softmax类别1.

多元分类的泰勒展开:经过推导,改进这篇,多分类原理 https://www.jianshu.com/p/2698db68f2e7