本系列博客基于温州大学黄海广博士的机器学习课程的笔记,小伙伴们想更详细学习黄博士课程请移步到黄博士的Github、或者机器学习初学者公众号,现在在中国慕课也是可以学习的,内容包括机器学习、深度学习及Python编程,matplotlib、numpy、pandas、sklearn等,资料很详细,要系统学习请移步哦!笔者的博客只是笔记,内容不会十分详细,甚至会有些少错误!



1.决策树原理

1.1 决策树基本概述

  • 决策树:从训练数据中学习得出一个树状结构的模型;
  • 决策树属于判别模型;
  • 决策树是一种树状结构,通过做出一系列决策来对数据进行划分;
  • 决策树的决策过程从根节点开始,测试待分类项中对应的特征属性,按照其值选择输出分支,直到叶子节点,将叶子节点的存放的类别作为决策结果;
  • 决策树算法:一种归纳分类算法,通过对训练集的学习,挖掘出有用的规则,用于对新数据进行预测;
  • 决策树算法属于监督学习方法;
  • 决策树归纳的基本算法:贪心算法,自顶向下来构建决策树;
  • 贪心算法:在每一步选择中都采取在当前状态下最好的选择;
  • 在决策树的生成过程中,分割方法即属性选择的度量是关键;

1.2 决策树特点

优点:

  • 推理过程容易理解,计算简单,可解释性强;
  • 比较适合处理有缺失属性的样本;
  • 可自动忽略目标变量没有贡献的属性变量,也为判断属性变量的重要性,减少变量的数目提供参考;

缺点:

  • 容易造成过拟合,需要采用剪枝操作;
  • 忽略了数据之间的相关性;
  • 对于各类别样本数量不一致的数据,信息增益会偏向于那些更多数值的特征;

1.3 决策树的三种基本类型

ID3(Iterative Dichotomiser)、C4.5、CART(Classification And Regression Tree)

算法 支持模型 树结构 特征选择 连续值处理 缺失值处理 剪枝 特征属性多次使用
ID3 分类 多叉树 信息增益 不支持 不支持 不支持 不支持
C4.5 分类 多叉树 信息增益率 支持 支持 支持 不支持
CART 分类、回归 二叉树 基尼指数、均方差 支持 支持 支持 支持

2.ID3算法

2.1 ID3算法简介

  • ID3算法由罗斯昆(J.Ross Quinlan)于1975年提出的一种决策树构建算法,算法核心:“信息熵”,期望信息越小,信息熵越大,样本纯度越低;
  • ID3算法以信息论为基础,以信息增益为衡量标准,从而实现对数据的归纳分类;
  • ID3算法计算每个属性的信息增益,选取具有最高增益的属性作为给定的测试属性;

2.2 ID3算法大致步骤

  • 初始化特征集合和数据集合;
  • 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
  • 更新数据集合和特征集合(删除上一步使用的特征,按照特征值来划分不同分支的数据集合);
  • 重复2,3步骤,若子集值包含单一特征,则为分支叶子节点;

2.3 信息熵

  • 信息熵定义:
    H(D)=−∑k=1K∣Ck∣∣D∣log⁡2∣Ck∣∣D∣H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|} H(D)=−k=1∑K​∣D∣∣Ck​∣​log2​∣D∣∣Ck​∣​
    其中:K是类别;D是数据集;Ck是类别K下的数据集其中:K是类别;D是数据集;C_k是类别K下的数据集其中:K是类别;D是数据集;Ck​是类别K下的数据集;
  • 实例数据:
  • 由上数据可知:数量共15,类别一列:"是"9个,"否"6个,计算信息熵:
    H(D)=−∑k=1K∣Ck∣∣D∣log⁡2∣Ck∣∣D∣=−915log⁡2915−615log⁡2615=0.971\begin{aligned} H(D)=&-\sum_{k=1}^K\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|}\\ =&-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}\log_2\frac{6}{15}\\ =&0.971 \end{aligned} H(D)===​−k=1∑K​∣D∣∣Ck​∣​log2​∣D∣∣Ck​∣​−159​log2​159​−156​log2​156​0.971​
  • 按年龄划分,计算信息熵
    H(D∣A1=青年)=−25log⁡225−35log⁡235=0.971H(D∣A1=中年)=−35log⁡235−25log⁡225=0.971H(D∣A1=老年)=−45log⁡245−15log⁡215=0.7219\begin{aligned} H(D|A_1=青年)=&-\frac{2}{5}\log_2\frac{2}{5}-\frac{3}{5}\log_2\frac{3}{5}=0.971\\ H(D|A_1=中年)=&-\frac{3}{5}\log_2\frac{3}{5}-\frac{2}{5}\log_2\frac{2}{5}=0.971\\ H(D|A_1=老年)=&-\frac{4}{5}\log_2\frac{4}{5}-\frac{1}{5}\log_2\frac{1}{5}=0.7219 \end{aligned} H(D∣A1​=青年)=H(D∣A1​=中年)=H(D∣A1​=老年)=​−52​log2​52​−53​log2​53​=0.971−53​log2​53​−52​log2​52​=0.971−54​log2​54​−51​log2​51​=0.7219​
  • 注:A是特征,i是特征取值;注:A是特征,i是特征取值;注:A是特征,i是特征取值;

