1.什么是信息熵?
信息熵可描述为:一件事件发生给我们带来的平均信息量。 数学上描述为:事件发生所带来的信息量的期望,即事件发生可能出现结果的概率对所带来信息量的加权。
什么是信息量?如何理解信息量?如何定义信息量?
信息量可理解为一件事情发生所带来的信息的多少。
在考虑信息量非负的基础上,结合上述规则,可以确定信息量函数定义为: I n f o ( x ) = − l o g 2 p ( x ) Info(x) = -log_2p(x) Info(x)=−log2p(x)而信息熵则是对该事件发生所带来的信息量的期望,考虑事件发生所有产生的结果,有: H ( x ) = − ∑ i = n n p ( x ) l o g 2 p ( x ) H(x) = -\sum_{i=n}^{n}p(x)log_2{p(x)} H(x)=−i=n∑np(x)log2p(x)所以可以理解:当事件发生所产生的结果很少时,即确定性很高时,信息量很少,信息熵也很小(太阳升起)。而当事件发生不确定时,信息量提升,信息熵也升高,所以,信息熵可以描述不确定性。
ID3决策树算法的思想就是依靠于信息熵。即每在决策树中确定一个分支条件,该集合的不确定性应该降低,体现在信息熵上就是,整体信息熵在确定分支条件后,整体的信息熵应该大幅度降低,所以如何确定分支条件是ID3算法的核心。
信息增益就可理解为数据集在确定分支条件下,可获取信息的多少,即整体数据集不确定性下降的程度,体现在信息熵上,即信息熵下降的程度。
整体信息熵: H ( D ) = − ∑ k = 1 K p ( x i ) l o g 2 p ( x i ) H(D) = -\sum_{k=1}^{K}p(x_i)log_2p(x_i) H(D)=−k=1∑Kp(xi)log2p(xi)假设当前选定A特征为切分分值,则切分后数据集的信息熵就为各切分数据集的信息熵之和。
H ( D , A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ l o g 2 ∣ D i k ∣ ∣ D i ∣ H(D,A) = -\sum_{i=1}^{n}\frac {|D_i|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|} H(D,A)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣信息增益定义为: g ( D , A ) = H ( D ) − H ( D , A ) g(D,A)=H(D)-H(D,A) g(D,A)=H(D)−H(D,A)信息增益越大,则表示了在已知A特征下,数据的不确定性下降的最大,即数据边的越纯。
针对ID3算法缺点第三条,引入信息增益率来解决。
数据集D的信息熵定义在数据类别之上。条件信息熵定义在已知特征A后,划分的各子集的信息熵与子集占比加权之和。
信息增益率定义为:
g r a t i o = g ( D , A ) H A ( D ) g_{ratio}=\frac{g(D,A)}{H_A(D)} gratio=HA(D)g(D,A) H A ( D ) = − ∑ i = 1 N ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^{N}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=−i=1∑N∣D∣∣Di∣log2∣D∣∣Di∣其中Di为特征A取值为i时的集合。
相较于信息增益,信息增益率对特征取值较少的特征存在偏好。所以,C4.5在进行特征选择时,先是取高于信息增益率平均值的所有特征,然后取最高信息增益率的特征作为切分特征。
顾名思义,防止过拟合,主要有两个。
在树生成时,通过某些规则和条件停止生成。方法有:
由于是在训练过程进行剪枝,很可能会带来欠拟合。
在已生成的树上进行剪枝(悲观剪枝)。剪枝条件是:自下向上的进行节点聚合,判断该聚合是否会导致准确度的下降或上升(同错误率的上升或下降),若准确度上升,则进行剪枝。
CART树,全程为:Classification And Regression Tree。所以,即可用于分类,也可用于回归。
信息增益换为基尼指数。基尼指数代表了模型的不纯度,即基尼指数越小,数据越纯,越不乱。定义为:
G i n i ( D ) = ∑ k = 1 K ∣ D k ∣ ∣ D ∣ ( 1 − ∣ D k ∣ ∣ D ∣ ) = 1 − ∑ k = 1 K ( ∣ D k ∣ ∣ D ∣ ) 2 Gini(D) =\sum_{k=1}^{K}\frac{|D_k|}{|D|}(1-\frac{|D_k|}{|D|})=1-\sum_{k=1}^{K}(\frac{|D_k|}{|D|})^2 Gini(D)=k=1∑K∣D∣∣Dk∣(1−∣D∣∣Dk∣)=1−k=1∑K(∣D∣∣Dk∣)2 G i n i ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ G i n i ( D i ) Gini(D|A) = \sum_{i=1}^{n}\frac{|D_i|}{|D|}Gini(D_i) Gini(D∣A)=i=1∑n∣D∣∣Di∣Gini(Di)基尼指数表示了数据集中随机抽取两个样本,其类别标记不一致的概率。值越小,数据纯度越高,且偏向于特征值较多的特征,类似信息增益。可用于度量任何不均匀分布。当为二分类时,基尼指数为:
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)Gini指数与信息熵的差异:
H ( D ) = − ∑ k = 1 K p ( x i ) l o g 2 p ( x i ) ≈ ∑ k = 1 K p ( x i ) ( 1 − p ( x i ) ) H(D) = -\sum_{k=1}^{K}p(x_i)log_2p(x_i)\approx\sum_{k=1}^{K}p(x_i)(1-p(x_i)) H(D)=−k=1∑Kp(xi)log2p(xi)≈k=1∑Kp(xi)(1−p(xi))可以理解:基尼指数为熵模型的一阶泰勒展开。
使用和方差度量,对于任意特征A,在特征A中寻找切分点,得到基于A特征切分点划分的 D 1 D_1 D1和 D 2 D_2 D2,然后求出分别使得 D 1 D_1 D1和 D 2 D_2 D2均方差最小的切分点,同时该切分点满足 D 1 D_1 D1和 D 2 D_2 D2的和方差最小,对比所有可切分特征的和方差,选择最小的特征和切分点,作为当前分支策略。即求取下式:
min a , s [ min c 1 ∑ x i ∈ D 1 ( y i − c 1 ) 2 + min c 2 ∑ x 2 ∈ D 2 ( y i − c 2 ) 2 ] \min\limits_{a,s}\Bigg[\min\limits_{c_1}\sum\limits_{x_i \in D_1}(y_i-c_1)^2 + \min\limits_{c_2}\sum\limits_{x_2 \in D_2}(y_i-c_2)^2\Bigg] a,smin[c1minxi∈D1∑(yi−c1)2+c2minx2∈D2∑(yi−c2)2]式中, c 1 c_1 c1为 D 1 D_1 D1子集 A A A特征的均值, c 2 c_2 c2为 D 2 D_2 D2子集 A A A特征的均值。
CART树采用代价复杂度剪枝算法,这可以理解为一种枚举算法。从最开始的一棵完整树,通过一种成本复杂度的度量准则决定某些节点可以被一个类别叶结点所代替,最后只剩下包含全部数据的单个结点时停止。
代价复杂度算法需要一个测试集来计算所有树的损失,选择分类性能最佳的树作为最优树进行返回。
问题:如何确定 α \alpha α的值?如何进行剪枝?如何判断该分支该不该减?
根据李航《统计机器学习》中的内容判定,对于当前树中的某一子树的根节点,有: C α ( T ) = C ( T t ) + α ∣ T ∣ C_\alpha(T)=C(T_t)+\alpha|T| Cα(T)=C(Tt)+α∣T∣把该子树剪掉后(被剪枝子树上的节点剪枝后全部分布在该子树根节点),有损失: C α ( t ) = C ( t ) + α C_\alpha(t)=C(t)+\alpha Cα(t)=C(t)+α剪枝后,树模型复杂度下降,但是准确度变化情况不得而知(即损失第一项),那么如何判断该分支该不该剪?
上述两式肯定存在有 C α ( T ) ≥ C ( t ) ∣ ∣ C α ( T ) ≤ C ( t ) C_\alpha(T) \geq C(t)||C_\alpha(T) \leq C(t) Cα(T)≥C(t)∣∣Cα(T)≤C(t)即肯定存在一点,使得 C α ( T ) = C ( t ) C_\alpha(T) = C(t) Cα(T)=C(t)可以解得: α = C ( t ) − C α ( T t ) ∣ T t ∣ − 1 \alpha= \frac{C(t)-C_\alpha(T_t)}{|T_t|-1} α=∣Tt∣−1C(t)−Cα(Tt)如何理解此时 α \alpha α的作用?
当 α \alpha α取上式时,可以认为,当前子树剪枝或不剪给模型带来的损失一样,即可认为当前 α \alpha α是一阈值,当 α \alpha α增大时,不剪枝带来的损失大于剪枝后的损失,即可以将上式变为: g ( t ) = C ( t ) − C α ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C_\alpha(T_t)}{|T_t|-1} g(t)=∣Tt∣−1C(t)−Cα(Tt)即当 α \alpha α取值超过 g ( t ) g(t) g(t)时,就对该子树剪枝。
即,对于某棵树,其 α \alpha α是一样的,当 α \alpha α逐渐增加时,肯定超过了某棵子树或节点的 g ( t ) g(t) g(t)值,但还没有超过其它节点的 g ( t ) g(t) g(t)值。该 α \alpha α逐渐增大后,最终只剩下一个节点的树,则表示剪枝完成,然后使用一个测试集测试所有树的误差,保留误差最小的树作为最终树。
采用替代划分处理缺失值。
采取了一种先验机制,想当与对数据进行加权,在CART分类策略中,需要计算每个节点中正负样本与根节点正负样本的比例的大小,想当与对数据进行加权。
即对于叶结点归属类别(假设为二分类),此时若有节点 N i N_i Ni: N i 1 N r o o t 1 > N i 0 N r o o t 0 \frac{N_{i}^{1}}{N_{root}^{1}}\gt\frac{N_{i}^{0}}{N_{root}^{0 }} Nroot1Ni1>Nroot0Ni0若上式满足时,则该节点 N i N_i Ni可被分为1类。
描述 | 划分标准 | 使用场景 | 样本数据 | 样本特征 | 剪枝策略 |
---|---|---|---|---|---|
ID3 | 信息增益 | 分类 | 离散 | 特征单次使用 | 无 |
C4.5 | 信息增益率 | 分类 | 离散、连续 | 特征单次使用 | 悲观策略 |
CART | 基尼指数 | 分类、回归 | 离散、连续 | 多次重复使用 | 代价复杂度 |
李航 《统计机器学习》
各种百度、知乎资料,不一一列举了(杂乱)。