码迷,mamicode.com
首页 > 编程语言 > 详细

决策树算法学习笔记

时间:2016-04-12 17:32:16      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

决策树算法

决策树的基本思想与人自身的决策机制很相似,都是基于树结构进行决策,即对于任何问题,我们都先抽出其中的几个主要特征,然后对这些特征一个一个的去考察,从而决定这个问题应该属于的类别。例如我们要去商场买电脑,我们一般要通过考察电脑的CPU,内存,硬盘,显存等这些特征来判断这台电脑是好电脑还是一般电脑,当我们做判断的时候,我们都是首先看这个电脑的CPU怎么样,是i3?i5?还是i7?如果是i7我们就有更大概率倾向于认为这台电脑是好电脑,然后我们再依次考察内存,硬盘,显存等,最终根据这些特征决定其性能的好坏。这样我们就可以构建出一颗决策树来:
技术分享
当然,对于不同的人,需求不同,所以对于特征考量的重要性也不同,例如经常玩儿游戏的人会更在乎显存,而经常看电影的则会更加在乎硬盘的大小,这时候由于其需求的不同,对于好电脑的定位也可能会不同,也会构建不同的树。因此决策树算法的核心在于如何选择特征从而构建出我们要想要的决策树从而能够更加通用的去进行分类。为了能够构建决策树,需要介绍特征选择算法,为了能够让构建的决策树更加通用,也就是泛化能力更强,需要介绍剪枝算法
变量定义:
D ——— 样本集合
pk ——— 在样本集合D中第k类样本所占的比例
Y ——— 样本类别集合

特征选择算法

熵与信息增益

在维基百科中,对熵的定义是这样的“entropy (more specifically, Shannon entropy) is the expected value (average) of the information contained in each message.”。我们可以知道熵是用来定义一条消息中所包含的的信息量的,即熵越大,信息量越大,熵越小,信息量越小。那么我们可以知道,如果一个消息中的信息大部分都属于同一个类别,即消息中的信息纯度很高,信息的确定性很大,信息不混乱的时候,信息量是很小的,这时候熵也是很小的;而如果一个消息中包含所有信息且这些信息是均匀分布的,即并没有那个信息占有主导,那么这时候我们可以认为消息中的信息的纯度是很低的,信息的不确定性很大,信息量也很大,因为其包含所有可能的信息,这时候熵应该是最大的。即信息的纯度越高,熵越大,纯度越低,熵越小。
集合 D 的熵定义为

H(D)=?k=1|Y|pklog2pk
通过该公式我们也可以看出,如果集合D中的信息纯度越高,确定性越大,熵越小;而信息纯度越低,确定性越小则熵越大。假设D中样本所涉及的问题是一个二分类问题,即|Y|=2,这时候H(D)=?|Y|k=1pklog2pk就可以展开为H(D)=?(p0log2p0+(1?p0)log2(1?p0)),那么我们可以知道当p0=0/1的时候,集合D的信息纯度最高,不确定性为0,所有的数据都属于同一个类别,此时熵取得最小值0;而当p0=0.5的时候,D的信息纯度最低,不确定性最高,因为所有可能类别的数据都是均匀分布的,即取任何类别的数据都有可能且可能性是相等的,这时候其熵取得最大值1

条件熵

H(D|A)=i=1npiH(D|A=ai)
是指当已知信息(属性)A的时候,其所包含的信息量,即在已知A的条件下,D中信息的纯度情况,不确定性的情况

信息增益(互信息)

Gain(D,A)=H(D)?H(D|A)
是指数据集D在已知条件A的情况下使得信息纯度提升的情况,即所包含信息不确定性减少的情况。通过该公式我们可以知道,当H(D|A)很小,即在已知条件A的时候,集合D的纯度很高,不确定性很小。也就是说由于A的确定使得使得集合D的纯度大幅度的提高,即A对数据分类的影响很大,不确定性急剧减小,是数据分类的主要影响因素;而当H(D|A)很大的时候,则正好相反,此时即使在已知A的条件下,数据集D依然非常混乱,纯度很低,那么我们可以认为属性A对于数据的分类影响很小。因此,在极端情况,即当H(D|A)=0的时候,说明当已知A时,数据集D纯度达到了最高,各个数据的类别就完全确定,那么信息增益也是最大的;当H(D|A)=H(D)的时候,说明A对于数据纯度的提高为0,此时A的存在与否,对于数据的混乱程度毫无影响,即对于分类情况,其效果为0,信息增益最小。

