《老饼讲解机器学习》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. Windows下svn客户端和服务器的安装使用
  2. @scheduled注解配置时间_探究 Spring 的定时任务配置
  3. 验证码识别的原理python_Python验证码识别处理实例
  4. java实现未读消息提醒_Android自定义View之未读消息提示
  5. uva 12442 . Forwarding Emails
  6. suse下删除mysql_每日MySQL之005:SUSE linux下卸載MySQL
  7. 记录qt窗口在拖动过程中出现的问题
  8. 阶段3 1.Mybatis_10.JNDI扩展知识_3 补充-测试JNDI数据源的使用以及使用细节
  9. 计算机研究生复试常见面试题——计算机网络部分
  10. Navicat安装问题及解决办法
  11. RocketMQ 源码分析 14 事务消息02
  12. w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
  13. 电机驱动模块--L298N
  14. cordova下使用高德地图js api在4g流量下定位失败问题的解决
  15. B550M主板组建raid
  16. 浏览器中的js不能同步更新的解决方案
  17. java判断南北纬度的分界线_中国地理之南北分界线,一看就知道自己是南方人还是北方人...
  18. Gitlab Runner 部署
  19. 华为手机自带语音转文字的功能,转换方法如下
  20. 手机玩游戏卡顿怎么办。

热门文章

  1. Linuxcnc-Ighethercat 调试心得
  2. 速知!PMI-ACP认证是什么?
  3. python 分支流程if语句 200309
  4. C语言进阶第十篇【程序的编译(预处理操作)+链接】
  5. 【原创】Python 图片拼接
  6. html5篮球数据,我做了一个模拟篮球比赛的数据网页游戏
  7. TI AM335X几款开发板推荐
  8. engine的工具中实现Snapping(捕捉)
  9. (附源码)springboot网上报销系统的设计与实现 毕业设计131706
  10. C语言数字图像处理进阶---13 Ins1977滤镜