【机器学习应用】决策树

news2025/5/15 0:56:57
这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:机器学习应用入门到进阶
🌏代码仓库:GitHub平台


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述
本文大致思维框架简图:
在这里插入图片描述

目录

  • 1.相关库
  • 2.决策树
  • 3.详讲类及参数
  • 4.百闻不如一见


1.相关库

相关库:Numpy、Pandas、Scipy、Scikit-learn(sklearn)、graphviz

  • 其中Scikit-learn
    是主流的机器学习库,包含市面上主流的机器学习算法,即分类回归聚类降维模型选择数据预处理

2.决策树

决策树是一种非参数的有监督学习方法,能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题

  • 算法核心:
    1.如何从数据表中找出最佳节点和最佳分支
    2.如何让决策树停止生长,防止过拟合
  • 应用模块:
    决策树中的类都在tree这个模块之下,该模块包含5个类分别为:
    1.tree.DecisionTreeClassifier
    2.tree.DecisionTreeRegreessor
    3.tree.export_graphviz
    4.tree.ExtraTreeClassifier
    5.tree.ExtraTreeRegressor

请添加图片描述

  • 应用步骤:
    1.实例化,建立评估模型对象
    2.通过模型接口训练模型
    3.通过模型接口提炼需要的信息

在这里插入图片描述


3.详讲类及参数

3.1.DecisionTreeClassifier类
在这里插入图片描述

  • 其中criterion参数为不纯度的计算方法
    不纯度越低,决策树对训练集的拟合越好(子节点不纯度一定低于父节点)。
    在这里插入图片描述
    区别:比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强,所以信息熵方法,会使决策树的生长更加精细,当决策树的拟合程度不够的时候,使用信息熵方法。但计算时间比基尼系数方法缓慢一些。而数据维度很大,噪声很大的时候使用基尼系数。

  • 其中random_state参数为控制随机性
    数可以随便,控制了之后,生成树也就固定了。但在高纬度时,随机性会表现更明显,低纬度的数据随机性几乎不会显现。
    随机性控制必要性:无论决策树模型如何进化,在分支上的本质都还是追求某个不纯度相关的指标的优化,而不纯度是基于节点来计算的,也就是说决策树在建树的时候是靠优化节点来追求一棵优化的树,但最优化的节点不能够保证最优化的树,而集成算法能有效的解决该问题,既然一棵树不能保证最优,那就建立更多的不同的树,然后从中选取最好的。在每一次分支时,不使用全部特征,而是随机选取一部分特征,从中选取不纯度相关指标最优的作为分支用的节点,这样每一次生成的树也就不同了。

  • 其中splitter参数也是用来控制决策树中的随机选项的
    best参数值:决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分支(本质上是根据属性feature _importances查看)
    random参数值:决策树在分支时会更加随机,树会更深,对于训练集的拟合将会降低,可以有效地防止过拟合。

  • 其中max_depth参数为限制树的最大深度
    超过设定深度的树枝全部剪掉,这是最广泛的剪枝参数,在高纬度低样本量中是非常有效 ,因为决策树多生长一层,对样本量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。(实际使用中建议从=3开始尝试看看拟合的效果,再决定是否增加设定深度)。

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

  • 其中max_feature&min_impurity_decrease参数
    max_feature限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。它是用来限制高维度数据的过拟和的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量而强行使决策树停下的参数。在不指导决策树的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。
    min_impurity_decrease是限制信息增益的大小,信息增益小于设定数值的分支就不会产生。

  • 其中class_weight&min_weight_fraction_leaf参数
    这两个参数是调整样本标签平衡的参数。因为在有些数据集中(例如一个办了银行卡的人是否会违约,是和否的概率分别为(1%、99%)),样本标签不平衡,在这种分类状况下,即使模型什么也不做,全把结果预测为否,正确率也有99%
    因此要class_weight对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类方向建模。但有了权重之后,样本量就不再是单纯的记录数目,而是受输入的权重影响了,因此剪枝就需要搭配min_weight_fraction_leaf这基于权重的剪枝参数来使用,可以更容易优化树结构,确保叶节点至少包含样本权重总和的一小部分。

  • 重要属性和接口
    属性是在模型训练之后,能够调用查看模型的各种性质。最重要属性的是 future_important能够查看各个特征对模型的重要性。
    在这里插入图片描述
    接口是指对模型进行交互的操作。 常见的有fit和score这两个接口分别是训练和得分,而apply和predict接口分别是返回测试集当中的索引和标签。
    在这里插入图片描述
    注意:所有接口中要求输入X_train和X_test的部分,输入的特征矩阵必须至少是一个二维矩阵,所有接口不接受任何一维矩阵作为特征矩阵,被输入的矩阵若真的只有一个特征则需要用reshape(-1,1)来给数据增维。

  • 注意事项
    1.因为在不加限制的情况下,一颗决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。但是往往会导致过拟合,也就是说它会在训练集上表现很好,在测试集上却表示糟糕,为了让决策树有更好的泛化性,我们要对决策树进行剪枝,剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。

  • 确定最优的剪枝参数
    1.使用确定超参数的曲线来进行判断每个参数填写什么值为最优。超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值之下模型表现的线。
    2.为了提高效率,网格搜索GridSearch(本质是枚举技术,实现了fit、score、交叉验证三个功能,缺点是耗时长)能够帮助我们同时调整多个参数,best_params_接口返回最佳参数组合,best_score_接口返回最佳精确性,但可能最佳精确性反而比原先更低,这是因为参数取值范围有些不合适,但它没法删除,只能强制去寻找最佳组合,这时候只能根据思考去判断哪些参数舍弃。

  • 总结一下
    在这里插入图片描述