2.4 条件熵

  • 条件熵定义:
    H(D∣A)=∑i=1n∣Di∣∣D∣H(Di),A是特征,i是特征取值;H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i),A是特征,i是特征取值; H(D∣A)=i=1∑n​∣D∣∣Di​∣​H(Di​),A是特征,i是特征取值;
  • 年龄的条件熵:
    H(D∣年龄)=∑i=1n∣Di∣∣D∣H(Di)=515×0.971+515×0.971+515×0.7219=0.8897\begin{aligned} H(D|年龄)=&\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)\\ =&\frac{5}{15}\times{0.971}+\frac{5}{15}\times{0.971}+\frac{5}{15}\times{0.7219}\\ =&0.8897 \end{aligned} H(D∣年龄)===​i=1∑n​∣D∣∣Di​∣​H(Di​)155​×0.971+155​×0.971+155​×0.72190.8897​

2.5 信息增益

  • 信息增益定义:
    g(D,A)=H(D)−H(D∣A),其中:H(D∣A)=−∑i=1n∣Di∣Dlog⁡2∣Di∣∣D∣,n是特征A的取值个数;g(D,A)=H(D)-H(D|A),其中:H(D|A)=-\sum_{i=1}^n\frac{|D_i|}{D}\log_2\frac{|D_i|}{|D|},n是特征A的取值个数; g(D,A)=H(D)−H(D∣A),其中:H(D∣A)=−i=1∑n​D∣Di​∣​log2​∣D∣∣Di​∣​,n是特征A的取值个数;
  • A1=老年的信息增益A_1=老年的信息增益A1​=老年的信息增益:
    g(D∣A1=老年)=H(D)−H(D∣A1=老年)=0.971−0.7219=0.2491g(D|A_1=老年)=H(D)-H(D|A_1=老年)=0.971-0.7219=0.2491 g(D∣A1​=老年)=H(D)−H(D∣A1​=老年)=0.971−0.7219=0.2491

2.6 ID3算法缺点

  • ID3没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值;

3.C4.5算法

3.1 C4.5算法特点

  • 用信息增益率来选择属性;ID3选择属性用的是子树的信息增益,C4.5用的是信息增益率选择属性;
  • 在决策树构造过程中进行剪枝;
  • 对非离散数据也能处理;
  • 能够对不完整数据进行处理;

3.2 信息增益率

  • 信息增益率定义:
    gR(D,A)=g(D,A)HA(D),其中:H(D∣A)=−∑i=1n∣Di∣∣D∣log⁡2∣Di∣∣D∣,n是特征A的取值个数;g_R(D,A)=\frac{g(D,A)}{H_A(D)},其中:H(D|A)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|},n是特征A的取值个数; gR​(D,A)=HA​(D)g(D,A)​,其中:H(D∣A)=−i=1∑n​∣D∣∣Di​∣​log2​∣D∣∣Di​∣​,n是特征A的取值个数;
    g(D,A1=老年)=H(D)−H(D∣A1=老年)=0.971−0.7219=0.2491gR(D,A1=老年)=g(D,A1=老年)HA(D)=0.2491−∑i=1n∣Di∣∣D∣log⁡2∣Di∣∣D∣=0.2491−915log⁡2915−615log⁡2615=0.2565\begin{aligned} g(D,A_1=老年)=&H(D)-H(D|A_1=老年)=0.971-0.7219=0.2491\\ g_R(D,A_1=老年)=&\frac{g(D,A_1=老年)}{H_A(D)}\\ =&\frac{0.2491}{-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|}}\\ =&\frac{0.2491}{-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}\log_2\frac{6}{15}}\\ =&0.2565 \end{aligned} g(D,A1​=老年)=gR​(D,A1​=老年)====​H(D)−H(D∣A1​=老年)=0.971−0.7219=0.2491HA​(D)g(D,A1​=老年)​−∑i=1n​∣D∣∣Di​∣​log2​∣D∣∣Di​∣​0.2491​−159​log2​159​−156​log2​156​0.2491​0.2565​

