sklearn中的决策树-分类树:剪枝参数

devtools/2025/2/28 18:59:35/

剪枝参数

  • 在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树 往往会过拟合。为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化 决策树算法的核心。sklearn为我们提供了不同的剪枝策略:
max_depth
  • 限制树的最大深度,超过设定深度的树枝全部剪掉

    这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。决策树多生长一层,对样本量的需求会增加一倍,所 以限制树深度能够有效地限制过拟合。在集成算法中也非常实用。实际使用时,建议从=3开始尝试,看看拟合的效 果再决定是否增加设定深度。

min_samples_leaf & min_samples_split
  • min_samples_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分 枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。

    min_samples_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分 枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生 一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设置得太小会引 起过拟合,设置得太大就会阻止模型学习数据。一般来说,建议从=5开始使用。如果叶节点中含有的样本量变化很 大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题 中避免低方差,过拟合的叶子节点出现。对于类别不多的分类问题,=1通常就是最佳选择。

  • min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则 分枝就不会发生。

  • min_samples_leaf = 10

    min_samples_split = 25

    # -*- coding: utf-8 -*-"""
    **************************************************
    @author:   Ying                                      
    @software: PyCharm                       
    @file: 3、分类树_min_samples_leaf& min_samples_split.py
    @time: 2021-08-26 10:51                          
    **************************************************
    """
    from sklearn import tree
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    import pandas as pd
    import graphviz# 加载数据
    wine = load_wine()
    data = pd.DataFrame(wine.data, columns=wine.feature_names)  # X
    target = pd.DataFrame(wine.target)  # y# 划分训练测试集
    X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3)clf = tree.DecisionTreeClassifier(criterion="entropy", random_state=30, splitter="random", max_depth=3, min_samples_leaf=10, min_samples_split=25)clf.fit(X_train, y_train)
    score = clf.score(X_test, y_test)  # 返回预测的准确度# 保存决策树
    feature_name = ['酒精', '苹果酸', '灰', '灰的碱性', '镁', '总酚', '类黄酮', '非黄烷类酚类','花青素', '颜色强度', '色调', 'od280/od315稀释葡萄酒', '脯氨酸']dot_data = tree.export_graphviz(clf, feature_names=feature_name, class_names=["琴酒", "雪莉", "贝尔摩德"], filled=True  # 填充颜色, rounded=True  # 圆角)
    graph = graphviz.Source(dot_data)graph.render(view=True, format="png", filename="./save/decisiontree_pdf")# 特征重要性
    feature_importances = clf.feature_importances_a = pd.DataFrame([*zip(feature_name, feature_importances)])
    a.columns = ['feature', 'importance']
    a.sort_values('importance', ascending=False, inplace=True)
    print(a)
    

    image-20210826110623238

max_features & min_impurity_decrease
  • 一般max_depth使用,用作树的”精修“ max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。和max_depth异曲同工, max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量 而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型 学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。 min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。这是在0.19版本中更新的 功能,在0.19版本之前时使用min_impurity_split。
确定最优剪枝参数(超参数曲线)
  • 那具体怎么来确定每个参数填写什么值呢?这时候,我们就要使用确定超参数的曲线来进行判断了,继续使用我们 已经训练好的决策树模型clf。超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲 线,它是用来衡量不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是score。

    # -*- coding: utf-8 -*-"""
    **************************************************
    @author:   Ying                                      
    @software: PyCharm                       
    @file: 4、分类树_超参数曲线.py
    @time: 2021-12-01 11:28                          
    **************************************************
    """from sklearn import tree
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    import pandas as pd
    import matplotlib.pyplot as plt# 加载数据
    wine = load_wine()
    data = pd.DataFrame(wine.data, columns=wine.feature_names)  # X
    target = pd.DataFrame(wine.target)  # y# 划分训练测试集
    X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3)test = []
    for i in range(10):clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=10,splitter='random')clf = clf.fit(X_train, y_train)score = clf.score(X_test, y_test)test.append(score)
    plt.plot(range(1,11),test,color="red",label="max_depth")
    plt.legend()
    plt.show()
    

    image-20211201113350789



http://www.ppmy.cn/devtools/163420.html

相关文章

Shor算法:解密现代加密技术的未来武器

Shor算法:解密现代加密技术的未来武器 大家好,我是Echo_Wish。今天我们要探讨一个充满未来感的话题:Shor算法在现代加密破解中的潜力。自从量子计算机的概念提出以来,人们一直在研究它对现代加密技术的影响。而Shor算法正是其中的核心,它具有破解目前广泛使用的RSA加密的…

go实现敏感词过滤

go敏感词过滤 实现思路: 1.敏感词库加载 2.敏感词匹配 3.敏感词替换 敏感词库 这里使用的的是敏感词库 下载后将敏感词处理成一个字符串切片加载到内存中 //go:embed sensitive_words_lines.txt var sensitiveWordsFile stringfunc InitSensitiveWords() (sensitiveWor…

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO,每个GPIO用于管理多个芯片进行输入,输出工作 引脚电平 0v ~3.3v,部分引脚可容任5v 输出模式下可控制端口输出高低电平,可以驱动LED,控制蜂鸣器,模拟通信协议&a…

RFID测温技术:为生产安全与稳定保驾护航

在科技浪潮汹涌澎湃的当下,工业生产对于安全性和稳定性的追求达到了全新高度。各类保障生产安全的技术百花齐放,而RFID测温技术凭借其独树一帜的特性,在其中崭露头角,如同一位坚毅可靠的守护者,全方位筑牢生产安全的坚…

倚光科技:助力玻璃非球面的打样与小批量生产

在现代光学和精密制造领域,非球面光学元件凭借其卓越的光学性能,已成为推动高端科技发展的核心组件。相比于传统的球面透镜,非球面透镜能够显著减少光学系统中的像差和畸变,大幅提升成像质量、系统紧凑性和能量利用率。因此&#…

CSS 媒体查询:从入门到精通,打造跨设备完美体验

在当今移动互联网时代,用户访问网站的设备早已不再局限于桌面电脑,手机、平板等各种屏幕尺寸的设备层出不穷。为了确保用户在不同设备上都能获得良好的浏览体验,响应式网页设计应运而生。而 CSS 媒体查询,正是实现响应式设计的核心…

【图文详解】论文《Attention Is All You Need》的Encoder和Decoder的流程

文章目录 前言一、Transformer总体结构二、Encoder(编码器)流程三、Decoder(解码器)流程四、Decoder 中两个多头注意力机制区别五、QKV 计算方式六、总结 前言 亲爱的家人们,创作很不容易,若对您有帮助的话…

MATLAB基础学习相关知识

MATLAB安装参考:抖音-记录美好生活 MATLAB基础知识学习参考:【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分:变量定义和基本运算 生成矩阵: % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…