3.2.DecisionTreeRegressor类
在这里插入图片描述

  • criterion参数为回归树衡量分支质量的指标
    mse属性值为使用均方误差,即使父节点和叶子节点之间的均方误差的差额作为特征选择的标准,这种方法通过使用叶子结点的均值来最小化L2损失。
    friedman_mse属性值为费尔德曼均方误差,可以使用费尔德曼针对潜在分支中的问题改进后的均方误差
    mae属性值为绝对平均误差,可以使用叶结点的中值来最小化L1损失。
    注意:
    1.在回归树中,mse不只是分枝质量衡量指标,也是最常用的衡量回归质量的指标。当我们在进行交叉验证或者使用其他方式获取回归树的结果时,往往选择均方误差作为我们的评估,mse值越小越好。但回归树的接口score返回的是R平方,并不是mse。而R平方最小可以为负无穷,最大为1(若模型的残差平方和远远大于模型的总平方和,则模型非常糟糕,R的平方就会为负)
    2.虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算"负均方误差"。因为均分误差本身是一种误差,被sklearn划分为模型的一种损失,所以都以负数表示。

3.3.export_graphviz类

  • 参数feature_names为特征的名字
  • 参数class_names为标签的名字
  • 参数filled为是否用颜色进行区分
  • 参数rounded是否边框有圆边

3.4.交叉验证(cross_val_score)

交叉验证(cross_val_score)是用来观察模型稳定性的一种方法,我们将数据划分成n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度。

  • cv参数为交叉验证次数(一般选为5)
  • scoring参数为评估结果的方法

4.百闻不如一见

  • 1.我已经将相关的练习决策树代码放入了GitHub和csdn资源中,有需要自取哈。
  • 2.相关练习代码主要包括分类实例、回归实例的练习以及用决策树方法处理kaggle竞赛中的泰坦尼克号数据。

5. 夹带私货

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强

好的,到此为止啦,祝您变得更强
在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统

本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。 关键词 条件筛选动态数据展示状态管理UI交互查询系统 一、功能说明 模拟火车票查询系统包含以下功…

JVM对象内存分配

1 栈上分配 栈空间随着方法执行完毕而回收通过栈上分配对象内存空间的方式,减少对堆空间的使用,从而减少gc的压力,提升程序性能 逃逸分析:分析对象的作用域,判断对象所需内存是否可以在栈上分配当对象没有被外部方法或…

Science Advances:一种多功能软变形和触觉显示器

01 内容概览现有技术缺点无法主动将变形的表面重新配置为各种 3D 形状。设备庞大复杂:机械装置依赖线性致动器和刚性结构,阻碍其小型化和实用性。功能单一:现有软材料驱动方案通常只能变形,缺乏多模态触觉反馈,难以满足…

如何从文档创建 RAG 评估数据集

我们在 Hugging Face Hub 上自动生成的 RAG 评估数据集(来自欧盟的PDF 输入文件,根据CC BY 4.0许可)。图片由作者提供 在本文中,我将向您展示如何创建自己的 RAG 数据集,该数据集包含任何语言的文档的上下文、问题和答…

flux中的缓存

1. cache,onBackpressureBuffer。都是缓存。cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存,但是当下游消费者的处理速度比上游生产者慢时,上游生产的数据会被暂时存储在缓冲区中,防止丢失。 2. Flux.range 默认…

CES Asia 2025:科技盛宴引领未来,BESTAR声学创新备受瞩目

随着科技行业的蓬勃发展,亚洲消费电子技术领域的年度盛会——CES Asia 2025(赛逸展)即将盛大举行。作为全球消费电子行业的风向标展会,CES Asia 2025吸引了众多顶尖科技企业参与,将围绕智能家居、智能出行、虚拟现实、…

HTML-CSS-常见标签与样式

