1、介绍
决策树是一种依托决策而建立起来的一种树。在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象/分类,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值
输入:一组对象属性
输出:对象值(分类算法中得到某个类别)
决策树中间计算过程: 统计学习方法中根据下表贷款数据表生成的决策树如下,当给定一个人的特征属性之后就能判断能不能给他贷款。
2、特征选择
看到上面的第一张决策树的图后,心中会产生一个疑问,为什么将“有自己的房子”作为根节点?为什么有自己的房子分类结果就是“是”?如何选定下一个节点?…..
2.1 熵与条件熵、经验熵与检验条件熵
熵H(X):表示随机变量不确定性的度量,如果一个变量的随机性越大(不确定性),则它的熵越大。
计算公式:
条件熵H(Y|X):表示在已知随机变量X的条件下随机变量Y的不确定性。例如“有自己房子”条件下“贷款”的熵。
当熵和条件熵中的概率是由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵。
2.2 信息增益与信息增益比
信息增益:表示得知特征的信息使得类Y的信息的不确定性减少程度。
特征A对训练数据集D的信息增益g(D,A):集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
假设数据D可以分为K个类(对应介绍中 贷款“是”,“否”),特征A(“有自己的房子”)有n个不同的取值(“有”,“无”)。
H(D): 对数据集D进行分类的不确定性。
H(D|A): 在特定A给定条件下对数据集D进行分类的不确定性。
它们的计算公式如下(统计学习方法中的解析)
既然已经有了信息增益为什么还要引入“信息增益比”呢?
在以信息增益划分到底采用那个特征时,存在偏向于选取值较多的特征的问题,所以这里引入的增益比相当于归一化,使各个特曾的影响因子归一化。
其中:
2.3 决策树的生成——ID3 算法
当理解了上面信息熵和条件熵的概念后,ID3算法就很容易理解了。该算法解决的主要问题是:如何生成一个决策树?
输入:训练数据集D,特征集A,阈值e
输出: 决策树 T
ID3算法的核心是在决策树各个子节点上应用信息增益准则选择特征,递归的构建决策树,具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归调用以上方法,构建决策树。直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。
这其中会遇到一些问题:
1、若D中所有的实例属于用一类C(k),则T为单节点数,并将类C(k)作为该节点的类标记
2、若A = null,则T为单节点树,并将D中实例数最大的类C(k)作为该节点的类标记。
3、如果A(g)的信息增益比小于阈值e,则置T为单节点树,并将D中实例数最大的类作为该节点的类标记。
4、随着树的向下生长,特征集也会逐渐减少(A-A(g)),父节点中出现的特征将会排除在特征选取中。
与ID3算法类似的算法 C4.5算法,与ID3唯一的不同是 它选取信息增益比作为特征选择的标准,这样可以减少过拟合。而ID3采用信息增益作为特征选择的标准。
创建决策树的伪代码(createBranch函数):
1 检测数据中的每个子项是否属于同一个分类 2 if so return 类标签 3 else 4 寻找划分数据集的最好特征 5 划分数据集 6 创建分支节点 7 for 每个划分的子集 8 调用 createBranch并增加返回结果到分支节点中 9 return 分支节点
3. 决策树的减枝
通过决策树算法生成的决策树往往对训练数据的分类很精确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。
在决策树学习中将已生成的树进行简化的过程称为剪枝。
决策树的剪枝往往通过极小化决策树整体的损失函数/代价函数来实现。 当剪枝后决策树的损失值小于剪枝前损失函数值,那么该分支将会被剪掉。(从叶节点自下而上遍历决策树的每个节点,确定是否需要进行剪枝)
决策树的损失函数:
《统计学习方法》中给出了损失函数的公式:
4. python 实现
后续待补充
参考:
《统计学习方法》
《机器学习实战》
http://blog.csdn.net/jialeheyeshu/article/details/51832165
https://www.cnblogs.com/starfire86/p/5749328.html
原文地址:https://www.cnblogs.com/NeilZhang/p/8504921.html