当前位置: 首页 > news >正文

机器学习——决策树详解

一、决策树简介

在这里插入图片描述

  1. 定义:决策树是一种树形结果,树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出每个叶子节点代表一种分类结果
  2. 决策树建立过程:
  • 特征选择:选取有较强分类能力的特征
  • 决策树生成:根据选择的特征生成决策树
  • 决策树也容易过拟合,采用剪枝的方法环节过拟合

二、ID3树

  1. 定义:一种基于信息增益构建的决策树
  2. 信息熵(Entropy):信息论中代表随机变量不确定度的度量
  • 熵越大,数据的不确定性度越高,信息越多
  • 熵越小,数据的不确定性越低
  • 计算公式:H(x)=−∑i=0nP(xi)log⁡2P(xi)\mathsf{H}(x)=-\sum_{i=0}^nP(x_i)\log_2P(x_i)H(x)=i=0nP(xi)log2P(xi)
    • 其中P(xi)P(x_i)P(xi)表示数据中类别出现的概率,H(x)H(x)H(x)表示信息的信息熵值

计算数据α(ABCDEFGH)\alpha(ABCDEFGH)α(ABCDEFGH)信息熵,其中每个字符出现概率均为18\frac{1}{8}81H(α)=−∑i=0nP(xi)log⁡2P(xi)=(−18log⁡218)∗8=3\mathsf{H}(\alpha)=-\sum_{i=0}^{n}P(x_{i})\log_{2}P(x_{i})=(-\frac{1}{8}\log_{2}\frac{1}{8})*8=3H(α)=i=0nP(xi)log2P(xi)=(81log281)8=3
计算数据β(AAAABBCD)\beta(AAAABBCD)β(AAAABBCD)信息熵:
H(B)=−∑i=0nP(xi)log⁡2P(xi)=(−12log⁡212)+(−14log⁡214)+(−18log⁡218)∗2=12∗1+14∗2+18∗3∗2=1.75\mathrm{H}(\mathrm{B})=-\sum_{i=0}^{n}P(x_{i})\log_{2}P(x_{i})=(-\frac{1}{2}\log_{2}\frac{1}{2})+(-\frac{1}{4}\log_{2}\frac{1}{4})+(-\frac{1}{8}\log_{2}\frac{1}{8})*2=\frac{1}{2}*1+\frac{1}{4}*2+\frac{1}{8}*3*2=1.75H(B)=i=0nP(xi)log2P(xi)=(21log221)+(41log241)+(81log281)2=211+412+8132=1.75

  1. 信息增益:特征a对训练数据集D的信息增益g(D,a)g(D,a)g(D,a),定义为集合D的熵H(D)H(D)H(D)与特征a给定条件下D的熵H(D∣a)H(D|a)H(Da)之差
  • 计算公式:g(H,A)=H(D)−H(D∣A),信息增益=熵−条件熵g(H,A)=H(D)-H(D|A),信息增益=熵-条件熵g(H,A)=H(D)H(DA),信息增益=条件熵
  • 条件熵:H(D∣A)=∑v=1nDVDH(DV)=∑v=1nDVD∑k=1kCkVDVlogCkVDV\mathrm{H}(\mathrm{D}\mid\mathrm{A})=\sum_{v=1}^n\frac{D^V}{D}\mathrm{H}(D^V)=\sum_{v=1}^n\frac{D^V}{D}\sum_{\mathrm{k}=1}^\mathrm{k}\frac{C^{kV}}{D^V}log\frac{C^{kV}}{D^V}H(DA)=v=1nDDVH(DV)=v=1nDDVk=1kDVCkVlogDVCkV

在这里插入图片描述
已知6个样本,根据特征A:
α\alphaα部分对应的目标值为:AAAB
β\betaβ部分对应的目标值为:BB

  • 条件熵为α\alphaα(−34log234)+(−14log214)=0.81(-\frac{3}{4}log_2\frac{3}{4})+(-\frac{1}{4}log_2\frac{1}{4})=0.81(43log243)+(41log241)=0.81
  • 条件熵为β\betaβ(−22log222)=0(-\frac{2}{2}log_2\frac{2}{2})=0(22log222)=0
  • 条件熵:α\alphaα部分占据46\frac{4}{6}64β\betaβ部分占据26\frac{2}{6}62,则46⋅0.81+26⋅0=0.54\frac{4}{6}\cdot0.81+\frac{2}{6}\cdot0=0.54640.81+620=0.54
  • 熵:(−36log236)+(−36log236)=1(-\frac{3}{6}log_2\frac{3}{6})+(-\frac{3}{6}log_2\frac{3}{6})=1(63log263)+(63log263)=1
  • 信息增益:熵−条件熵=1−0.54=0.46熵-条件熵=1-0.54=0.46条件熵=10.54=0.46
  1. ID3决策树构建流程:
  • 计算每个特征的信息增益
  • 使用信息增益最大的特征将数据集拆分为子集
  • 使用该特征(信息增益最大的特征)作为决策树的一个节点
  • 使用剩余特征重复以上过程