3.3 C4.5算法剪枝

  • 过拟合的原因:
  • 为了尽可能正确分类训练样本,节点的划分过程会不断重复直到不能再分,把训练样本的一些特点当作所有数据都具有的一般性质,导致过拟合;
  • 通过剪枝处理去掉一些分支来降低过拟合的风险;
  • 剪枝的基本策略:“预剪枝”(prepruning)、“后剪枝”(post-pruning);

3.4 预剪枝(prepruning)

  • 预剪枝可以降低过拟合的风险,同时可以减少训练时间,但可能会造成欠拟合;
  • 预剪枝策略:
  • 在节点划分前确定是否继续增长,及早停止增长;
  • 方法:
  • 节点内数据样本低于某一个阈值停止增长;
  • 所有节点特征都已经分裂则停止增长;
  • 节点划分前准确率比划分后准确率高时停止增长;

3.5 后剪枝(post-pruning)

  • 在已经生成的决策树上进行剪枝,得到简化版的剪枝决策树;
  • 后剪枝的欠拟合风险更小,泛化性能往往优于预剪枝决策树;
  • 后剪枝方法:
  • 在已经生成的决策树上进行剪枝,得到简化版的剪枝决策树;
  • C4.5用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这棵子树是否有益;如果剪枝后与剪枝前相比,其错误率是保持或下降,则这棵子树可以被替换掉;
  • C4.5通过训练集上的错误分类数量来估算未知样本上的错误率;
  • 后剪枝决策树欠拟合风险很小,泛化能力往往优于预剪枝决策树;

3.6 C4.5缺点

  • 剪枝策略可以再优化;
  • C4.5用的是多叉树,用二叉树效率更高;
  • C4.5只能用于分类;
  • C4.5使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
  • C4.5在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行;

4.CART算法

4.1 CART简介

  • Classification and Regression Tree,CART;
  • 用基尼指数来选择属性(分类),用均方差来选择属性(回归);
  • CART算法既可以用来创建分类树,也可以创建回归树;
  • 如果目标变量是离散的,称为分类树;
  • 如果目标变量是连续的,称为回归树;

4.2 分类–连续特征处理

  • 思路:
    m个样本的连续特征A有m个,a1,a2,a3,…,am−1,ama_1,a_2,a_3,\dots,a_{m-1},a_ma1​,a2​,a3​,…,am−1​,am​,从小到大排列,取相邻两样本值的平均数做划分点,一共取m-1个,其中第m个划分点TmT_mTm​表示为:Tm=(am−1+am)/2T_m={(a_{m-1}+a_m)}/{2}Tm​=(am−1​+am​)/2;分别计算这m-1个点作为二元分类点时的基尼系数;选择基尼指数最小的点为该连续特征的二元离散分类点;

4.3 分类–离散特征处理

  • 思路:假设特征a有m个离散值;分类标准:每一次将其中一个特征分为一类,其他非该特征分为另一类;依照这个标准遍历所有分类情况,计算每个分类下的基尼指数,最后选择最小的作为最终的特征划分;

4.4 基尼指数

  • Gini(D,A)Gini(D,A)Gini(D,A)表示经过A=a分割后集合D的不确定性;
  • 定义:
    Gini(D,A)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini(p)=∑k=1Kpk(1−pk)\begin{aligned} Gini(D,A)=&\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)\\ Gini(p)=&\sum_{k=1}^Kp_k(1-p_k) \end{aligned} Gini(D,A)=Gini(p)=​∣D∣∣D1​∣​Gini(D1​)+∣D∣∣D2​∣​Gini(D2​)k=1∑K​pk​(1−pk​)​
  • 实例说明:
    Gini(D,A1=青年)=515×(2×25×(1−25))+1015×(2×710×(1−710))=0.44Gini(D,A1=中年)=0.48Gini(D,A1=老年)=0.44Gini(D,A2=是)=0.32Gini(D,A3=是)=0.27Gini(D,A4=非常好)=0.36Gini(D,A4=好)=0.47Gini(D,A4=一般)=0.32\begin{aligned} &Gini(D,A_1=青年)=\frac{5}{15}\times({2\times\frac{2}{5}\times(1-\frac{2}{5})})+\frac{10}{15}\times(2\times\frac{7}{10}\times(1-\frac{7}{10}))=0.44\\ &Gini(D,A_1=中年)=0.48\\ &Gini(D,A_1=老年)=0.44\\ &Gini(D,A_2=是)=0.32\\ &Gini(D,A_3=是)=0.27\\ &Gini(D,A_4=非常好)=0.36\\ &Gini(D,A_4=好)=0.47\\ &Gini(D,A_4=一般)=0.32 \end{aligned} ​Gini(D,A1​=青年)=155​×(2×52​×(1−52​))+1510​×(2×107​×(1−107​))=0.44Gini(D,A1​=中年)=0.48Gini(D,A1​=老年)=0.44Gini(D,A2​=是)=0.32Gini(D,A3​=是)=0.27Gini(D,A4​=非常好)=0.36Gini(D,A4​=好)=0.47Gini(D,A4​=一般)=0.32​