信息增益率

Gainratio(D,A)=Gain(D,A)IV(A)
其中
IV(A)=?i=1n|Di||D|log|Di||D|
n为特征A的取值个数,|Di|是特征A取值ai的时候的个体数,当特征取值越多,通常IV(A)的值也会越大。

特征选择

ID3 & C4.5

我们在选择特征的时候,都希望所选择的特征能够使得数据的纯度提升最大,不确定性降低最多,最好能够通过该特征的选择使得数据完成分类。通过上面对熵和信息增益的描述我们可以知道,这种描述与信息增益的功效正好相符。因此我们每次选择特征的时候,都希望选择信息增益最大的特征。这种利用信息增益进行选择的算法就是ID3算法
但是我们可以发现,当使用信息增益进行特征选择的时候,其倾向于选择取值数目多的属性。假设数据集D为10台电脑,分别标ID号为0?9,我们要对这10台电脑进行分类,如果此时我们把ID号作为属性特征之一,那么此时ID号的信息增益必然是最大的,因为其将每一个个体都作为一个类别直接分成10类,此时ID3算法必然会选择ID号作为主特征进行分类,其生成的决策树将会是一层十个分支的树结构,这显然并不是我们想要的,因为我们知道ID号为一个无效特征。基于这个原因,我们可以使用信息增益率来作为选择特征的依据。因为根据上面对信息增益率的描述我们知道当特征取值过多的时候,分母IV(A)的取值会变大,从而使得整体的信息增益率可能变小,从而能够避免选择取值很多的无效特征的问题(如ID)。而使用信息增益率作为特征选择的依据的算法称为C4.5算法

CART算法

CART是Classfication and Regression Tree的简称,其即可以用于分类也可以用于回归,该算法使用的是基尼指数来进行特征的选择

基尼值

基尼值的定义为

Gini(D)=k=1|Y|kkpkpk
其反映了从数据集D中随机抽取两个样本,其类别不一致的概率。因为反应的是数据类别不一致的概率,因此如果数据集D的纯度越高,则基尼值越小。这里注意,kkpk=1?pk,因此基尼值还可以表示为
Gini(D)=k=1|Y|pk(1?pk)=1?k=1|Y|p2k

基尼指数

对于属性A,其基尼指数定义为

Giniindex(D,A)=v=1V|Dv||D|Gini(Dv)
,其中V是属性A取得的不同的值。在选择属性的时候,要选择那个使得划分后基尼指数最小的属性作为最优化分属性。

剪枝算法

在构建决策树的时候,有时候为了更好的学习训练样本,可能会学过头,使得决策树分支过多,以至于将训练数据自身的一些特征作为了所有数据的一般特征从而导致学习过拟合。因此我们需要一些方法来去掉一些分支从而降低过拟合的风险。
剪枝算法有两种,预剪枝和后剪枝。预剪枝是指在构建决策树的过程中,对每个节点在划分之前进行估计,如果划分无法带来决策树泛化性能的提升,则放弃这次划分,将该节点标记为叶子节点。而后剪枝则是先通过训练集生成一个决策树,然后再自底向上的对非叶子节点进行考察,如果将该节点对应的子树转化为一个叶子节点不会降低泛化性能,则将该子树替换为叶子节点。我们可以看到预剪枝的基本思想是贪心算法,其基于贪心策略防止这些分支的展开,这可能会导致所生成的欠拟合的问题。而后剪枝由于一般会保留比预剪枝更多的分支,因此欠拟合的风险要小很多,泛化性能通常优于预剪枝。但是后剪枝过程是在生成决策树之后,需要从底向上对树中所有非叶子节点都考察一遍,因此其训练时间要比预剪枝和不剪枝都要打很多。

决策树算法学习笔记

标签:

原文地址:http://blog.csdn.net/batuwuhanpei/article/details/51125414

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!