【任务3】 决策树算法梳理

1、信息论基础

若利用一个特征进行分类的结果与随机分类的结果没有很大差异,则称这个特征是没有分类能力的。特征选择的准则是信息增益或信息增益比。

1)熵

在信息论与概率统计中,熵表示随机变量不确定性的度量。设X是一个取有限个值得离散随机变量,其概率分布为:

则随机变量X的熵定义为:

其中n是分类的数目。熵越大,随机变量的不确定性就越大。

2)条件熵

H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

同理,当条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的条件熵称为条件经验熵(empirical conditional entropy)。

3)信息增益

信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益g(D, A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即

4)基尼不纯度

分类问题中,假设有K个类,样本点属于第K类的概率为pk,则概率分布的基尼系数定义为:

若样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分,即

则在特征A的条件下,集合D的基尼指数定义为

基尼系数Gini(D)表示集合D的不确定性,表示经A=a分割后集合D的不确定性。基尼系数越大,样本集合的不确定性越大,与熵类似。

2、决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

1)ID3算法

该算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

其具体方法为:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择,但是它只有树的生成,所以该算法生成的树容易产生过拟合。

2)C4.5

与ID3算法相似,C4.5算法对ID3算法进行了改进,C4.5在生成的过程中,用信息增益比来选择特征。

3)CART

CART模型由特征选择、树生成及剪枝组成,既可用于分类也可用于回归。

CART是在给定输入随机变量X条件下输出变量Y的条件概率分布的学习方法。它假定决策树是二叉树,内部取值为“是”(左分支)和“否”(右分支)。

它的基本步骤为:

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大。

(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这是用损失函数最小作为剪枝的标准。

其中对分类树用基尼系数最小化准则,进行特征选择,生成二叉树;利用最小二乘回归树算法生成回归树。

3、回归树原理

假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集

利用最小二乘回归树算法生成回归树f(x),即在训练数据集所在的输入空间中,递归地将每个区域分为两个子区域并决定每个子区域上的输出值,构建二叉决策树,步骤如下:

1)选择最优切分变量j与切分点s,求解

遍历变量j,对固定的切分变量j扫描切分点s,选择使上式达到最小值的对j,s

2)用选定的对(j,s)划分区域并决定相应的输出值:

3)继续对两个子区域调用步骤1、2,直至满足停止条件。

4)将输入空间划分为M个区域R1,R2,...RM,在每个单元Rm上有一个固定的输出值Cm,生成决策树:

 

4、决策树防止过拟合手段

决策树的过拟合是指学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决过拟合的方法就是考虑决策树的复杂度,对已生成的决策树进行简化,即剪枝(从已生成的树上裁剪掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型)。

决策树生成只考虑了通过信息增益对训练数据进行更好的拟合,而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。此损失函数的极小化等价于正则化的极大似然估计,即利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

5、模型评估

1)自助法(bootstrap):

训练集是对于原数据集的有放回抽样,如果原始数据集N,可以证明,大小为N的自助样本大约包含原数据63.2%的记录。当N充分大的时候,1-(1-1/N)^(N) 概率逼近 1-e^(-1)=0.632。抽样 b 次,产生 b 个bootstrap样本,则,总准确率为(accs为包含所有样本计算的准确率): 
 

2)准确度的区间估计:

将分类问题看做二项分布,则有: 令 X 为模型正确分类,p 为准确率,X 服从均值 Np、方差 Np(1-p)的二项分布。acc=X/N为均值 p,方差 p(1-p)/N 的二项分布。acc 的置信区间: 

 

6、sklearn参数详解,Python绘制决策树

(1)sklearn参数详解

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)

1)criterion:特征选择的标准,有信息增益和基尼系数两种,使用信息增益的是ID3和C4.5算法(使用信息增益比),使用基尼系数的CART算法,默认是gini系数。

2)splitter:特征切分点选择标准,决策树是递归地选择最优切分点,spliter是用来指明在哪个集合上来递归,有“best”和“random”两种参数可以选择,best表示在所有特征上递归,适用于数据集较小的时候,random表示随机选择一部分特征进行递归,适用于数据集较大的时候。

3)max_depth:决策树最大深度,决策树模型先对所有数据集进行切分,再在子数据集上继续循环这个切分过程,max_depth可以理解成用来限制这个循环次数。

4)min_samples_split:子数据集再切分需要的最小样本量,默认是2,如果子数据样本量小于2时,则不再进行下一步切分。如果数据量较小,使用默认值就可,如果数据量较大,为降低计算量,应该把这个值增大,即限制子数据集的切分次数。

5)min_samples_leaf:叶节点(子数据集)最小样本数,如果子数据集中的样本数小于这个值,那么该叶节点和其兄弟节点都会被剪枝(去掉),该值默认为1。

6)min_weight_fraction_leaf:在叶节点处的所有输入样本权重总和的最小加权分数,如果不输入则表示所有的叶节点的权重是一致的。

7)max_features:特征切分时考虑的最大特征数量,默认是对所有特征进行切分,也可以传入int类型的值,表示具体的特征个数;也可以是浮点数,则表示特征个数的百分比;还可以是sqrt,表示总特征数的平方根;也可以是log2,表示总特征数的log个特征。

8)random_state:随机种子的设置,与LR中参数一致。

9)max_leaf_nodes:最大叶节点个数,即数据集切分成子数据集的最大个数。

10)min_impurity_decrease:切分点不纯度最小减少程度,如果某个结点的不纯度减少小于这个值,那么该切分点就会被移除。

11)min_impurity_split:切分点最小不纯度,用来限制数据集的继续切分(决策树的生成),如果某个节点的不纯度(可以理解为分类错误率)小于这个阈值,那么该点的数据将不再进行切分。

12)class_weight:权重设置,主要是用于处理不平衡样本,与LR模型中的参数一致,可以自定义类别权重,也可以直接使用balanced参数值进行不平衡样本处理。

13)presort:是否进行预排序,默认是False,所谓预排序就是提前对特征进行排序,我们知道,决策树分割数据集的依据是,优先按照信息增益/基尼系数大的特征来进行分割的,涉及的大小就需要比较,如果不进行预排序,则会在每次分割的时候需要重新把所有特征进行计算比较一次,如果进行了预排序以后,则每次分割的时候,只需要拿排名靠前的特征就可以了。

(2)Python绘制决策树

1)在绘制决策树的时候,我们需要先规定决策树的结构,树的结构形式如:{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}},以字典的结构来存放树,如果将上面的树的结构绘制成图,如下

2)在绘制树的时候,我们需要知道树的叶子节点和树的深度,从而让我们便于计算节点所处的位置。获取叶子节点的数目,图中的no、no、yes节点就表示叶子节点。

3)获取树的深度:

4)获取树的叶子节点和树的深度之后,绘制树:

 

参考链接:https://blog.csdn.net/longgb123/article/details/52972604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值