R语言中分类算法-决策树算法(学习笔记)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

R语⾔中分类算法-决策树算法(学习笔记)
决策树算法
⼀、信息增益
信息增益(Kullback–Leibler divergence)⼜叫做information divergence,relative entropy
或者KLIC。

在概率论和信息论中,信息增益是⾮对称的,⽤以度量两种概率分布P和Q的差异。

信息增益描述了当使⽤Q进⾏编码时,再使⽤P进⾏编码的差异。

通常P代表样本或观察值的分布,也有可能是精确计算的理论分布。

Q代表⼀种理论,模型,描述或者对P的近似。

P到Q的信息增益(注意,信息增益是要讲⽅向的,以下公式的计算是从P到Q的信息增
益),公式定义为:
在信息增益中,衡量标准是看特征能够为分类系统带来多少信息,带来的信息越多,该特
征越重要。

对⼀个特征⽽⾔,系统有它和没它时信息量将发⽣变化,⽽前后信息量的差值就是
这个特征给系统带来的信息量。

所谓信息量,就是熵。

假如有变量X,其可能的取值有n种,每⼀种取到的概率为Pi,那么X的熵就定义为
⼆、信息熵
信息熵的概念来描述信源的不确定度。

⼀个信源发送出什么符号是不确定的,衡量它可信息熵的概念来描述信源的不确定度。


以根据其出现的概率来度量。

概率⼤,出现机会多,不确定性⼩;反之就⼤。

的单调递降函数;两个独⽴符号所产⽣的不确定性应等于各⾃不不确定性函数f是概率P的单调递降函数;
确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。

同时满⾜这两个条件的函数f 。

是对数函数,即。

在信源中,考虑的不是某⼀单个符号发⽣的不确定性,⽽是要考虑这个信源所有可能发⽣
情况的平均不确定性。

若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各
种符号的出现彼此独⽴。

这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均
值(E),可称为信息熵,即,式中对数⼀般取2为底,单位为⽐特。

但是,也可以取其它
对数底,采⽤其它相应的单位,它们间可⽤换底公式换算。

三、决策树
(⼀)决策数定义
决策树(decision tree)是⼀个树结构(可以是⼆叉树或⾮⼆叉树)。

其每个⾮叶节点表⽰
⼀个特征属性上的测试,每个分⽀代表这个特征属性在某个值域上的输出,⽽每个叶节点存放
⼀个类别。

使⽤决策树进⾏决策的过程就是从根节点开始,测试待分类项中相应的特征属性,
并按照其值选择输出分⽀,直到到达叶⼦节点,将叶⼦节点存放的类别作为决策结果。

(⼆)决策数的构造
决策树的构造就是进⾏属性选择度量确定各个特征属性之间的拓扑结构。

构造决策树的关
键步骤是分裂属性。

所谓分裂属性就是在某个节点处按照某⼀特征属性的不同划分构造不同的
分⽀,其⽬标是让各个分裂⼦集尽可能地“纯”。

尽可能“纯”就是尽量让⼀个分裂⼦集中待分类项
属于同⼀类别。

分裂属性分为三种不同的情况:
1、属性是离散值且不要求⽣成⼆叉决策树。

此时⽤属性的每⼀个划分作为⼀个分⽀。

2、属性是离散值且要求⽣成⼆叉决策树。

此时使⽤属性划分的⼀个⼦集进⾏测试,按照“属于此⼦集”和“不属于此⼦集”分成两个分⽀。

3、属性是连续值。

此时确定⼀个值作为分裂点split_point,按照>split_point和
<=split_point⽣成两个分⽀。

属性选择度量是⼀种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分属性选择度量
成个体类的启发式⽅法,它决定了拓扑结构及分裂点split_point的选择。

属性选择度量算法有很多,⼀般使⽤⾃顶向下递归分治法,并采⽤不回溯的贪⼼策略。

四、ID3算法
以ID3算法的核⼼思想就是以信息增益度量属性选择,选择分裂后信息增益最⼤的属性进⾏分裂。

设D为⽤类别对训练元组进⾏的划分,则D的熵(entropy)表⽰为:
其中pi表⽰第i个类别在整个训练元组中出现的概率,可以⽤属于此类别元素的数量除以训练元组元素总数量作为估计。

熵的实际意义表⽰是D中元组的类标号所需要的平均信息量。

现在我们假设将训练元组D按属性A进⾏划分,则A对D划分的期望信息为:
⽽信息增益即为两者的差值:
算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最⼤的属性进 ID3算法
⾏分裂。