目录 一. 央视新闻排版1.1 标题1.2 正文1.3 案例1.3.1 顶部导航栏1.3.2 flex布局1.3.3 表单标签1.3.4 表单项标签1.3.5 表格 1.3 课程总结 \quad 一. 央视新闻排版 \quad \quad 1.1 标题 \quad ALTp就是用AI快速生成 标题一共有6级 \quad 1.2 正文 \quad 定义视频 定义图片 样…

c++领域展开第九幕——类和对象(下篇收尾 友元函数、内部类、拷贝对象时的编译器优化)超详细!!!!

文章目录 前言一、友元函数二、内部类三、匿名对象四、对象拷贝时的编译器优化总结 前言 上篇博客我们学习了类和对象后期的一些内容——初始化列表、类型转换、static成员 今天我们来对类和对象进行最后的收尾 开始发车啦 一、友元函数 • 友元提供了一种突破类访问限定符封装…

LevelDB 源码阅读:利用 Clang 的静态线程安全分析

LevelDB 中有一些宏比较有意思,平时自己写代码的时候,还基本没用过。这些宏在 thread_annotations.h 中定义,可以在编译时使用 Clang 编译器的线程安全分析工具,来检测潜在的线程安全问题。 比如下面这些宏,到底有什么…

什么是实体完整性约束?

实体完整性约束是数据库设计中的一个核心概念,它确保了关系数据库中每个实体的唯一性和可标识性。以下是对实体完整性约束的详细解释: 一、定义 实体完整性约束是指关系的主关键字(Primary Key)不能重复,也不能取“空值…

OpenCV-Python实战(15)——像素直方图均衡画

一、像素均值与标准差 1.1 像素均值 cv2.mean() mean_val cv2.mean(img,mask*) mean_val:图像 BGR 通道的均值和透明度。 img:图像。 mask:可以选择是否添加掩膜,默认为:None。 import cv2 import numpy as npim…

推理加速:投机采样经典方法

一 SpecInfer 基于模型 SpecInfer([2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification) SpecInfer 投机采样利用多个小型模型(SSM)快速生…

Docker学习相关笔记,持续更新

如何推送到Docker Hub仓库 在Docker Hub新建一个仓库,我的用户名是 leilifengxingmw,我建的仓库名是 hello_world。 在本地的仓库构建镜像,注意要加上用户名 docker build -t leilifengxingmw/hello_world:v1 .构建好以后,本地会…

数据挖掘——支持向量机分类器

数据挖掘——支持向量机分类器 支持向量机最小间隔面推导基于软间隔的C-SVM非线性SVM与核变换常用核函数 支持向量机 根据统计学习理论,学习机器的实际风险由经验风险值和置信范围值两部分组成。而基于经验风险最小化准则的学习方法只强调了训练样本的经验风险最小…

HTML——54. form元素属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>form元素属性</title></head><body><!--form标签用于创建一个表单&#xff0c;会将里面的内容一起发送服务器&#xff0c;结构类似于表格--><!-…

拓扑排序模板题:洛谷-家谱树

原题链接&#xff1a;B3644 【模板】拓扑排序 / 家谱树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目&#xff1a; 题目描述 输入格式 输出格式 输入输出样例 思路&#xff1a; AC代码&#xff1a; 题目&#xff1a; 题目描述 有个人的家族很大&#xff0c;辈分…

JS实现SVG的TEXT标签自动换行功能

首先定义了一个RectAndText组件&#xff0c;这个组件实现了在矩形中显示居中的文本&#xff08;矩形可以根据自己需求要或者不要&#xff09; <template><rect :x"x" :y"y" :width"width" :height"height" :stroke"str…

网络安全 | 量子计算与网络安全:未来的威胁与机遇

网络安全 | 量子计算与网络安全&#xff1a;未来的威胁与机遇 一、前言二、量子计算对传统密码学的威胁2.1 量子计算原理概述2.2 量子计算破解密码的原理2.3 量子计算威胁的广泛影响 三、量子安全密码学&#xff1a;新的机遇3.1 量子安全密码学的研究方向3.2 量子安全密码学的安…

性能测试核心知识点 —— 负载模型!

性能测试是软件开发生命周期中非常重要的一环&#xff0c;通过对系统进行负载测试&#xff0c;可以评估系统在不同负载条件下的性能表现。而负载模型则是负载测试中的关键概念&#xff0c;它定义了测试的目标、策略、参数和流程&#xff0c;是进行性能测试的基础。 一、负载模型…

AURIX的TASKING链接文件语法学习

链接文件中的定义&#xff1a; group (ordered, contiguous, align 4, attributesrw, run_addr 0x70005000)//mem:dsram0){select ".data.user_test_data";select "(.data|.data*)";//select "(.bss|.bss*)"; //select ".bss.…