Python与机器学习——决策树
作者:互联网
决策树
理论基础
决策树是建立在信息论的基础上的,决策树的生成就是让数据的"不确定性"减少越多越好,意味着划分能获得越多的信息。信息的不确定性可以用信息熵和基尼指数来描述。
信息熵
信息熵的定义其实也比较简单:
H(y)=k=1∑Kpklogpk(信息熵公式)对于具体的、随机变量来说,生成的数据集D={y1,...,yN},在实际计算信息熵可以用
H(y)=H(D)=−k=1∑K∣D∣∣Ck∣log∣D∣∣Ck∣(信息熵公式2)也就是假设y的取值空间为{c1,...,cK},pk表示y取ck的概率:pk=p(y=ck),∣Ck∣表示y取ck的样本个数,∣D∣表示总样本个数,∣D∣∣Ck∣表示的就是频率,使用了"频率估计概率"。
当p1=p2=...=pK=K1时候,H(y)达到了最大值−logK1也就是logK,意味着每个分类都是一样的,怎么区分全靠瞎蒙。让信息的不确定性减小,是能让分类清楚的条件。对于一个二分类问题的话,K=2,假设y只能取0,1。并且p(y=0)=p,p(y=1)=1−p,那么信息熵也就是:
H(y)=−plogp−(1−p)log(1−p)log可以以2为低,也可以以e为底。总之,信息混乱程度越大,信息熵越大,信息量越大。
基尼指数
基尼指数的定义为:
Gini(y)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2(Gini指数)同样,对于实际信息来说,使用频率估计概率:
Gini(y)=Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2(Gini指数2)同样的,信息混乱程度越大,Gini指数越大,信息量越大。
信息增益
首先确定一些定义:数据集D={(x1,y1),...,(xN,yN)},其中xi=(xi(1),...,xi(n))T表示描述yi的n维特征向量,假设特征叫A,那么D={(A1,y1),...,(AN,yN)}。引入条件熵的概念,根据特征A的不同取值{a1,...,am}对y进行限制y=yk,对y=yk的部分计算信息熵并加权平均,得到条件熵H(y∣A)。条件熵越小,意味着y被A限制后的总的不确定性越小。数学定义为:
H(y∣A)=j=1∑mp(A=aj)H(y∣A=aj)(条件熵)其中:
H(y∣A=aj)=−k=1∑Kp(y=ck∣A=aj)logp(y=ck∣A=aj)经验条件熵估计真正条件熵的公式:
H(y∣A)=H(y∣D)=j=1∑m∣D∣∣Dj∣k=1∑K∣Dj∣∣Djk∣log∣Dj∣∣Djk∣Dj表示在A=aj限制下的数据集,∣Djk∣表示Dj中的第k类样本的个数。信息增益就可以表示为
g(y,A)=H(y)−H(y∣A)(信息增益(互信息量))也叫互信息量。决策树种ID3就是用这个指标来选择特征的。但是天然地,这样会优先选择取值比较多的特征,对于这样的情况,给取值比较多的一个惩罚使用信息增益比来计算,也就是C4.5的概念:
gR(y,A)=HA(y)g(y,A)(信息增益比)其中:
HA(y)=−j=1∑mp(yA=aj)logp(yA=aj)对于基尼指数,是差不多的原理:
Gini(y∣A)=1−j=1∑m∣D∣∣Dj∣k=1∑K(∣D∣∣Dj∣)2信息增益表示为:
gGini(y,A)=Gini(y)−Gini(y∣A)CART种就是这种定义。
#决策树生成
决策数生成可以概括为2步:
- 将样本空间划分为若干个互不相交的子空间;
- 给每个子空间贴一个标签。
常用的决策树算法有ID3,C4.5,CART。
- ID3可以说是最朴素的决策树算法,是离散数据分类的解决方案。
- C4.5适用于混合型数据分类。
- CART可解决数据回归问题。
ID3
ID3是Interactive Dichotomiter-3,交互式二分法。
假设有数据集D={(x1,y1),...,(xN,yN)}。ID3的算法处理伪代码过程为:
(1) 将数据喂给一个节点;
(2) 若D中所有样本同属一个类别,则节点不再继续生成,标记为k类;
(3) 若样本已经是0维向量,则将这时的D中样本个数最多类别k类作为这个节点的类别输出;
(4)否则,按照互信息定义的信息增益:
g(y,x(j))=H(y)−H(y∣x(j))来计算第j维特征的信息增益,然后选择使得信息增益最大的特征作为划分标准
y∗=argjmaxg(y,x(j))(5) 若满足停止条件,则不再继续生成并将此时的D中样本中个数最多的类别的k类作为类别标记
(6) 否则,依x(j∗)的所有可能取值{a1,...,am}将数据集划分为{D1,...,Dm}使:
(xi,yi)∈Dj⇔xi(j∗)=aj,∀i=1,...,N同时,将x1,...,xN的第j∗维去掉,使他们成为n-1维特征向量。
(7) 对每个Dj从(1)开始调用算法。
对于(5)中的停止条件,常用的有:
- 选择x(j∗)作为特征时,信息增益g(y,x(j∗))任然很小,则停止;
- 事先把数据集分为训练集和测试集,训练集得到的x(j∗)不能再测试集熵的错误率更小,则停止。
C4.5
ID3是使用信息增益的最大特征作为当前特征选择的依据,但是这样就特别容易选择特征的值比较多的一个特征,比如特征F1可能的选择值有100个,而特征F2只有3个,那么选择F1的概率就比F2高,这样是不合理的。C4.5就是使用了信息增益比来选择特征的。所以C4.5可以处理ID3算法比较难处理的混合型数据。
原理上来讲,只需要将ID3的第(4)点替换为:
(4) 否则,按照信息增益比的定义:
gR(y,x(j))=Hx(j)(y)g(y,x(j))来计算第j维特征的信息增益比,然后选择使得信息增益最大的特征作为划分标准,也就是:
j∗=argjmaxgR(y,x(j))混合型数据处理最主要的内容就是处理连续特征。可以简单转化为一个二分问题,
Y1={y:yA<a1},Y2={y:yA⩾a1}也就是:
A={a1,a2},Y1={y:yA=a1},Y2={y:yA=a2}a1就是一个二分标准,确定二分标准的方法为:
- 若x(j)在当前数据集有m个取值,为u1,...,um,并且u1<...<um依次选v1,...,vp作为二分标准,并选择最好的一个,其中v1−vp构成等差数列,u1=v1,um=vp。p的选择试情况而定。如果数据不均衡时候可能有不合理的情况。还有一种确定二分标准的方式.
- 依次选择v1=2u1+u2,...,vm1=2vm−1+vm作为二分标准,并计算信息增益比,选择最优的一个。
CART
CART是Classification and Regression Tree, 分类与回归树。所以CART能做分类与回归问题。CART是使用Gini增益比来选择特征的,它的特色是假设了最终生成的树为二叉树,所以在处理离散数据时候也会通过决出二分标准来划分数据。
将ID3算法的第(4)点替换为:
(4) 否则,不妨设x(j)在当前数据集中有Sj个取值u1(j),...,uSj(j),并且u1(j)<...<uSj(j),那么:
a)若x(j)是离散变量,依次选择u1(j)<...<uSj(j)作为二分标准ap,此时:
Ajp={x(j)=ap,x(j)=ap}
b)若x(j)是连续变量,依次选择2u1+u2,...,2vm−1+vm作为二分标准ap,此时:
Ajp={x(j)<ap,x(j)⩾ap}按照基尼系数的定义增益增益:
gGini(y,Ajp)=Gini(y)−Gini(y∣Ajp)来计算第j维特征在二分标准下的信息增益,选择使得信息增益最大的特征x(y∗)和相应的二分标准up∗(j∗)作为划分标准:
(j∗,p∗)=argj,pmaxgGini(y,Ajp)回归问题暂且不表。
代码实现
参考git repo:Python_and_ML:03DT
sinat_18131557 发布了27 篇原创文章 · 获赞 3 · 访问量 3167 私信 关注标签:...,Gini,机器,log,Python,aj,增益,frac,决策树 来源: https://blog.csdn.net/sinat_18131557/article/details/104138657