在这里插入图片描述
已知某一论坛客户流失率数据,要求考察性别、活跃度特征哪个特征对流失率大

  • 计算熵:H(D)=(−515log⁡2515)+(−1015log⁡21015)=0.9812\mathrm{H(D)=}(-\frac{5}{15}\log_2\frac{5}{15})+(-\frac{10}{15}\log_2\frac{10}{15})=0.9812H(D)=(155log2155)+(1510log21510)=0.9812
  • 计算性别条件熵:H(D,性别)=(815)(−38log⁡238−58log⁡258)+(715)(−27log⁡227−57log⁡257)=0.9748H(D,性别)=(\frac{8}{15})(-\frac{3}{8}\log_{2}\frac{3}{8}-\frac{5}{8}\log_{2}\frac{5}{8})+(\frac{7}{15})(-\frac{2}{7}\log_{2}\frac{2}{7}-\frac{5}{7}\log_{2}\frac{5}{7})=0.9748H(D,性别)=(158)(83log28385log285)+(157)(72log27275log275)=0.9748
  • 计算性别信息增益:g(D,α)=H(D)−H(D∣α)=0.9812−0.9748=0.0064g(D,\alpha)=H(D)-H(D|\alpha)=0.9812-0.9748=0.0064g(D,α)=H(D)H(Dα)=0.98120.9748=0.0064
  • 计算活跃度条件熵:H(D,活跃度)=(615)(0)+(515)(−15log⁡215−45log⁡245)+(415)=0.3036H(D,活跃度)=(\frac{6}{15})(0)+(\frac{5}{15})(-\frac{1}{5}\log_{2}\frac{1}{5}-\frac{4}{5}\log_{2}\frac{4}{5})+(\frac{4}{15})=0.3036H(D,活跃度)=(156)(0)+(155)(51log25154log254)+(154)=0.3036
  • 计算活跃度信息增益:g(D,α)=H(D)−H(D∣α)=0.9812−0.3036=0.6776g(D,\alpha)=H(D)-H(D|\alpha)=0.9812-0.3036=0.6776g(D,α)=H(D)H(Dα)=0.98120.3036=0.6776
  • 结论:活跃度的信息增益比性别的信息增益大,对用户流失的影响比性别大

三、C4.5树

我们发现上述例子中,若将uin也作为一个特征,那么根据ID3的公式,uin的信息增益会很大,因此ID3树的不足在于其更偏向于选择种类多的特征作为分裂依据,因此C4.5树将信息增益改为了信息增益率

  1. 信息增益率=信息增益特征熵信息增益率=\frac{信息增益}{特征熵}信息增益率=特征熵信息增益
  2. 本质:
  • 特征的信息增益 / 特征的内在信息
  • 相当于对信息增益进行修正,增加一个惩罚系数
  • 特征取值个数较多时,惩罚系数较小;特征取值个数较少时,惩罚系数较大
  • 惩罚系数:数据集D以特征a作为随机变量的熵的倒数

在这里插入图片描述
现在希望求特征a、b的信息增益率

  • 对于特征a的信息增益率:
    • 信息增益:(−36log⁡236−36log⁡236)−(46⋅(−34log⁡234−14log⁡214)−26⋅(−0))=1−0.54=0.46(-\frac{3}{6}\log_{2}\frac{3}{6}-\frac{3}{6}\log_{2}\frac{3}{6})-(\frac{4}{6}\cdot(-\frac{3}{4}\log_{2}\frac{3}{4}-\frac{1}{4}\log_{2}\frac{1}{4})-\frac{2}{6}\cdot(-0))=1-0.54=0.46(63log26363log263)(64(43log24341log241)62(0))=10.54=0.46
    • 信息熵:−46log⁡246−26log⁡226=0.92-\frac{4}{6}\log_{2}\frac{4}{6}-\frac{2}{6}\log_{2}\frac{2}{6}=0.9264log26462log262=0.92
    • 信息增益率:信息增益/信息熵=0.46/0.92=0.5信息增益/信息熵=0.46/0.92=0.5信息增益/信息熵=0.46/0.92=0.5
  • 特征b的信息增益率:
    • 信息增益:(−36log⁡236−36log⁡236)−6⋅0=1(-\frac{3}{6}\log_{2}\frac{3}{6}-\frac{3}{6}\log_{2}\frac{3}{6})-6\cdot0=1(63log26363log263)60=1
    • 信息熵:−16log⁡216⋅6=2.58-\frac{1}{6}\log_{2}\frac{1}{6}\cdot6=2.5861log2616=2.58 * 信息增益率:信息增益/信息熵=1/2.58=0.39信息增益/信息熵=1/2.58=0.39信息增益/信息熵=1/2.58=0.39