4.5 决策树原理

4.6 回归

  • 使用均方差来选择属性
  • 对于连续值的处理,CART分类树采用基尼系数的大小来度量特征的各个划分点;对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1D_1D1​和D2D_2D2​,求出使D1D_1D1​和D2D_2D2​各自集合的均方差最小,同时D1D_1D1​和D2D_2D2​的均方差之和最小锁对应的特征和特征值划分点;
  • 表达式如下:
    mina,s[minc1∑xi∈D1(yi−c1)2+minc2∑xi∈D2(yi−c2)2]min_{a,s}[min_{c_1}\sum_{x_i\in{D_1}}(y_i-c_1)^2+min_{c_2}\sum_{x_i\in{D_2}}(y_i-c_2)^2] mina,s​[minc1​​xi​∈D1​∑​(yi​−c1​)2+minc2​​xi​∈D2​∑​(yi​−c2​)2]
    其中:c1为D1数据集的样本输出均值,c2为D2数据集的样本输出均值其中:c_1为D_1数据集的样本输出均值,c_2为D_2数据集的样本输出均值其中:c1​为D1​数据集的样本输出均值,c2​为D2​数据集的样本输出均值;

4.7 预测方式

  • 分类树采用叶子节点里概率最大的类别作为当前节点的预测类别;
  • 回归树采用最终叶子的均值或中位数来预测输出结果;

4.8 CART剪枝

  • CART采用"基于代价复杂度的剪枝"方法进行剪枝,该方法生成一系列树,每个树都通过将前面的树的某个或某个子树替换成一个叶节点得到;

  • 这一系列树中的最后一棵树仅包含一个用来预测类别的叶节点;

  • 然后用一种成本复杂度的度量准则来判断哪棵子树应该被一个预测类别值的叶节点代替;

  • 剪枝流程:

  • 计算每一个结点的条件熵;

  • 递归的从叶子节点开始往上遍历,剪掉叶子节点,判断损失函数的值是否减少,如果减少,则将父节点作为新的叶子节点;

  • 重复2步骤,直到完全不能剪枝;

5.决策树小结

  • 划分标准的差异:ID3使用信息增益偏向特征值多的特征,C4.5使用信息增益率客服信息增益的缺点,偏向于特征值小的特征,CART使用基尼指数克服C4.5需要求log的巨大计算量,偏向于特征值较多的特征;
  • 使用场景的差异:ID3和C4.5只能用于分类问题,CART可以用于分类和回归问题;ID3和C4.5是多叉树,速度较慢,CART是二叉树,计算速度很快;
  • 样本数据的差异:ID3只能处理离散数据且缺失值敏感,C4.5和CART可以处理连续性数据且有多种方式处理缺失值;从样本量考虑,小样本建议使用C4.5,大样本建议使用CART;C4.5处理过程中需要对数据集进行多次扫描排序,处理成本耗时高,CART本身是一种大样本的统计方法,小样本处理下泛化误差较大;
  • 样本特征的差异:ID3和C4.5层级之间只使用一次特征,CART可多次重复使用特征;
  • 剪枝策略的差异:ID3没有剪枝策略,C4.5通过悲观剪枝策略来修正树的准确性,CART通过代价复杂度剪枝;

