决策树

  1. 特点:自上而下,有监督学习,常被用于分类和回归
  2. 作用:对样本数据进行树形分类的过程
  3. 构成:结点和有向边。结点:内部结点和叶结点,内部结点:一个特征或属性;叶结点:类别。
  4. 过程:从顶部根结点开始,所有样本聚在一起,经过根结点的划分,样本被分到不同的子结点中,再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中。
  5. 决策树的生成包含:特征选择树的构造树的剪枝三个过程
  6. 完全生长的决策树的特点:简单直观、解释性强

特征选择:纯度、信息熵和信息增益

纯度:让目标变量的分歧最小
信息熵:信息的不确定度,衡量一组样本的混乱程度,样本越混乱,越不容易做出决定

在这里插入图片描述
p(i|t)代表了结点t为分类i的概率。当信息的不确定度越大时,它所包含的信息量也就越大,信息熵也就越高,纯度越低。当集合中的所有样本均匀混合时,信息熵最大,纯度最低,也最难做出决定。
用特征对样本进行划分之后,就会让混乱程度减小,熵变小,纯度变高

信息增益:在得知特征X的信息后而使得类Y的信息不确定性减少的程度。

在这里插入图片描述
划分之前的信息熵与给定一个特征a划分样本之后的信息熵之差,就是特征a带来的信息增益。

决策树构造准则

ID3——最大信息增益

在这里插入图片描述

C4.5——最大信息增益比

在这里插入图片描述

CART——最大基尼指数(Gini)

在这里插入图片描述
基尼系数越小,样本之间的差异性小,不确定程度低。分类的过程就是不确定度降低的过程,即纯度的提升过程。所以,CART算法在构造分类树的时候,会选择基尼系数最小的属性作为属性的划分。
举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ID3:
在这里插入图片描述
C4.5:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对比
  1. ID3是采用信息增益作为评价标准,会倾向于取值较多的特征。因为,信息增益反映的是给定条件以后不确定性减少的程度特征取值越多就意味着确定性更高,也就是条件熵越小,信息增益越大。这在实际应用中是一个缺陷。C4.5是对ID3进行优化,通过引入信息增益比,一定程度上对取址比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
  2. 从样本类型角度,ID3只能处理离散型变量,C4.5和CART可以处理连续型变量C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续变量转换为多个取值区间的离散型变量。CART,由于其构建时每次都会对特征进行二值划分,因此可以很好的适用于连续型变量。
  3. 应用角度,ID3和C4.5只能用于分类CART 可以用于分类也可用于回归

决策树sklearn实战

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion = 'gini')
clf = clf.fit(train_features, train_labels)
test_predict = clf.predict(test_features)
score = accuracy_score(test_labels, test_predict)
#criterion有两个取值:
#entropy:基于信息熵,即ID3算法,结果与C4.5相差不大,sklearn未提供C4.5
#gini:默认参数。基于基尼系数。CART算法是基于基尼系数做属性划分的

在这里插入图片描述
代码

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

iris = load_iris()
features = iris.data
labels = iris.label
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size = 0.33, random_state = 0.0)
clf = DecisionTreeClassifier(criterion = 'gini')
clf = clf.fit(train_features, train_labels)
test_predict = clf.predict(test_features)
score = accuracy_score(test_labels, test_predict)
print("准确率为%.4lf" % score)


决策树进行剪枝

原因:

完全生长的决策树:过拟合,剪掉一些枝叶,提升模型的泛化能力

方法:

预剪枝:在生成决策树的过程中提前停止决策树的生长
后剪枝:在已生成得过拟合决策树上进行剪枝,得到简化版的剪枝决策树

预剪枝

核心思想:

在树中结点进行扩展之前,先计算当前的划分是否能带来泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票原则盘算该结点所属类别。

停止判断

1)当树到达一定深度的时候,停止树的生长
2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长
3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。

特点:

**优点:**思想直接、算法简单、效率高,适合解决大规模的问题。
**缺点:**如何准确的估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断;有欠拟合的风险,虽然当前划分会导致测试集准确率降低,但在之后的划分中,准确率可能会显著上升。

后剪枝

核心思想:

让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。

特点

**优点:**相比于预剪枝,后剪枝通常可以得到泛化能力更强的决策树
**缺点:**时间开销会增大

代价复杂度剪枝CCP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值