四、CART决策树

  1. 什么是CART决策树:
  • Cart模型是一种决策树的模型,它即可以用于分类,也可以用于回归
  • Cart回归树使用平方误差最小化策略
  • Cart分类生成树采用的基尼指数最小化策略
  1. 基尼值(Gini):从数据集D中随机抽取两个样本,其类别标记不一致的概率
  • 计算公式:Gini(D)=∑k=1∣y∣∑k≠kpkpk=1−∑k=1∣y∣pk2Gini(D)=\sum_{k=1}^{|y|}\sum_{k\neq k}p_kp_k=1-\sum_{k=1}^{|y|}p_k^2Gini(D)=k=1yk=kpkpk=1k=1ypk2
  • 基尼值越小,代表数据集D的纯度越高
  1. 基尼指数(Gini_index):选择使划分后基尼系数最小的属性作为最优化分属性
  • 计算公式:Gini−index(D,a)=∑v=1VDvDGini(Dv)Gini_-index(D,a)=\sum_{v=1}^V\frac{D^v}{D}Gini(D^v)Giniindex(D,a)=v=1VDDvGini(Dv)
  • 信息增益(ID3)、信息增益率(C4.5)越大,则说明优先选择该特征;但基尼指数(cart)越小,则说明优先选择该特征

在这里插入图片描述
现在希望计算各特征的基尼指数,选择最优分裂点

  • 是否有房:

    • 有房子的基尼值:有房子有1、4、7共计三个样本,对应:3个no、0个yes
    • Gini(是否有房,yes )=1−(03)2−(33)2=0Gini(\text{是否有房,yes })=1-\left(\frac{0}{3}\right)^2-\left(\frac{3}{3}\right)^2=0Gini(是否有房,yes )=1(30)2(33)2=0
    • 无房子的基尼值:无房子有2、3、5、6、8、9、10共七个样本,对应:4个no、3个yes
    • Gini(是否有房,no)=1−(37)2−(47)2=0.4898Gini(\text{是否有房,no})=1-\left(\frac{3}{7}\right)^2-\left(\frac{4}{7}\right)^2=0.4898Gini(是否有房,no)=1(73)2(74)2=0.4898
    • 基尼系数:第一部分样本占了总样本的3/10、第二部分样本占了总样本的7/10
    • Gini−index(D, 是否有房 )=710∗0.4898+310∗0=0.343\mathrm{Gini}_-index(D,\text{ 是否有房 })=\frac{7}{10}*0.4898+\frac{3}{10}*0=0.343Giniindex(D, 是否有房 )=1070.4898+1030=0.343
  • 婚姻情况(由于婚姻情况有三个值,我们需要将其变为两个值):

    • 1、计算{married}和{single,divorced}情况下的基尼指数
      • 结婚的基尼值,有2、4、6、9共4个样本,并且对应目标值全部为no:
      • Gini(D, married )=0\mathrm{Gini}(D,\text{ married })=0Gini(D, married )=0
      • 不结婚的基尼值,有1、3、5、7、8、10共6个样本,并且对应3个no,3个yes:
      • Gini(D,singfe,divorced)=1−(36)2−(36)2=0.5\mathrm{Gini}(D,\mathrm{singfe,divorced})=1-\left(\frac{3}{6}\right)^{2}-\left(\frac{3}{6}\right)^{2}=0.5Gini(D,singfe,divorced)=1(63)2(63)2=0.5
      • 以 married 作为分裂点的基尼指数:
      • Gini index(D,married)=410∗0+610∗0.5=0.3\mathrm{Gini~index}(D,\mathrm{married})=\frac{4}{10}*0+\frac{6}{10}*0.5=0.3Gini index(D,married)=1040+1060.5=0.3
    • 2、计算{single}|{married,divorced}情况下基尼指数
    • Giniindex(D, 婚姻状况 )=410∗0.5+610∗[1−(16)2−(56)2]=0.367\mathrm{Gini_index}(D,\text{ 婚姻状况 })=\frac{4}{10}*0.5+\frac{6}{10}*\left[1-\left(\frac{1}{6}\right)^2-\left(\frac{5}{6}\right)^2\right]=0.367Giniindex(D, 婚姻状况 )=1040.5+106[1(61)2(65)2]=0.367
    • 3、计算{divorced}|{single,married}情况下基尼指数
    • Gini−index(D,婚姻状况 )=210∗0.5+810∗[1−(28)2−(68)2]=0.4\mathrm{Gini_-index}(D,\text{婚姻状况 })=\frac{2}{10}*0.5+\frac{8}{10}*\left[1-\left(\frac{2}{8}\right)^2-\left(\frac{6}{8}\right)^2\right]=0.4Giniindex(D,婚姻状况 )=1020.5+108[1(82)2(86)2]=0.4
    • 结论:{married}和{single,divorced}情况下的基尼指数为0.3最小,选择其为分裂点
  • 年收入(为连续值): 在这里插入图片描述

    • 由于为连续值,因此需要取两点之间的平均值作为待分裂点:65、72.5、80、87.7、92.5、97.5、110、122.5、172.5
    • 以年收入为65将样本分为小于65和大于65两部分,计算基尼指数:
    • 节点为 65 时:{ 年收入 }=110∗0−910∗[1−(69)2−(39)2]=0.4\text{节点为 65 时}:\{\text{ 年收入 }\}=\frac{1}{10}*0-\frac{9}{10}*\left[1-\left(\frac{6}{9}\right)^2-\left(\frac{3}{9}\right)^2\right]=0.4节点为 65 :{ 年收入 }=1010109[1(96)2(93)2]=0.4
    • 以此类推计算所有分割点的基尼指数,最小为0.3
  • 第一轮结果:

    • 以是否有房作为分裂点的基尼指数:0.343
    • 以婚姻状况为分裂特征、以married作为分裂点的基尼指数:0.3
    • 以年收入作为分裂特征,以97.5作为分裂点的基尼指数:0.3
  • 第二轮:

    • 样本2、4、6、9样本的类别都是no,已经达到最大纯度所以,该节点不需要再继续分裂
    • 样本1、3、5、7、8、10样本中仍然包含4个no,2个yes该节点并未达到要求的纯度,需要继续划分
    • 右子树的数据集变为:1、3、5、7、8、10,在该数据集中计算不同特征的基尼指数,选择基尼指数最小的特征继续分裂 在这里插入图片描述

