决策树学习小记
Posted Facico
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决策树学习小记相关的知识,希望对你有一定的参考价值。
决策树
类型
- ID3
- C4.5
- CART(回归树)
优缺点
优点:计算复杂度不高,输出易于理解,对缺失值不敏感,可以处理不相关特征数据
缺点:可能会产生过度匹配问题,过拟合
使用数据类型:数值型和布尔型
香农熵(信息熵)
熵定义为信息的期望值,表示信息的无序程度
变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也越大
l
(
x
i
)
=
−
l
o
g
2
p
(
x
i
)
l(x_i)=-log_2p(xi)
l(xi)=−log2p(xi)
H = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i ) H=-\\sum_i=1^np(x_i)log_2p(x_i) H=−i=1∑np(xi)log2p(xi)
l(x)表示信息x的定义,p(x)表示x的出现概率, p ( x i ) l o g 2 p ( x i ) p(x_i)log_2p(x_i) p(xi)log2p(xi)是信息 x i x_i xi的熵(信息量的期望),H是总信息的熵
经验熵
-
举个例子:我们要区分什么是鱼
有很多数据:不浮出水可以生存,有脚蹼,是鱼;不浮出水可以生存,无脚蹼,不是鱼…等等
不浮出水是否生存和有无脚蹼就是判断依据,是不是鱼就是目标信息(bool型)
经验熵就是对目标信息计算香农熵
条件熵
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) p i = P ( X = x i ) H(Y|X)=\\sum_i=1^np_iH(Y|X=x_i) \\qquad p_i=P(X=x_i) H(Y∣X)=i=1∑npiH(Y∣X=xi)pi=P(X=xi)
H(Y|X):X给定条件下Y的熵,如上X有n个分类,pi表示第i个分类在数据中的比例,H(Y|X=xi)表示第i个分类的数据在一起时的熵。
举个例子:现在数据被拆分成两个部分1和2,数据的比例分别为为p1,p2,数据的熵分别为h1,h2。那么按这个拆分的条件熵就是 p 1 ∗ h 1 + p 2 ∗ h 2 p1*h1+p2*h2 p1∗h1+p2∗h2
信息增益
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
目的是是g(D,A)最大,就是让熵减小的更多,就是在分类(拆分)后,熵的和最小
注意,这里的H都是经验熵
信息增益比(信息增益率)
s p l i t i n f o A ( S ) = − ∑ j = 1 v ∣ S j ∣ ∣ S ∣ l o g 2 ( ∣ S j ∣ ∣ S ∣ ) split_infoA(S)=-\\sum_j=1^v|S_j|\\over |S|log_2(|S_j|\\over |S|) splitinfoA(S)=−j=1∑v∣S∣∣Sj∣log2(∣S∣∣Sj∣)
split定义为分裂信息,上面求的就是S按照特征A的分类的熵, S i ( 1 ≤ i ≤ v ) S_i(1≤i≤v) Si(1≤i≤v)是样本即S在特征A上的划分,在v种不同的划分。可以发现这个也是熵,不过划分条件就不像是目标信息那样了,而是按照特征A的分类来算熵
信息增益率就是
G
a
i
n
R
a
t
i
o
(
A
)
=
G
a
i
n
(
A
)
s
p
l
i
t
i
n
f
o
A
(
S
)
Gain_Ratio(A)=Gain(A)\\over split_infoA(S)
GainRatio(A)=splitinfoA(S)Gain(A)
Gain(A)就是g(D,A),还是按A的分类来的经验熵
信息增益率简单来说就是 目 标 信 息 划 分 后 的 熵 ( 经 验 熵 ) 特 征 A 的 自 己 的 熵 目标信息划分后的熵(经验熵)\\over 特征A的自己的熵 特征A的自己的熵目标信息划分后的熵(经验熵)
信息增益与信息增益率区分
信息增益就相当于当前以分类A为基准,把其他的拆开,所能减少的熵,只是单向考虑熵(如果我每个都分成一类,熵肯定是最小的,所以没有考虑树枝的情况)
信息增益率:考虑了树枝的情况,就是把树枝的分支也算进了熵的计算里面,避免了分支太多的情况
如上H(A)就是信息增益率中考虑树的枝条的情况,作为分母可以理解成均摊到每个枝条的熵
基尼不纯度
- 定义:将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率
I G ( f ) = ∑ i = 1 n f i ( 1 − f i ) = ∑ i = 1 n ( f i − f i 2 ) = ∑ i = 1 n f i − ∑ i = 1 n f i i 2 = 1 − ∑ i = 1 n f i 2 I_G(f)=\\sum_i=1^nf_i(1-f_i)=\\sum_i=1^n(f_i-f_i^2)=\\sum_i=1^nfi-\\sum_i=1^nfi_i^2=1-\\sum_i=1^nf_i^2 IG(f)=i=1∑nfi(1−fi)=i=1∑n(fi−fi2)=i=1∑nfi−i=1∑nfii2=1−i=1∑nfi2
也能描述信息的无序程度,用于CART的分类
平方误差
∑ x i ∈ R m ( y i − f ( x i ) ) 2 \\sum_x_i\\in R_m(y_i-f(x_i))^2 xi∈Rm∑(yi−f(xi))2
yi表示正确结果,f(xi)表示学习之后的结果,一般f用Rm集合中的均值表示
算法框架
决策树主函
以上是关于决策树学习小记的主要内容,如果未能解决你的问题,请参考以下文章
机器学习决策树(划分选择算法流程剪枝处理,连续值与缺失值处理)
R语言使用party包中的ctree函数构建条件推理决策树的流程和步骤条件推理决策树是传统决策树的一个重要变体条件推理树的分裂是基于显著性测试而不是熵/纯度/同质性度量来选择分裂