笔记(四)机器学习(周志华)第4章 决策树

1. 基本流程

1.1. 决策树是一种基本的分类与回归方法。

  • 决策树分类
sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2,
                                            min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
                                            random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
                                            min_impurity_split=None, class_weight=None, presort=False)

  • 决策树回归
sklearn.tree.DecisionTreeRegressor(criterion='mse', splitter='best', max_depth=None, min_samples_split=2,
                                           min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
                                           random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
                                           min_impurity_split=None, presort=False)

参数说明

1.2. 决策树是基于树结构来进行决策的。
一棵决策树包含一个根结点、若干个内部结点和若干个叶结点。
叶结点对应于决策结果(类别); 每个非叶结点对应一个测试属性;
有向边代表了属性值。
每个结点包含的样本集合根据属性测试被划分到子节点中;
根节点包含样本全集;
1.3. 树的生成
构建根节点,选择最优特征。按照特征划分子集,继续选择新的最优特征,直到没有合适特征或者全部被正确分类。
1.4. 决策树的构造是一个递归的过程,有三种情形会导致递归返回:

  • (1)当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;
  • (2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;
  • (3)前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

1.5. 决策树学习算法
在这里插入图片描述
1.6. 决策树学习通常包括3个步骤:

  • 特征选择(划分选择)、决策树生成、决策树剪枝。

2. 划分选择

2.1. 决策树学习的关键

如何选择最优化分属性。希望决策树的分支结点所包含的样本尽可能同属于同一类,即结点的“纯度”越来越高。通常特征选择的指标有:ID3、C4.5和CART

2.2. 信息增益(ID3)

2.2.1. 信息熵

度量样本集合纯度最常用的一种指标
假定当前样本集合D中第k类样本所占比例为 p k ( k = 1 , 2 , … , ∣ Y ∣ ) p_k(k=1,2,…,|\mathcal Y|) pk(k=1,2,,Y),则D的信息熵定义为:
E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k Ent(D)=-\sum_{k=1}^{\vert \mathcal Y \vert}p_k \log_2p_k Ent(D)=k=1Ypklog2pk

2.2.2. 信息增益

假设离散属性 a a a V V V个可能的取值 { a 1 , a 2 , . . . a V } \{ a^1,a^2,...a^V\} {a1,a2,...aV},若使用 a a a对样本集 D D D进行划分会产生 V V V个分支结点。 v v v代表第 v v v个分支结点,包含了 D D D中所有在属性 a a a上取值为 v v v的样本,记为 D v D^v Dv
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

  • 信息增益对取值数目较多的属性有所偏好。

2.2.3. ID3

ID3算法对训练数据集(或子集)D,计算其每个特征的信息增益,比较它们的大小,选择信息增益最大的特征。
课后题4.3答案:试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数据生成一棵决策树。并加入了对连续值的处理

2.3. 增益率/信息增益比(C4.5)

2.3.1 定义

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ IV(a)= -\sum_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv
I V ( a ) IV(a) IV(a)称为属性 a a a的“固有值”
增益率对取值数目较少的属性有所偏好。

2.3.2. C4.5

C4.5算法不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。这个地方很多博客的代码是不对的,他们直接选择增益率最大的属性。有可能分子分母都很小得到的增益率最高,这样是不对的。

2.4. 基尼系数(CART)

  • 数据集D的基尼值:
    G i n i ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ = ̸ k p k p k ′ = 1 − ∑ k = 1 ∣ Y ∣ p k 2 Gini(D)=\sum_{k=1}^{|\mathcal Y|}\sum_{k'=\not k}p_kp_{k'}=1-\sum_{k=1}^{|\mathcal Y|}p_k^2 Gini(D)=k=1Yk≠kpkpk=1k=1Ypk2
    G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率。 基尼值越小,数据集的纯度越高。
  • 属性a的基尼系数
    G i n i ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v) Gini(D,a)=v=1VDDvGini(Dv)
    选择那个使得划分后基尼指数最小的属性作为最优化分属性。

3. 剪枝处理

剪枝是决策树学习算法对付“过拟合”的主要手段

3.1. 预剪枝

  • 预剪枝是在决策树生成的过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
  • 预剪枝容易欠拟合

3.2. 后剪枝

  • 后剪枝是先从训练集生成一颗完整的决策树,然后自底向上对非叶结点进行考察点,若将该结点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶结点。实际情况性能保持不变,一般也会剪枝,因为根据奥卡姆剃刀准则,简单的模型更好。

4. 连续与缺失值

4.1. 连续值处理

4.1.1 连续属性离散化:二分法

给定样本集D与连续属性a,
1、首先将属性a的n个不同取值,从小到大进行排序,记为 { a 1 , a 2 , . . . , a n } \{a^1,a^2,...,a^n\} {a1,a2,...,an}
2、然后基于划分点 t t t,将D分为子集 D t − D_t^- Dt(≤t)和 D t + D_t^+ Dt+(>t),划分点 t t t是所有相邻属性值的平均值(n-1个)
划分点集合:
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a=\left\{\frac{a^i+a^{i+1}}{2}\mid1\leq i\leq n-1 \right\} Ta={2ai+ai+11in1}

4.1.2 连续属性离散化之后的信息增益

G a i n ( D , a ) = max ⁡ t ∈ T a   G a i n ( D , a , t ) = max ⁡ t ∈ T a   E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,a)=\max_{t\in T_a}\,Gain(D,a,t) \\=\max_{t\in T_a}\,Ent(D)-\sum_{\lambda\in \{-,+\}}\frac{| D_t^{\lambda} |}{|D|}Ent(D_t^{\lambda}) Gain(D,a)=tTamaxGain(D,a,t)=tTamaxEnt(D)λ{,+}DDtλEnt(Dtλ)

  • 选择使 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)最大的划分点。
  • 注意:和离散属性不同,若当前结点划分属性为连续属性,该属性还可以作为其后代结点的划分属性。

4.2. 缺失值处理

4.2.1 需要解决的两个问题

1)如何在属性值缺失的情况下选择最优划分属性?
2)给定划分属性,如何划分缺失该属性值的样本?
为每个样本x赋予一个权重 w x w_x wx
在这里插入图片描述

4.2.2. 解决方法

  • 1)选择最优划分特征:
    在这里插入图片描述
    其中,
    E n t ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k log ⁡ 2 p ~ k Ent(\tilde D)=-\sum_{k=1}^{|\mathcal Y| } \tilde p_k\log_2\tilde p_k Ent(D~)=k=1Yp~klog2p~k
    (在无缺失值得样本集上进行计算)
  • 2)给定划分属性,对缺失数据的某个样本进行划分:
    • 若样本x在划分属性a上的取值已知,则将x划入到取值对应的子结点,且样本权值在子结点中保持为 w x w_x wx
    • 若样本x在划分属性a上的取值未知,则将该样本以不同的概率划入到所有子结点中,该样本在分支结点中的权重变为 r ~ v ⋅ w x \tilde r_v\cdot w_x r~vwx

5. 多变量决策树


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

记录自己的学习过程,,如有不对的地方还请指教!如果你喜欢欢迎点赞、评论O(∩_∩)O

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值