下⾯我们继续⽤SNS社区中不真实账号检测的例⼦说明如何使⽤ID3算法构造决策树。

为了简单起见,我们假设训练集合包含10个元素:
其中s、m和l分别表⽰⼩、中和⼤。

设L、F、H和R表⽰⽇志密度、好友密度、是否使⽤真实头像和账号是否真实,下⾯计算各属性的信息增益。

=info(D)-infoL(D)
因此⽇志密度的信息增益是0.276。

⽤同样⽅法得到H和F的信息增益分别为0.033和0.553。

因为F具有最⼤的信息增益,所以第⼀次分裂选择F为分裂属性,分裂后的结果如下图表⽰:
在上图的基础上,再递归使⽤这个⽅法计算⼦节点的分裂属性,最终就可以得到整个决策树。

上⾯为了简便,将特征属性离散化了,其实⽇志密度和好友密度都是连续的属性。

对于特征属性为连续值,可以如此使⽤ID3算法:
先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第⼀个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最⼩期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

四、C4.5算法
ID3算法存在⼀个问题,就是偏向于多值属性,例如,如果存在唯⼀标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类⼏乎毫⽆⽤处。

ID3的后继算法C4.5使⽤增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。

⽤分裂信息度量来考虑某种属性进⾏分裂时分⽀的数量信息和尺⼨信息,我们把这些信息称为属性的内在信息(instrisic information)。

信息增益率⽤信息增益/ 内在信息,会导致属性的重要性随着内在信息的增⼤⽽减⼩(也就是说,如果这个属性本⾝不确定性就很⼤,那我就越不倾向于选取它),这样算是对单纯⽤信息增益有所补偿。

“分裂信息”,其定义可以表⽰成:
其中各符号意义与ID3算法相同,然后,增益率被定义为:
C4.5算法选择具有最⼤增益率的属性作为分裂属性,其具体应⽤与ID3类似,不再赘述。

算法步骤如下:
五、CART算法
CART算法是⼀种⼆分递归分割技术,把当前样本划分为两个⼦样本,使得⽣成的每个⾮叶⼦结点都有两个分⽀,因此CART算法⽣成的决策树是结构简洁的⼆叉树。

由于CART算法构成的是⼀个⼆叉树,它在每⼀步的决策时只能是“是”或者“否”,即使⼀个feature有多个取值,也是把数据分为两部分。

在CART算法中主要分为两个步骤:
、决策树⽣成:基于训练数据集⽣成决策树,⽣成的决策树要尽量⼤;
1、决策树⽣成:
2、决策树剪枝:
、决策树剪枝:⽤验证数据集对已⽣成的树进⾏剪枝并选择最优⼦树,这时损失函数最⼩作为剪枝的标准。

对分类树⽽⾔,CART⽤Gini系数最⼩化准则来进⾏特征选择,⽣成⼆叉树。

CART⽣成算法如下:
输⼊:训练数据集D,停⽌计算的条件:
输出:CART决策树。

根据训练数据集,从根结点开始,递归地对每个结点进⾏以下操作,构建⼆叉决策树:
1、设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。

此时,对每⼀个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1和D2两部分,计算A=a时的Gini系数。

2、在所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最⼩的特征及其对应的切分点作为最优特征与最优切分点。

依最优特征与最优切分点,从现结点⽣成两个⼦结点,将训练数据集依特征分配到两个⼦结点中去。

3、对两个⼦结点递归地调⽤步骤l~2,直⾄满⾜停⽌条件。

4、⽣成CART决策树。

算法停⽌计算的条件是结点中的样本个数⼩于预定阈值,或样本集的Gini系数⼩于预定阈值(样本基本属于同⼀类),或者没有更多特征。

其中pi表⽰A中类别i的概率
的概率,当Gini(A)=0时,所有样本属于同类,所有类在节点中以等概率出现时,Gini(A) 最⼤化,此时。

GiniF(A)=|A1|/A*Gini(A1)+|A2|/A*Gini(A2)
对于离散值如{x,y,z},则在该属性上的划分有三种情况:({{x,y},z},{{x,z},y},{{y,z},x}),空集和全集的划分除外。

对于连续值处理引进“分裂点”的思想,假设样本集中某个属性共n个连续值,则有n-1个分裂点,每个”分裂点”为相邻两个连续值的均值([a[i]+a[i+1]])/2.
取最⼩的Gini_gain值,即Gini的增益最⼩。

相关文档
最新文档