五、三种分类树对比

名称分支方式特点
ID3信息增益1.ID3只能对离散属性的数据集构成决策树
2.倾向于选择取值较多的属性
C4.5信息增益率1.缓解了ID3分支过程中总喜欢偏向选择值较多的属性
2.可处理连续数值型属性,也增加了对缺失值的处理方法
3.只适合于能够驻留于内存的数据集,大数据集无能为力
CART基尼指数1.可以进行分类和回归,可处理离散属性,也可以处理连续属性
2.采用基尼指数,计算量减小
3.一定是二叉树

六、CART回归决策树

  1. CART回归树和CART分类树的区别:
  • CART分类树预测输出的是一个离散值,CART回归树预测输出的是一个连续值
  • CART分类树使用基尼指数作为划分、构建树的依据,CART回归树使用平方损失
  • 分类树使用叶子结点多数类别作为预测类别,回归树采用叶子节点里均匀值作为预测输出
  1. CART回归树的平方损失:Loss(y,f(x))=(f(x)−y)2\mathrm{Loss}(y,f(x))=(f(x)-y)^2Loss(y,f(x))=(f(x)y)2

在这里插入图片描述
已知数据集只有1个特征x,目标值为y,现需根据平方损失,构建CART回归树

  • 先划分待分裂点 在这里插入图片描述

  • 计算划分点1.5的平方损失:

    • R1为小于1.5的样本个数,数量为1,输出值为:R1=5.56R1=5.56R1=5.56
    • R2为大于1.5的样本个数,数量为9:R2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)/9=7.50R2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)/9=7.50R2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)/9=7.50
    • 计算该划分点的平方损失:L(1.5)=(5.56−5.56)2+[(5.7−7.5)2+(5.91−7.5)2+…+(9.05−7.5)2]=0+15.72=15.72L(1.5)=(5.56-5.56)^2+\left[(5.7-7.5)^2+(5.91-7.5)^2+\ldots+(9.05-7.5)^2\right]=0+15.72=15.72L(1.5)=(5.565.56)2+[(5.77.5)2+(5.917.5)2++(9.057.5)2]=0+15.72=15.72
  • 以此类推计算2.5、3.5的划分点的平方损失: 在这里插入图片描述

  • 当划分点s=6,5时,m(s)最小,所以第一个切分点为6.5
    在这里插入图片描述
    这里是引用

  • 对左子树的6个节点计算每个划分点的平方损失,找出最优划分点 在这里插入图片描述 在这里插入图片描述

  • 因此当s=3.5时,m(s)最小,所以左子树继续以3.5进行分裂
    在这里插入图片描述

  • 以此类推

  1. 案例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