机器学习入门8--决策树相关推荐

  1. 机器学习入门之决策树法

    决策树法 1.决策树模型与学习 1.1.决策树模型 分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成.结点分为两种,内部结点和叶子结点:内部结点表示一个特征或者属性:叶子结点 ...

  2. 机器学习入门学习笔记:(3.2)ID3决策树程序实现

    前言 之前的博客中介绍了决策树算法的原理并进行了数学推导(机器学习入门学习笔记:(3.1)决策树算法).决策树的原理相对简单,决策树算法有:ID3,C4.5,CART等算法.接下来将对ID3决策树算法 ...

  3. 机器学习入门笔记(五):决策树

    文章目录 一.决策树模型与学习 1.1 决策树模型 1.2 决策树与 if-then 规则 1.3 决策树与条件概率分布 1.4 决策树的学习 二.特征选择 2.1 信息增益 2.2 例题:利用信息增 ...

  4. 机器学习 入门详细解析(二)决策树、随机森林

    文章目录 分类算法-决策树 认识决策树 信息熵 决策树的划分一句之一:信息增益 信息增益的计算 算法案例-泰坦尼克号乘客生存分类模型 决策树的优缺点以及改进 集成学习方法-随机森林 什么是随机森林 算 ...

  5. 菜菜的机器学习sklearn实战-----sklearn入门与决策树

    菜菜的机器学习sklearn实战-----sklearn入门与决策树 菜菜的机器学习sklearn实战-----sklearn入门与决策树 sklearn入门 决策树 概述 决策树是如何工作的 skl ...

  6. A.机器学习入门算法(五):基于企鹅数据集的决策树分类预测

    [机器学习入门与实践]入门必看系列,含数据挖掘项目实战:数据融合.特征优化.特征降维.探索性分析等,实战带你掌握机器学习数据挖掘 专栏详细介绍:[机器学习入门与实践]合集入门必看系列,含数据挖掘项目实 ...

  7. 【机器学习入门】(13) 实战:心脏病预测,补充: ROC曲线、精确率--召回率曲线,附python完整代码和数据集

    各位同学好,经过前几章python机器学习的探索,想必大家对各种预测方法也有了一定的认识.今天我们来进行一次实战,心脏病病例预测,本文对一些基础方法就不进行详细解释,有疑问的同学可以看我前几篇机器学习 ...

  8. 【机器学习入门】(10) 特征工程:特征抽取,字典特征抽取、文本特征抽取,附完整python代码

    各位同学好,今天和大家介绍一下python机器学习中的特征工程.在将数据放入模型之前,需要对数据的一些特征进行特征抽取,方法有: (1) 字典特征抽取 DictVectorizer(),(2) 文本特 ...

  9. 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  10. 机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

最新文章

  1. springboot解决js前端跨域问题,javascript跨域问题解决
  2. UVa 1057 - Routing
  3. 05-Windows Server 2012 R2 会话远程桌面-标准部署-RD连接代理高可用性(RemoteApp)
  4. SpringMVC+Mybatis+MySQL配置Redis缓存
  5. CiscoIOUKeygen
  6. hadoop 动态调整mapred参数
  7. 【转】TCP/IP协议到底在讲什么?【乐搏TestPro】
  8. php爬虫js解析,Spider抓取动态内容(JavaScript指向的页面)
  9. oracle触发器记录所有dml,Oracle DML类型触发器
  10. ElasticSearch核心基础之映射
  11. 「入坑」前端开发,我有一些经验想和你分享
  12. 细说php一些常见的知识点
  13. Office 2010 体验系列之Outlook使用
  14. 牛客小白月赛8: E. 诡异数字(数位DP)
  15. 每天一道剑指offer-顺时针打印矩阵
  16. c语言如何删除链表相同元素,【图片】想问一道链表题,如何删除重复元素【c语言吧】_百度贴吧...
  17. 按键精灵不成熟的大漠游戏自动加血保护代码 大漠字库使用案例
  18. STM32F103C8T6红外遥控解码
  19. android画廊无限轮播,ViewPager无限循环实现画廊式banner
  20. 魔戒显示网络错误 或者服务器停机,指环王安装和运行过程中的常见问题及解决办法(汇总)...

热门文章

  1. php mysql 条件查询输出,php查询mysql多条件判断输出显示
  2. 关于我被室友忽悠去下载appium那档子事
  3. 请领导批阅文件怎么说_批阅文件用词
  4. 基于提前停止方法的优化随机一致性采样算法
  5. php clownfish,CodeIgniter框架代码解析-index.php
  6. 在这个SDN年代,企业网络演变,直接影响老板对我的态度变化?
  7. php冒泡程序讲解,PHP冒泡排序详解
  8. VMware虚拟机linux操作系统的ens33下没有IP地址的解决办法
  9. 根据html除去多余css样式在线,利用css-redundancy-checker去除冗余、无用、废弃的css样式代码...
  10. linux 进程状态 rl,Linux进程状态详解