【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 对于…

框架分享:登录框架easy-login

最近花了两周时间把登录体系代码总结了一下,完成了登录框架easy-login的代码。以此文分享给大家。 该登录框架支持密码、本机号码一键登录、微信授权登录(小程序、APP、公众号)、支付宝授权登录(小程序)等。 登录方式…

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

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

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

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

LabVIEW航空用电缆检测

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

排序问题学习c++ 跑步比赛

问题是假定有25名短跑选手争夺前三名&#xff0c;赛场上有五条赛道&#xff0c;一次可以有五名选手同时比赛&#xff0c;比赛不计时&#xff0c;只看相应的名次&#xff0c;假如选手的发挥是稳定的&#xff0c;最少几次比赛才可以决出前三名。 #include <iostream> // 包…

大语言模型预训练数据集及清洗框架介绍【简单版】

目录 一、常见数据集类型 &#x1f4da; 二、数据清洗框架对比 &#x1f9f9; SlimPajama MNBVC CC-NET 三、理想的清洗框架 &#x1f4af; 四、数据清洗核心流程 &#x1f504; 五、现有数据集反思 &#x1f914; 六 中文预训练数据集 &#x1f1e8;&#x1f1f3; 1…

AI Infra简单记录

向量数据库的作用 1. 在AI大模型训练过程中&#xff0c;向量数据库可以有效提升数据检索、特征提取等任务的效率。 2、在AI大模型推理过程中&#xff0c;向量数据库为大模型提供外挂知识库&#xff0c;提升模型时效性与准确性&#xff0c;提供缓存能力&#xff0c;减少调用开…

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

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

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

一. 链表的定义 链表是一种线性数据结构&#xff0c;由一系列节点组成。每个节点包含两个部分&#xff1a; 数据域&#xff08;Data&#xff09;&#xff1a;存储节点的数据。指针域&#xff08;Pointer&#xff09;&#xff1a;存储指向下一个节点的地址。 链表的第一个节点…

【Linux】Wmware Esxi磁盘扩容

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

Linux 中的文本编辑

文章目录 Linux 中的文本编辑Vi 和 Vim 的基本介绍三种工作模式常用快捷键 Linux 中的文本编辑 在 Linux 系统中&#xff0c;内置了强大的文本编辑器 Vi 和其增强版本 Vim。 Vi 和 Vim 的基本介绍 Vim 作为 Vi 的增强版&#xff0c;具有出色的程序编辑能力&#xff0c;能以字…

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

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

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

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

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

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