《老饼讲解机器学习》http://ml.bbbdata.com/teach#102


目录

一.预剪枝即调参

二.调参方法

(1) 默认值预观察生长的树

(2) 参数限制节点过分生长


为预防模型过拟合,我们可以采用预剪枝和后剪枝方法
1. 预剪枝:树构建过程,达到一定条件就停止生长
2. 后剪枝是等树完全构建后,再剪掉一些节点。

本文讲述预剪枝,后剪枝请参考《sklearn决策树后剪枝

一.预剪枝即调参

预剪枝是树构建过程,达到一定条件就停止生长,

在sklearn中,实际就是调整以下几个训练参数:
min_samples_leaf             :叶子节点最小样本数。
min_samples_split            :节点分枝最小样本个数
max_depth                         :树分枝的最大深度
min_weight_fraction_leaf :叶子节点最小权重和
min_impurity_decrease    :节点分枝最小纯度增长量
max_leaf_nodes                :最大叶子节点数

一般来说,只调这三个        :max_depth,min_samples_leaf,min_samples_split

二.调参方法

先用默认值,让树完整生长,再参考完全生长的决策树的信息,通过参数,对过分生长的节点作出限制。

例子
(1) 默认值预观察生长的树 

from sklearn.datasets import load_iris
from sklearn import tree
import numpy as np
import pandas as pd
#--------数据加载-----------------------------------
iris = load_iris()                          # 加载数据
X = iris.data
y = iris.target
#-------用最优参数训练模型------------------
clf = tree.DecisionTreeClassifier(random_state=0)
clf = clf.fit(X, y)
depth = clf.get_depth()
leaf_node = clf.apply(X)
#-----观察各个叶子节点上的样本个数---------
df  = pd.DataFrame({"leaf_node":leaf_node,"num":np.ones(len(leaf_node)).astype(int)})
df  = df.groupby(["leaf_node"]).sum().reset_index(drop=False)
df  = df.sort_values(by='num').reset_index(drop=True)
print("\n==== 树深度:",depth," ============")
print("==各个叶子节点上的样本个数:==")
print(df)

运行结果:

==== 树深度: 5  ============
==各个叶子节点上的样本个数:==leaf_node  num
0          6    1
1         11    1
2         15    1
3         10    2
4         14    2
5          8    3
6         16   43
7          5   47
8          1   50

(2) 参数限制节点过分生长

我们可以看到,有很多叶子节点只有一两个样本,这样很容易过拟合,因此我们把min_samples_leaf 调为3:

#-------用新调整的参数训练模型------------------
clf = tree.DecisionTreeClassifier(random_state=0,max_depth=4,min_samples_leaf=10)
clf = clf.fit(X, y)
depth = clf.get_depth()
leaf_node = clf.apply(X)
#-----观察各个叶子节点上的样本个数---------
df  = pd.DataFrame({"leaf_node":leaf_node,"num":np.ones(len(leaf_node)).astype(int)})
df  = df.groupby(["leaf_node"]).sum().reset_index(drop=False)
df  = df.sort_values(by='num').reset_index(drop=True)
print("\n==== 树深度:",depth," ============")
print("==各个叶子节点上的样本个数:==")
print(df)

运行结果:

==== 树深度: 4  ============
==各个叶子节点上的样本个数:==leaf_node  num
0          6   11
1          9   11
2          7   14
3          5   29
4         10   35
5          1   50

可以看到,最少的一个叶子,也有11个样本了。

在实际中,需要更灵活的思路,本文仅讲预剪枝的基本操作。

相关文章

《深入浅出:决策树入门简介》

《一个简单的决策树分类例子》

《sklearn决策树结果可视化》

《sklearn决策树参数详解》

