【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。


文章目录

    • 🎯 1. 基本介绍
    • 💡 2. 原理介绍
      • 2.1 信息增益
      • 2.2 基尼指数
      • 2.3 CART树的原理推导
    • 🔍 3. 代码实践
      • 3.1 sklearn代码实践
      • 3.2 高阶用法
    • 🔍 4. 注意事项
    • 🔍 5. 总结

🎯 1. 基本介绍

  决策树(Decision Tree)是一种常用的机器学习算法,可以用于分类和回归问题。它使用树状结构来表示决策规则,并通过一系列条件进行判断和决策。
  在训练决策树时,通常采用自顶向下的递归方法,通过选择能够使数据集的纯度提高最大的特征,将数据集分割成更小的子集。纯度是指数据集中同一类别数据的占比或误差的度量,常用的纯度衡量指标有基尼系数、信息熵等。
  决策树可以根据数据集的特点进行灵活的分类和回归预测,且易于理解和解释。它具有可解释性强、处理缺失值和离散特征能力强等优点。然而,决策树在处理高维数据和过拟合问题上有一定的限制,因此通常需要结合其他方法进行优化和改进,如随机森林、梯度提升树等。
  在scikit-learn(简称sklearn)库中,决策树模型通过DecisionTreeClassifier和DecisionTreeRegressor类实现。

💡 2. 原理介绍

  决策树的构建基于以下准则:

2.1 信息增益

  用于分类问题,衡量数据集的不确定性减少量。具体的公式如下所示,其中,d为样本集,a为离散属性,v为为类别属性a的种类个数, ∣ d ∣ |d| d为所以样本个数, ∣ d v ∣ |d^v| dv为a属性中某个类别的样本个数,后面这一项相关于一个权重,相当于类别样本越多权重越大。:
G a i n ( d , a ) = E ( d ) − ∑ v = 1 v ∣ d v ∣ ∣ d ∣ E ( d v ) Gain(d,a)=E(d)-\sum_{v=1}^{v}\frac{|d^v|}{|d|}E(d^v) Gain(d,a)=E(d)v=1vddvE(dv)
  其中E(d)为信息熵用来描述事物的混乱情况,熵越大越混乱,具体的数学表达如下,其中d为样本集合,k为样本中的类别, p k p_k pk为第k类样本说占的比例。:
E ( d ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k E(d) = -\sum_{k=1}^{|y|}p_klog_2p_k E(d)=k=1ypklog2pk
  缺点: 1. 这个评价标准有一个不好的地方在于,对于某个类别,如果划分的种类越多,那么该类别的重要性就越高,这很明显不错,比如给每个样本进行一个标号,那么这个特征肯定重要性会很高,但是这样训练处理的模型泛化能力不佳。2. 该指标是全局的特征选择,不能具体寻找出这个属性在具体哪个值最优。3.而且只能处理离散值,不能处理连续值(如非要处理:可以通过对连续值进行大小排序取中位数,其实就是一种离散化的处理方法)
  优点: 1.计算了所有样例的统计信息,对噪声不敏感。2.简单容易计算

2.2 基尼指数

  和信息增益一样同样是用来评价划分后的效果的一种指标,基尼指数也是一种评估分裂效果的指标,该指标可以选出哪个特征并且哪个值是最优的,具体的数学表达如下所示:
G i n i ( d ) = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(d)=1-\sum_{k=1}^{|y|}p_k^2 Gini(d)=1k=1ypk2
G i n i ( d , a ) = ∑ v = 1 v ∣ d v ∣ d G i n i ( d v ) Gini(d,a)=\sum_{v=1}^{v}\frac{|d^v|}{d}Gini(d^v) Gini(d,a)=v=1vddvGini(dv)
  其中,d为样本集,a为离散属性,v为为类别属性a的种类个数,为所以样本个数,为a属性中某个类别的样本个数。

2.3 CART树的原理推导

  • 分类树(每颗子树都是二叉树):
  1. 设置结点的训练数据集d, 计算所以特征对数据集d的基尼指数,并对每一个特征A,对其可能取的每一个值a,根据A是否等于a,将数据集d划分为 d 1 d_1 d1(等于a)和 d 2 d_2 d2(不等于a)两部分,利用上式的公式计算A=a时的基尼指数。
  2. 在所以可能的特征以及其每个值中,选择基尼指数最小的特征及其对应的最优特征与最优切分点,从该节点生成两个子节点,并将数据集d依据特征分配到两个子节点中去。
  3. 对生成的两个子节点重复调用1,2,直到满足停止条件
  4. 输出决策树(CART)
  • 回归树: 其原理和分类树基本一致,只是每次进行树划分时选择的评价指标不一致,分类树是根据基尼指数来进行最优特征最优值,而回归树采样均方差最小来选择最优特征和最优值,因此,下面就介绍回归树的最优值选择方法:

e r r d = ∑ i = 1 ∣ d ∣ ( y i − y ‾ ) 2 err_d=\sum_{i=1}^{|d|}(y_i-\overline{y})^2 errd=i=1d(yiy)2
e r r a l l = e r r ( d 1 ) + e r r ( d 2 ) err_{all} = err(d_1) + err(d2) errall=err(d1)+err(d2)

  • 其中, e r r d err_d errd为数据集d的均方差, y ‾ \overline{y} y是数据集d的均值,因此,回归树就是遍历所以的特征以及该特征下的每个值,以此值将数据划分为 d 1 d_1 d1 d 2 d_2 d2,然后再计算该划分下的误差和 e r r a l l err_{all} errall,选择误差和最小的最优特征最优值,然后接着重复分类树的节点分裂方法。

🔍 3. 代码实践

3.1 sklearn代码实践

  下面通过读取sklearn中自带的分类数据集来实践决策树的处理过程,具体的代码如下所示:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建决策树分类器实例
tree_clf = DecisionTreeClassifier()# 训练模型
tree_clf.fit(X_train, y_train)# 在测试集上进行预测
y_pred = tree_clf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")

3.2 高阶用法

  DecisionTreeClassifier是scikit-learn中用于分类任务的决策树模型。下面是一些常用的参数介绍:

  • criterion: 选择划分特征的衡量指标。可选的值包括"gini"和"entropy",默认为"gini"。基尼系数(gini)和信息熵(entropy)都是用来衡量划分的纯度,选择哪个衡量指标取决于具体问题。
  • max_depth: 决策树的最大深度。用于控制决策树的复杂度和防止过拟合。默认为None,表示不限制决策树的深度。
  • min_samples_split: 拆分内部节点所需的最小样本数。如果某个内部节点的样本数小于该值,则不会再划分。默认为2。
  • min_samples_leaf: 叶节点所需的最小样本数。如果某个叶节点的样本数小于该值,则该叶节点会被剪枝,合并到其他叶节点上。默认为1。
  • max_features: 寻找最佳划分特征时要考虑的特征数量。可以是整数(表示考虑的特征数量)或浮点数(表示考虑特征比例)。默认为"auto",表示考虑所有特征。
  • random_state: 随机种子。用于控制每次训练结果的随机性。默认为None。

🔍 4. 注意事项

  • 决策树容易过拟合,特别是当树很深时。可以通过设置max_depth参数来限制树的最大深度。
  • 特征选择和剪枝技术可以用来提高模型的泛化能力。
  • 决策树对数据中的小变化非常敏感,因此对噪声和异常值敏感。

🔍 5. 总结

  决策树是一种强大的模型,能够捕捉数据中的非线性关系。scikit-learn提供了易于使用的决策树实现,适用于分类和回归任务。通过本博客的代码示例,我们学习了如何创建决策树模型,进行训练、预测和评估。希望这篇博客能够帮助你更好地理解决策树模型,并将其应用于实际的机器学习问题中。

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

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

相关文章

鸿蒙NEXT

[中国,东莞,2024年6月24日] 华为开发者大会(HDC)正式开幕,带来全新的 HarmonyOS NEXT、盘古大模型5.0等最创新成果,持续为消费者和开发者带来创新体验。 HarmonyOS NEXT 鸿蒙生态 星河璀璨 鸿蒙生态设备数…

【实战指南】SpringBoot结合Zookeeper/Nacos构建Dubbo微服务

1、微服务架构 微服务架构是一种设计复杂应用程序的方法,它提倡将单一应用程序开发为一组小型、独立的服务,每个服务运行在其自己的进程中,并通过轻量级通信(通常是HTTP协议)进行交互。每个服务都是围绕业务功能构建的…

通讯录管理系统——显示联系人

功能描述:显示通讯录中已有的联系人信息 显示联系人实现步骤: 1.封装显示联系人函数 2.测试显示联系人功能 一、封装显示联系人函数 思路:判断如果当前通讯录中没有人员,就提示记录为空;人数大于0,显示…

Java代码基础算法练习-计算看完一本书的天数-2024.06.29

任务描述: 一本书有 n 页,小明第一天看 1 页,以后每天都比前一天多看 2 页,计算小明看完整本书 需要多少天? 解决思路: 每天都比前一天多看 2 页,输入的页数 n 为判断标准,while 循…

【提交ACM出版 | EIScopus检索稳定 | 高录用】第五届大数据与社会科学国际学术会议(ICBDSS 2024,8月16-18)

第五届大数据与社会科学国际学术会议(ICBDSS 2024)将于2024年08月16-18日在中国-上海隆重举行。 ICBDSS会议在各专家教授的支持下,去年已成功举办了四届会议。为了让更多的学者有机会参与会议分享交流经验。本次会议主要围绕“大数据”、“社…

【nvm】如何使用nvm优雅的管理Node.js

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、什么是nvm?2.1 概念2.1 安装2.1.1 对于Mac系统2.1.2 对于Windows系统2.1.3 对于…

贪心法思想-求最大子数组和案例图解

贪心法思想 ​ 基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。 ​ 正如其名字一样,贪心法在解决问题的策略上目光短浅,只根据当前已有的信息做出选择…

AI绘画,5分钟用 stable diffusion 做装修图,室内设计师要失业了

大家好我是极客菌!随着AI绘画功能越来越强大,不光可以用来画人物,为电商模特一键换衣,还可以在5分钟内生成一张室内效果图,看来室内设计师饭碗也岌岌可危了。 1、获得室内线稿图 首先,打开3ds max &#…

LabVIEW航空用电缆检测

系统通过集成LabVIEW平台,实现了航空用电缆检测过程中的自动数据收集、处理和报告生成,显著提升了检测效率和数据准确性,降低了人工干预,提高了电缆检测的可靠性。 项目背景 在航空领域,电缆的质量检测对确保飞机及其…

c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功

关键字extern的作用 这个很常见的都知道是定义一个外部变量或函数,但并不是简单的建立两个文件,然后在用extern 定义在另一个非最初定义变量的文件里 区分文件和编译运行的文件 例如,一个文件夹里有文件a.c和文件b.c,在sublime text中直接…

深入解析链表:解锁数据结构核心奥秘

一. 链表的定义 链表是一种线性数据结构,由一系列节点组成。每个节点包含两个部分: 数据域(Data):存储节点的数据。指针域(Pointer):存储指向下一个节点的地址。 链表的第一个节点…

【Linux】Wmware Esxi磁盘扩容

目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…

论文辅导 | 基于贝叶斯优化-卷积神经网络-双向长短期记忆神经网络的锂电池健康状态评估

辅导文章 模型描述 准确估计电池健康状态是设备稳定运行的关键。针对当前健康状态研究中容量难以直接测量、估计模型调参费时等问题,提出基于多健康特征的贝叶斯优化(BO)算法优化卷积神经网络(CNN)与双向长短期记忆&a…

冯雷老师:618大退货事件分析

近日冯雷老师受邀为某头部电商36名高管进行培训,其中聊到了今年618退货潮的问题。以下内容整理自冯雷老师的部分授课内容。 一、引言 随着电子商务的蓬勃发展,每年的618大促已成为消费者和商家共同关注的焦点。然而,在销售额不断攀升的同时…

【详细教程】如何使用YOLOv10进行图片与视频的目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

datax入门(data-web的简单使用)——02

datax入门(data-web的简单使用)——02 1. 前言1.1 关于data-web官网1.1.1 源码下载1.1.2 datax-Web部署手册1.1.2.1 Linux环境部署手册1.1.2.2 本地开发环境部署手册 1.2 关于datax入门 2. 下载之后打包、启动、登录2.1 我的本地环境2.2 修改配置2.3 初始…

html纯原生网页引入vue3版本的quill editor

效果图 版本 vueup/vue-quill v1.2.0vue3.3.8Element Plus v2.4.2 引入流程 找一个vue3的项目, 然后安装插件vue版本的quill: vue-quill npm install vueup/vue-quill --save官方地址:https://vueup.github.io/vue-quill/ 安装完成之后,把vue-quil插件下…

解开孤独症谱系障碍:原因与症状的深度洞察

孤独症谱系障碍,这个日益受到关注的话题,让许多人感到困惑和担忧。那么,它究竟是由什么原因引起的,又有哪些表现症状呢? 引起孤独症谱系障碍的原因目前尚未完全明确,但研究表明,可能与以下因素有…

ROS2使用Python创建服务提供者、消费者

1.创建服务提供者 ros2 pkg create example_service_rclpy --build-type ament_python --dependencies rclpy example_interfaces --node-name service_server_02 service_server_02.py 代码 #!/usr/bin/env python3 import rclpy from rclpy.node import Node # 导入接口 …

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 (1)common.h (2)disp_manager.h 2.Framebuffer编程 &#x…