三种情况导致递归返回
第二种情况,把当前节点标记为叶节点,将其类别设定为该节点所含样本最多的类别
第三种情况,当前设为叶子节点,类别设为其父节点样本最多的类别
难点在第八行,即选择最优划分属性,一般而言我们希望随着划分的进行,分支节点所包含的样本尽可能属于同一类,即节点纯度越来越高
信息熵
假定当前样本集合D中第k类样本所占比例是Pk(k=1,2……y),则信息熵定义为
E n t ( D ) = − Σ k = 1 y p k l o g 2 p k Ent(D)=-\Sigma^y_{k=1} p_k log_2p_k Ent(D)=−Σk=1ypklog2pk
Ent(D)越小,D的纯度越高
信息增益
假定离散属性a有V个可能的取值 \({a^1 , a^2 …… a^V}\) 使用属性a对样本集D进行划分,则会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上取值为 \(a^v\) 的样本,记为 \(D^v\)
根据信息熵公式算出信息熵,再考虑到不同分支节点包含的样本数不同,给分支节点赋予权重\(|D^v|/|D|\),即样本数越多的分支节点的影响越大,于是得到信息增益公式
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) ( 1 ) Gain(D,a)=Ent(D)-\sum\limits_{v=1}^V \frac {|D^v|}{|D|}Ent(D^v) \qquad (1) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)(1)
一般而言,信息增益对俄大,则意味着使用属性a来进行划分所获得“纯度提升”越大,所以使用信息增益来进行最优划分属性选择。著名的ID3决策树算法就是以信息增益为准则来选择划分属性
实际上,信息增益准则对取值数目较多的属性有所偏好,为减少这种不利影响,著名C4.5决策树算法使用增益率选择最优划分属性,公式定义为
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D,a)=\frac {Gain(D,a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum^V_{v=1} \frac {|D^v|}{|D|} log_2 \frac{|D^v|}{|D|} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性a的固有值,属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大
需要注意的是,增益率准则对于可取值数目较少的属性有所偏好,所以C4.5算法并不是选择增益率最高的属性作为划分,而是采用一个启发式方法先从候选划分找出信息增益高于平均水平的属性,然后再选择增益率最高的
CART决策树使用基尼指数来选择划分属性,数据集D的纯度用基尼值来度量,
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ ≠ k p k p k ′ Gini(D)=\sum^{|y|}_{k=1}\sum_{k' \neq k}p_kp_{k'} Gini(D)=k=1∑∣y∣k′̸=k∑pkpk′
= 1 − ∑ k = 1 ∣ y ∣ p k 2 =1-\sum^{|y|}_{k=1}p^2_k =1−k=1∑∣y∣pk2
直观来说,基尼反映了从数据集中随机抽取两个样本,其类别标记不一致的概率,因此基尼越小,则数据集D的纯度越高,按照(1)式格式,得a属性的基尼指数为
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum^V_{v=1}\frac {|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
ID3算法采用信息增益作为最优属性划分选择,另外有个阈值,如果当前最优划分属性信息增益小于该阈值,则直接返回。
缺点:ID3算法只有树的生成,所以容易过拟合。另外还有一个缺点,就是上面提到的实际上,信息增益准则对取值数目较多的属性有所偏好
基本流程与ID3算法一致,不过采用信息增益率作为划分最优属性标准。统计上书上仅仅只是说以信息增益率划分标准。西瓜书上说增益率准则对于可取值数目较少的属性有所偏好,所以C4.5算法并不是选择增益率最高的属性作为划分,而是采用一个启发式方法先从候选划分找出信息增益高于平均水平的属性,然后再选择增益率最高的
(classification and regression tree CART)分类与回归树,主要两步组成
回归树使用平方误差最小化准则,分类用基尼指数最小化准则
这里要重点看!!!,因为最原始的gbdt是基于回归树来说明的
我们用CART算法来说明一颗回归树的生成过程,这是回归树算法流程
直接看算法不太容易看懂,我们来举一个例子进行理解
假设我们有训练数据如下,目标是得到一颗最小二乘回归树
接下来考虑9个切分点[1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5],损失函数定义为\(Loss=(y,f(x))=(f(x)-y)^2\),将9个切分点一一代入下个式子,其中\(c_m=ave(y_i|x_i \in R_m)\)(即我们通过切割点将数据集分为两部分,每部分我们的预测值就是这一部分所有样本取值的平均值)
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1} \sum_{x_i \in R_1(j,s)}(y_i -c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
例如我们取s=1.5,R1={1},R2={2,3,4,5,6,7,8,9,10},这两个区域的输出值分别是
c1=5.56,c2=1/9(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.50,得到下表
>
将以上各个c1 c2带入平方误差损失函数可得下表
显然s=6.5是,m(s)最小,因此第一个划分变量是j=x,s=6.5
用选定的(j,s)对数据进行划分,并决定输出值。目前我们分的两个区域分别是R1={1,2,3,4,5,6},R2={7,8,9,10}输出值 \(c_m=ave(y_i|x_i \in R_m)\) ,c1=6.24,c2=8.91,对两个子区域继续重复上述步骤,直到满足停止条件(如限制深度或叶子结点个数)
可以看出我们每次划分最优属性与最优切割点,都需要遍历所有属性,所有切割点,所有训练样本,这一步骤是很耗时的
基尼指数(感觉这里,统计比西瓜讲得要好)
定义:分类问题中,假设有K个类,样本点属于地k类的概率为pk,则概率分布的基尼指数定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum^K_{k=1}p_k(1-p_k)=1-\sum^K_{k=1}p_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,假设样本点属于第一个类的概率是p,则概率分布的基尼指数为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1−p)
对于给定的样本集合,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum^K_{k=1}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
这里Ck是D中属于第k类的样本子集,K是类别个数,这个式子与上面基尼指数是一样的意思
重要!!
入股样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分,则在特征A的条件下,集合D的基尼指数定义为
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基本流程
与之前讨论树的不一样地方在于,之前都是划分属性,现在是根据属性中的某一个取值与否作为划分,即只能二叉分
剪枝是决策树学习算法对付过拟合的主要手段
两者对比
属性是连续值,采用二分法对连续属性进行处理,这正是C4.5决策苏算法采用的机制
假定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大排序,记为 \({a1,a2……,a^n}\) ,基于划分点t将D分为两部分,一部分大于t一部分小于等于t。对于连续值属性,对相邻的属性取值ai与ai+1l来说,t在区间[ai,ai+1)的划分结果相同,所以产生n-1个划分点集合
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a=\{\frac {a^i+a^{i+1}}{2} | 1 \leq i \leq n-1\} Ta={2ai+ai+1∣1≤i≤n−1}
**与离散值不同的是,若当前节点划分属性为连续属性,该属性还可作为其后代节点的划分属性 **
需要解决两个问题
先来解决第一个问题
给定训练集D和属性a,令 \(D^-\) 表 示D中属性a没有缺失值的样本子集,对于问题1,显然我们仅可根据 \(D^-\)判断属性a的优劣。假设属性a有V个可取值 \(a^1 , a^2…… a^V\)
令 \(D^{-v}\) 表示 \(D^-\) 在属性a上取值为\(a^v\)的样本子集
\(D^-_k\) 表示 \(D^-\) 中属于第k类(k=1,2……,|y|)的样本子集
假定我们为每一个样本x赋予一个权重 \(w_x\) ,并定义
ρ = Σ x ∈ D − w x Σ x ∈ D w x \rho = \frac {\Sigma_{x \in D^- }w_x}{\Sigma_{x \in D}w_x} ρ=Σx∈DwxΣx∈D−wx
p k − = Σ x ∈ D k − w x Σ x ∈ D − w x ( 1 ≤ k ≤ ∣ y ∣ ) p^-_k=\frac {\Sigma_{x \in D^-_k}w_x}{\Sigma_{x \in D^-}w_x} \qquad (1 \leq k \leq |y|) pk−=Σx∈D−wxΣx∈Dk−wx(1≤k≤∣y∣)
r v − = Σ x ∈ D k − w x Σ x ∈ D − w x ( 1 ≤ k ≤ V ) r^-_v=\frac {\Sigma_{x \in D^-_k}w_x}{\Sigma_{x \in D^-}w_x} \qquad (1 \leq k \leq V) rv−=Σx∈D−wxΣx∈Dk−wx(1≤k≤V)
基于上述定义,我们将信息增益的计算式推广为,
G a i n ( D , a ) = ρ ∗ G a i n ( D − , a ) Gain(D,a)=\rho *Gain(D^-,a) Gain(D,a)=ρ∗Gain(D−,a)
= ρ ∗ ( E n t ( D − ) − ∑ v = 1 V r v − E n t ( D − v ) ) =\rho *(Ent(D^-)-\sum^V_{v=1}r^-_vEnt(D^-v)) =ρ∗(Ent(D−)−v=1∑Vrv−Ent(D−v))
E n t ( D − ) = − ∑ k = 1 ∣ y ∣ p k − l o g 2 p k − Ent(D^-)=-\sum^{|y|}_{k=1}p^-_klog_2p^-_k Ent(D−)=−k=1∑∣y∣pk−log2pk−
解决第二个问题
划分属性是a,样本x在属性a的取值未知,则将x同时划入所有子节点,且样本权值在属性值a v对应的子节点调整为\(r^-_v*w_x\),直观的看,就是让同一个样本以不同的概率划入到不同子节点中去