sklearn决策树预剪枝相关推荐

  1. 细讲sklearn决策树后剪枝(带例子)

    <老饼讲解机器学习>http://ml.bbbdata.com/teach#103 目录 一.CCP后剪枝简介 二.剪枝操作过程 (1) 查看CCP路径 (2)根据CCP路径剪树 为预防模 ...

  2. 决策树——预剪枝和后剪枝

    一. 为什么要剪枝 1.未剪枝存在的问题 决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即容易出现过拟合现象.解 ...

  3. 决策树第二部分预剪枝

    决策树预剪枝: 决策树可以分成ID3.C4.5和CART. 算法目的:决策树的剪枝是为了简化决策树模型,避免过拟合. 剪枝类型:预剪枝.后剪枝 预剪枝:在构造决策树的同时进行剪枝.所有决策树的构建方法 ...

  4. 决策树的预剪枝与后剪枝

    前言: 本次讲解参考的仍是周志华的<机器学习>,采用的是书中的样例,按照我个人的理解对其进行了详细解释,希望大家能看得懂. 1.数据集 其中{1,2,3,6,7,10,14,15,16,1 ...

  5. 机器学习:决策树的预剪枝和后剪枝

    述概: 剪枝:在机器学习的决策树算法中,为防止过拟合现象和过度开销,而采用剪枝的方法,主要有预剪枝和后剪枝两种常见方法. 预剪枝:在决策树生成的过程中,预先估计对结点进行划分能否提升决策树泛化性能.如 ...

  6. 决策树剪枝的基本策略有预剪枝和后剪枝,请简述并分析两种剪枝策略

    1.决策树是一类常见的机器学习方法,是基于树结构进行决策的.一般的,一棵决策树包含两类结点:内部节点和叶结点,其中内部节点表示表示一个特征或属性,叶结点表示__决策结果____. 2.在决策树学习中, ...

  7. sklearn决策树怎么使用ccp_alpha进行剪枝

    本站原创文章,转载请说明来自<老饼讲解-机器学习>ml.bbbdata.com 目录 一.CCP后剪枝是什么 二.如何通过ccp_alpha进行后剪枝 (1) 查看CCP路径 (2)根据C ...

  8. 决策树剪枝:预剪枝、后剪枝

    一棵完全生长的决策树会面临一个很严重的问题,即过拟合.当模型过拟合进行预测时,在测试集上的效果将会很差.因此我们需要对决策树进行剪枝, 剪掉一些枝叶,提升模型的泛化能力. 决策树的剪枝通常有两种方法, ...

  9. 【ML】决策树--剪枝处理(预剪枝、后剪枝)

    1. 剪枝(pruning)处理 首先,我们先说一下剪枝的目的--防止"过拟合". 在决策树的学习过程中,为了保证正确性,会不断的进行划分,这样可能会导致对于训练样本能够达到一个很 ...

最新文章

  1. 新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
  2. UICollectionView框架总结
  3. iOS开发-模板方法模式
  4. linux shell 从变量中按指定字符切割字符串
  5. python利用列表计算斐波那契数列前30项_python斐波那契数列的计算方法
  6. 神经网络最常用的10个激活函数,一文详解数学原理及优缺点
  7. Emscripten 单词_极光单词独创多种学习方法助您高效背单词
  8. SpringBoot2.0之四 简单整合MyBatis
  9. Android P(3)---Android P 功能和 API
  10. C++ 拷贝构造函数
  11. Blas SGEMM launch failed
  12. Jmeter查看log日志
  13. PE启动盘安装操作系统
  14. 计算机基础知识精品课程,计算机应用基础精品课程课件第1课计算机基础知识第课计算机基础.PDF...
  15. 社工程序员(社会工程学)有关概述与讲解
  16. 通用数据权限管理系统设计
  17. 从D语言看C++ Template语法
  18. 利用Winrar自解压捆绑文件
  19. 加多芬科技讲解目前趋势“不带钱包出门”已成趋势 无现金支付你准备好了吗?
  20. Django中内置的User模型

热门文章

  1. Linux学习:计算机概论
  2. unity跳转场景变暗的解决办法
  3. 一行代码实现音频变速不变调
  4. 淘宝双11数据分析与预测
  5. SAOPUI调用EAS接口
  6. 每天一个 Linux 命令(55):traceroute命令
  7. 海投简历无回应?是不是你写简历的方式错了?
  8. 介绍几款实用好看的WordPress主题
  9. GJB 5000B与GJB 5000A的区别
  10. 基于ISD1760的语音时钟播报系统