文章目录
1.信息论基础
1.1熵
熵表示随机变量不确定性的度量。熵越大,随机变量的不确定性越大。设
X
X
X 是一个取有限个值的离散随机变量,其概率分布为:
H
(
x
)
=
∑
i
=
1
n
p
i
l
o
g
p
i
H(x)=\sum_{i=1}^n{p_ilogp_i} \quad
H(x)=i=1∑npilogpi
1.2联合熵
联合熵就是度量一个联合分布的随机系统的不确定度,其物理意义为观察一个多个随机变量的随机系统获得的信息量。
分布为
p
(
x
,
y
)
p(x,y)
p(x,y)的一对随机变量
(
X
,
Y
)
(X,Y)
(X,Y),其联合熵定义为:
H
(
X
,
Y
)
=
−
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
l
o
g
p
(
x
;
y
)
=
E
[
l
o
g
1
p
(
x
,
y
)
]
H(X,Y)=-\sum_{x\in X}{\sum_{y\in Y}{p(x,y)logp(x;y)=E[log\frac{1}{p(x,y)}]}}
H(X,Y)=−x∈X∑y∈Y∑p(x,y)logp(x;y)=E[logp(x,y)1]
1.3信息增益
当熵和条件熵中的概率由数据估计得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵。信息增益表示得知特征
X
X
X的信息而使得类
Y
Y
Y的信息的不确定性减少的程度。
特征A对训练数据集
D
D
D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A),定义为集合
D
D
D的经验熵
H
(
D
)
H(D)
H(D)与特征A给定条件下
D
D
D的经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)之差,即
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
1.4基尼不纯度
定义:从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。基尼不纯度是在进行决策树编程的时候,对于混杂程度的预测中,一种度量方式。其公式为:


从上图可以看出,基尼系数和熵之半的曲线非常接近,仅仅在45度角附近误差稍大。因此,基尼系数可以做为熵模型的一个近似替代。
特点:
- 基尼不纯度可以作为衡量系统混乱程度的标准;
- 基尼不纯度越小纯度越高,集合的有序程度越高,分类的效果越好;
- 基尼不纯度为 0 时,表示集合类别一致;
- 在决策树中,比较基尼不纯度的大小可以选择更好的决策条件(子节点)。
2.决策树分类算法
2.1 ID3算法
ID3算法的核心是在决策树各个节点上面应用信息增益准则选择特征,递归构建决策树。ID3相当于用极大似然法进行概率模型的选择。具体方法是:
- 从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;
- 再对子结点递归调用以上方法,构建决策树;
- 直到所有特征的信息增益均很小或者没有特征可以选择为止。
2.2 C4.5算法
C4.5算法与ID3算法相似,C4.5在生成过程中,用信息增益比来选择特征。
2.3 CART分类树
CART算法是在给定输入随机变量
X
X
X条件下输出随机变量
Y
Y
Y的条件概率分布的学习方法。CATRT算法假设决策树是二叉树,左分支是取值为“是”的分支,右分支是取值为“否”的分支。
CART算法由以下两步组成:
- 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
- 决策树减枝:用验证数据集对已生成的树进行减枝并选择最优子树,减枝原则为损失函数最小。
3.回归树原理
一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。假如我们有
n
n
n个特征,每个特征有
s
i
(
i
∈
(
1
,
n
)
)
si(i∈(1,n))
si(i∈(1,n))个取值,遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征j的取值s,使得损失函数最小,这样就得到了一个划分点。
算法实现如下:

4.决策树防止过拟合手段
解决方法:考虑决策树的复杂度,对已生成的决策树进行简化,即剪枝。具体地,从已生成地树上裁掉一些子树和叶结点,并将其根结点或父结点作为新的叶节点,从而简化分类树模型。主要由“先剪枝”和“后剪枝”。
- 先剪枝:通过提前停止树的构建而对树“剪枝”,一旦停止,节点就成为树叶。该树叶可以持有子集元组中最频繁的类;
- 后剪枝:它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则确定。
5.模型评估
主要有自助法和准确度的区间估计
-
自助法:训练集是对于原数据集的有放回抽样,如果原始数据集 N N N,可以证明,大小为N的自助样本大约包含原数据63.2%的记录。当 N N N充分大的时候, 1 − ( 1 − 1 N ) N 1-(1-\frac{1}{N})^N 1−(1−N1)N;抽样 b b b 次,产生 b b b个bootstrap样本,则,总准确率为(accs为包含所有样本计算的准确率):

-
准确度的区间估计:将分类问题看做二项分布,则有:
令 X X X为模型正确分类, p p p 为准确率, X X X 服从均值 N p N_p Np、方差 N p ( 1 − p ) N_p(1-p) Np(1−p)的二项分布。 a c c = X N acc=\frac{X}{N} acc=NX为均值 p p p,方差 p 1 − p N p\frac{1-p}{N} pN1−p的二项分布。acc 的置信区间:

6.sklearn参数详解,Python绘制决策树
'''
scikit-learn中有两类决策树,它们均采用优化的CART决策树算法。
'''
from sklearn.tree import DecisionTreeRegressor
'''
回归决策树
'''
DecisionTreeRegressor(criterion="mse",
splitter="best",
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.,
min_impurity_split=None,
presort=False)
'''
参数含义:
1.criterion:string, optional (default="mse")
它指定了切分质量的评价准则。默认为'mse'(mean squared error)。
2.splitter:string, optional (default="best")
它指定了在每个节点切分的策略。有两种切分策咯:
(1).splitter='best':表示选择最优的切分特征和切分点。
(2).splitter='random':表示随机切分。
3.max_depth:int or None, optional (default=None)
指定树的最大深度。如果为None,则表示树的深度不限,直到
每个叶子都是纯净的,即叶节点中所有样本都属于同一个类别,
或者叶子节点中包含小于min_samples_split个样本。
4.min_samples_split:int, float, optional (default=2)
整数或者浮点数,默认为2。它指定了分裂一个内部节点(非叶子节点)
需要的最小样本数。如果为浮点数(0到1之间),最少样本分割数为ceil(min_samples_split * n_samples)
5.min_samples_leaf:int, float, optional (default=1)
整数或者浮点数,默认为1。它指定了每个叶子节点包含的最少样本数。
如果为浮点数(0到1之间),每个叶子节点包含的最少样本数为ceil(min_samples_leaf * n_samples)
6.min_weight_fraction_leaf:float, optional (default=0.)
它指定了叶子节点中样本的最小权重系数。默认情况下样本有相同的权重。
7.max_feature:int, float, string or None, optional (default=None)
可以是整数,浮点数,字符串或者None。默认为None。
(1).如果是整数,则每次节点分裂只考虑max_feature个特征。
(2).如果是浮点数(0到1之间),则每次分裂节点的时候只考虑int(max_features * n_features)个特征。
(3).如果是字符串'auto',max_features=n_features。
(4).如果是字符串'sqrt',max_features=sqrt(n_features)。
(5).如果是字符串'log2',max_features=log2(n_features)。
(6).如果是None,max_feature=n_feature。
8.random_state:int, RandomState instance or None, optional (default=None)
(1).如果为整数,则它指定了随机数生成器的种子。
(2).如果为RandomState实例,则指定了随机数生成器。
(3).如果为None,则使用默认的随机数生成器。
9.max_leaf_nodes:int or None, optional (default=None)
(1).如果为None,则叶子节点数量不限。
(2).如果不为None,则max_depth被忽略。
10.min_impurity_decrease:float, optional (default=0.)
如果节点的分裂导致不纯度的减少(分裂后样本比分裂前更加纯净)大于或等于min_impurity_decrease,则分裂该节点。
个人理解这个参数应该是针对分类问题时才有意义。这里的不纯度应该是指基尼指数。
回归生成树采用的是平方误差最小化策略。分类生成树采用的是基尼指数最小化策略。
加权不纯度的减少量计算公式为:
min_impurity_decrease=N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)
其中N是样本的总数,N_t是当前节点的样本数,N_t_L是分裂后左子节点的样本数,
N_t_R是分裂后右子节点的样本数。impurity指当前节点的基尼指数,right_impurity指
分裂后右子节点的基尼指数。left_impurity指分裂后左子节点的基尼指数。
11.min_impurity_split:float
树生长过程中早停止的阈值。如果当前节点的不纯度高于阈值,节点将分裂,否则它是叶子节点。
这个参数已经被弃用。用min_impurity_decrease代替了min_impurity_split。
12.presort: bool, optional (default=False)
指定是否需要提前排序数据从而加速寻找最优切分的过程。设置为True时,对于大数据集
会减慢总体的训练过程;但是对于一个小数据集或者设定了最大深度的情况下,会加速训练过程。
---------------------
参考资料
- https://www.zhihu.com/question/22178202
- https://blog.csdn.net/SAJIAHAN/article/details/82779513
- https://blog.csdn.net/JJBOOM425/article/details/79997440 决策树中基尼不纯度
- https://blog.csdn.net/weixin_40604987/article/details/79296427 回归树
- https://blog.csdn.net/longgb123/article/details/52972604 决策树模型评估
- https://blog.csdn.net/Yeoman92/article/details/73436632 绘制1
- https://blog.csdn.net/sinat_29957455/article/details/76553987 绘制2

本文深入解析决策树算法,涵盖信息论基础、ID3、C4.5、CART算法,探讨回归树原理及决策树防过拟合手段。详述sklearn决策树参数配置,助您掌握决策树构建与评估。

1470

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



