机器学习-决策树分类详解
决策树是一种基本的 分类与 回归方法,其主要的优点为模型具有可读性,分类速度快。学习时,根据损失函数最小化的原则建立决策树模型。预测时,利用决策树模型进行分类。决策树学习通常有三个步骤: 特征选择、 决策树生成和 决策树的裁枝。
1 算法原理
决策树是一种简单但是广泛使用的分类器,递归的选择最优特征并用最优特征对数据集进行分割,通过训练数据构造决策树可以高效的对未知的数据进行分类
1.)树模型 , 分类决策树模型是一种描述对实例进行分类的树形结构。结点有两种类型,内部结点表示一个特征或属性,叶结点表示一个类。 用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点;这时,每一个子结点对应着该特征的一个取值,如此递归下去,直到到达叶子结点。最后将实例分到叶结点的类中。
2.) if-then规则集合 , 由决策树的根结点大叶结点的每一条路径构建一条规则;路径内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。其有一个重要性质为:互斥且完备。也就是每一个实例都有路径覆盖且只有一条。
3.) 条件概率分布 , 表示给定特征条件下类的条件概率分布。这一条件概率分布定义特征空间的一个划分。将特征空间划分为互不相交的单元区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。假设X为特征的随机变量,Y为类的随机变量。那这个条件概率分布为P(Y|X),各个叶结点上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例分到条件概率大的那一类去。
4.) 算法思想, 基本流程遵循分而治之的思想。
输入:训练集D={
(X1,Y1),(X2,Y2), …(Xm,Ym)};
属相集A={
a1,a2,...ad}.
过程:函数TreeGenerate(D,A)
1:生成结点 node;
2:if D中的样本全属于同一类别C then
3: 将 node 标记为C类叶节点;return
4 :end if
5: if A=Φ OR D中样本在A上取值相同 then
6: 将 node 标记为叶节点,其类别标记为D中样本数最多的类;return
7 :end if
8 :从A中选择最优划分属性a*;
9: for a*中的每一个值a*v do
10: 为node生成一个分支;令Dv表示D中在a*上取值为a*v 的样本子集;
11: if Dv为空 then
12: 将分支结点标记为叶节点,其类别标记为D中样本最多的类;return
13: else
14: 以TreeGenerate(Dv,A\{
a*})为分支结点
15: end if
16 :end for
输出:以node为根节点的一颗决策树
决策树学习的本质是从训练数据归纳出一组分类规则,选择一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。
2 特征选择
目的:通过一种衡量标准来计算通过不同特征进行分枝选择后的分类情况,找出最好的那个当根节点,以此类推。
信息熵:用来度量样本集合的纯度(表示物体内部的混乱程度。例如杂货店和专卖店)
设X是一个取有限个值得离散随机变量,其概率分布为:
P ( X = x i ) = p i , i = 1 , 2 , . . . , n ( 1.1 ) P(X=xi)=pi, i=1,2,...,n (1.1) P(X=xi)=pi,i=1,2,...,n(1.1)
则随机变量X的熵定义为:
E n t ( D ) = − ∑ k = 1 K p k l o g 2 p k ( 1.2 ) Ent(D)=-\sum_{k=1}^{K}p_{k}log_{2}p_{k} (1.2) Ent(D)=−k=1∑Kpklog2pk(1.2)
当随机变量只取两个值,例如0,1时,熵的变化曲线如正弦图。当 p=0 或 p=1 时,Ent(D)=0,随机变量完全没有不确定性,当p=0.5时,熵取值最大,随机变量不确定性最大。 我们当然希望划分后的属性尽量的属于同一类别,样本集合的纯度越高越好,所以 Ent(D) 的值越小越好。
(1) 信息增益
考虑到不同分支结点所包含的样本数不同,会对分类效果产生较大的影响,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ \left | D^{v} \right |/\left | D \right | ∣Dv∣/∣D∣, 其中 ∣ D v ∣ \left | D^{v} \right | ∣Dv∣表示第v个分支结点所包含了D中所有在属性a上取值为 a v a^{v} av的样本。这样可计算出属性a对样本集D进行划分所获得的信息增益。
分类后的专一性,希望分类后的结果是同类在一起
特征a对训练数据集D的信息增益g(D,a),定义为集合D的经验熵Ent(D)与特征A给定条件下D的经验条件熵Ent(D|A)之差,即
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( ∣ D v ∣ ) ( 1.3 ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}Ent(\left | D^{v} \right |)(1.3) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(∣Dv∣)(1.3)
一般来说,信息增益越大,意味着使用属性a来进行划分所获得的纯度提升越大,因此Gain越大越好。
在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。ID3算法相当于用极大似然法进行概率模型的选择 。
ID3算法原理
输入:训练数据集D,特征集A,阈值ϵ
输出:决策树T
(1) 若D中所有实例属于同一类 Ck,则T为单结点树,并将类 Ck 作为该结点的类标记,返回T;
(2) 若 A=∅,则T为单结点树,并将D中实例数最大的类 Ck 作为该结点的类标记,返回T;
(3) 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 Ag;
(4) 如果Ag 的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类 Ck 作为该结点的类标记,返回T;
(5) 否则,对Ag 的每一个可能值ai,依 Ag=ai 将D分割为若干非空子集Di,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6) 对第i个子子结点,以Di为训练集,以 A−{
Ag} 为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti;
ID3算法的实现
C++ 实现可参考 https://blog.youkuaiyun.com/fly_time2012/article/details/70210725
python实现可参考 https://blog.youkuaiyun.com/u014688145/article/details/53212112
以信息增益作划分存在对可取值数目较多的属性有所偏好(从公式(1.3)可以看出ID3更愿意选择那些包括很多种类的特征属性,即哪个A中的n多,那么这个A的信息增益就可能更大),所以引入了信息增益比可以对这个问题进行校正。
(2) 信息增益率
特征A对训练数据集D的信息增益比G_r(D,a)定义为其信息增益G(D,a)与训练数据集D关于特征A的值的熵Ent(D)之比,即 G a i n   r a t i o = g a i n ( D , a ) I V ( a ) Gain\, ratio=\frac{gain(D,a)}{IV(a)} Gai

本文深入探讨了决策树的算法原理,包括ID3、C4.5和CART。介绍了信息熵、信息增益、信息增益率、基尼指数等特征选择准则,以及连续值处理和缺失值处理的方法。同时,讨论了决策树的剪枝策略,包括预剪枝和后剪枝,以防止过拟合。
最低0.47元/天 解锁文章
1854

被折叠的 条评论
为什么被折叠?



