sklearn决策树预剪枝
《老饼讲解机器学习》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决策树预剪枝相关推荐
- 细讲sklearn决策树后剪枝(带例子)
<老饼讲解机器学习>http://ml.bbbdata.com/teach#103 目录 一.CCP后剪枝简介 二.剪枝操作过程 (1) 查看CCP路径 (2)根据CCP路径剪树 为预防模 ...
- 决策树——预剪枝和后剪枝
一. 为什么要剪枝 1.未剪枝存在的问题 决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即容易出现过拟合现象.解 ...
- 决策树第二部分预剪枝
决策树预剪枝: 决策树可以分成ID3.C4.5和CART. 算法目的:决策树的剪枝是为了简化决策树模型,避免过拟合. 剪枝类型:预剪枝.后剪枝 预剪枝:在构造决策树的同时进行剪枝.所有决策树的构建方法 ...
- 决策树的预剪枝与后剪枝
前言: 本次讲解参考的仍是周志华的<机器学习>,采用的是书中的样例,按照我个人的理解对其进行了详细解释,希望大家能看得懂. 1.数据集 其中{1,2,3,6,7,10,14,15,16,1 ...
- 机器学习:决策树的预剪枝和后剪枝
述概: 剪枝:在机器学习的决策树算法中,为防止过拟合现象和过度开销,而采用剪枝的方法,主要有预剪枝和后剪枝两种常见方法. 预剪枝:在决策树生成的过程中,预先估计对结点进行划分能否提升决策树泛化性能.如 ...
- 决策树剪枝的基本策略有预剪枝和后剪枝,请简述并分析两种剪枝策略
1.决策树是一类常见的机器学习方法,是基于树结构进行决策的.一般的,一棵决策树包含两类结点:内部节点和叶结点,其中内部节点表示表示一个特征或属性,叶结点表示__决策结果____. 2.在决策树学习中, ...
- sklearn决策树怎么使用ccp_alpha进行剪枝
本站原创文章,转载请说明来自<老饼讲解-机器学习>ml.bbbdata.com 目录 一.CCP后剪枝是什么 二.如何通过ccp_alpha进行后剪枝 (1) 查看CCP路径 (2)根据C ...
- 决策树剪枝:预剪枝、后剪枝
一棵完全生长的决策树会面临一个很严重的问题,即过拟合.当模型过拟合进行预测时,在测试集上的效果将会很差.因此我们需要对决策树进行剪枝, 剪掉一些枝叶,提升模型的泛化能力. 决策树的剪枝通常有两种方法, ...
- 【ML】决策树--剪枝处理(预剪枝、后剪枝)
1. 剪枝(pruning)处理 首先,我们先说一下剪枝的目的--防止"过拟合". 在决策树的学习过程中,为了保证正确性,会不断的进行划分,这样可能会导致对于训练样本能够达到一个很 ...
最新文章
- Windows下svn客户端和服务器的安装使用
- @scheduled注解配置时间_探究 Spring 的定时任务配置
- 验证码识别的原理python_Python验证码识别处理实例
- java实现未读消息提醒_Android自定义View之未读消息提示
- uva 12442 . Forwarding Emails
- suse下删除mysql_每日MySQL之005:SUSE linux下卸載MySQL
- 记录qt窗口在拖动过程中出现的问题
- 阶段3 1.Mybatis_10.JNDI扩展知识_3 补充-测试JNDI数据源的使用以及使用细节
- 计算机研究生复试常见面试题——计算机网络部分
- Navicat安装问题及解决办法
- RocketMQ 源码分析 14 事务消息02
- w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
- 电机驱动模块--L298N
- cordova下使用高德地图js api在4g流量下定位失败问题的解决
- B550M主板组建raid
- 浏览器中的js不能同步更新的解决方案
- java判断南北纬度的分界线_中国地理之南北分界线,一看就知道自己是南方人还是北方人...
- Gitlab Runner 部署
- 华为手机自带语音转文字的功能,转换方法如下
- 手机玩游戏卡顿怎么办。