# 创建数组
x = np.array(range(1,11)).reshape(-1,1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])
# 实例化模型
estimator1 = DecisionTreeRegressor(max_depth=3)
estimator2 = DecisionTreeRegressor(max_depth=5)
estimator3 = LinearRegression()
# 模型数量
estimator1.fit(x,y)
estimator2.fit(x,y)
estimator3.fit(x,y)
# 模型预测
x_test = np.arange(0.0, 10.0, 0.01).reshape(-1, 1)
y_pre1 = estimator1.predict(x_test)
y_pre2 = estimator2.predict(x_test)
y_pre3 = estimator3.predict(x_test)
# 图像
plt.figure(figsize=(16,8))
plt.plot(x_test,y_pre1,'r-',label='max_depth=3')
plt.plot(x_test,y_pre2,'b-',label='max_depth=5')
plt.plot(x_test,y_pre3,'y-',label='liner')
plt.legend(loc='best')
plt.show()

发现深度为5的CART决策树过拟合,而线性回归泛化性更好
在这里插入图片描述

七、决策树剪枝

  1. 剪枝是指将一颗子树的子节点全部删掉,利用叶子节点替换子树(实质上是后剪枝技术),也可以(假定当前对以root为根的子树进行剪枝)只保留根节点本身而删除所有的叶子,以下图为例:
    在这里插入图片描述

7.1 剪枝方法

  1. 预剪枝:指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点
    在这里插入图片描述

  2. 后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点
    在这里插入图片描述

7.2 对比

预剪枝后剪枝
优点预剪枝使决策树的很多分支没有展开,不单降低了过拟合风险,还显著减少了决策树的训练、测试时间开销比预剪枝保留的更多的分支,一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝
缺点有些分支的当前划分虽不能提上泛化性能,但后续划分却有可能显著提高性能,预剪枝决策树也带来了欠拟合的风险后剪枝先生成树,训练时间开销比未剪枝的决策树和预剪枝的决策树都要大很多
http://www.dtcms.com/a/411223.html

相关文章:

  • 万象EXCEL开发(六)excel单元格运算逻辑 ——东方仙盟金丹期
  • Redis数据结构和常用命令
  • 网站开发用什么开发无锡新吴区建设环保局网站
  • 深圳易捷网站建设计算机(网站建设与维护)
  • 智能微电网 —— 如何无缝集成分布式光伏 / 风电?
  • 苏州网站建设的公司万维网
  • 比较好的网站建设论坛wordpress纯静态化
  • 昆明云南微网站搭建西安网络建站
  • 怎么做二维码进入公司网站做网站推广优化哪家好
  • Java 中的代理模式
  • 网站 繁体 js汽车cms
  • 怀化 网站建设东海县做网站广告
  • 嘉兴网页制作网站排名企业网站建设用什么语言
  • 《录井工程与管理》——第六章 钻井参数录井
  • 视觉/深度学习/机器学习相关面经总结(3)(持续更新)
  • Qt 自定义控件(继承 QWidget)面试核心指南
  • 网站建设友汇wordpress自动提取标签
  • 网络编程初识
  • Apring Ai 和Spring Ai Alibaba有什么区别
  • 网站开发的例子网站获取信息
  • 活到老学到老之Jenkins build triggers中的定时schedule规则细讲
  • 企业级 MySQL 8 全流程指南:源码编译安装、主从同步、延迟复制、半同步与 MHA 高可用搭建
  • 有服务器了怎么做网站三星网上商城分期
  • 交付场景下的 iOS 混淆实战,无源码部分源码如何做成品加固、供应链验证与交付治理
  • 中国菲律宾商会网站seo优化免费
  • CS课程项目设计18:基于Insightface人脸识别库的课堂签到系统
  • 收录网站的二级域名郑州又上热搜了
  • 济南企业型网站深圳定制网站制作
  • 【2025】Mixxx 2.5.1安装教程保姆级一键安装教程(附安装包)
  • 算法学习之 二分