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

news2024/10/7 11:40:22

【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.coloradmin.cn/o/1875952.html

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

相关文章

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…

信息安全前沿技术有哪些?

目前信息安全领域&#xff08;不限于技术层面&#xff09;有哪些前沿的研究方向&#xff0c;代表人物有哪些&#xff1f;有哪些新的研究成果&#xff1f;以及从哪些地方可以获得这些咨询&#xff1f; 我在做 system 方向的安全研究&#xff0c;最近发现其实中美两国都在 TEE (…

洞察数据资产的奥秘:深入剖析数据资产在企业运营中的核心作用,提出一套全面、系统的数据资产解决方案,帮助企业实现数据资产的最大化利用和增值

一、引言 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅记录了企业的历史运营轨迹&#xff0c;更蕴含着指导未来决策的智慧。然而&#xff0c;如何有效管理、利用这些数据资产&#xff0c;使其转化为企业的竞争优势和利润增长点&#xff0…

【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号

最近拿到了【Hello 图狗】制作的三调/变更样式符号库&#xff0c;确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02&#xff08;汇总&#xff09;_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病&#xff0c;就是匹配样式之后&#xff0c;…

网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>

参考&#xff1a; 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…

小程序web-view无法打开该页面的解决方法

问题&#xff1a;开发者工具可以正常打开&#xff0c;正式上线版小程序使用 web-view 组件测试时提示&#xff1a;“无法打开该页面&#xff0c;不支持打开 https://xxxxxx&#xff0c;请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 解决方法&#xff1a;需要配…

Altium Designer的元件库 PCB库 3D库神器

元件库 PCB库 3D库神器 对于硬件工程师来说贸泽是一个器件选型相当方便的电子商城,虽然购买元器件比立创商城要慢和贵,但是,上面的物料种类、选型的便捷性要远远好于立创商城;而且,它上面的大多数元件都有自己的元件封装、PCB封装、3D模型,这就对实际的开发节省了好多绘…

Java | Leetcode Java题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; public class Solution {public int hammingWeight(int n) {int ret 0;while (n ! 0) {n & n - 1;ret;}return ret;} }

52、基于K 均值聚类实现基于颜色的分割(matlab)

1、K 均值聚类实现基于颜色的分割原理及流程 K 均值聚类是一种常用的聚类算法&#xff0c;通过将数据点分配到 K 个簇中&#xff0c;每个簇的中心代表簇的平均值来实现聚类的目的。 基于颜色的分割的原理是利用像素的颜色信息来对图像进行分割。首先需要将图像的每个像素点表…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变&#xff08;Gradients&#xff09;是一种让两种或多种颜色平滑过渡的视觉效果&#xff0c;广泛应用于网页背景、按钮、边框等&#xff0c;以创造丰富的视觉体验。CSS提供了线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial…

性能之巅的巴比达内网穿透访问单位的web管理系统

在这个数字化飞速发展的时代&#xff0c;作为一名IT部门的小主管&#xff0c;我经常面临着一项挑战&#xff1a;如何在外网环境下高效、安全地访问我们单位内部部署的Web管理系统。这不仅仅是关乎我个人的工作效率&#xff0c;更是影响到整个团队能否快速响应市场需求的关键。直…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产mysql数据库事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产MySql数据库事故实战 一、前言 作为运维工程师经常会对生产服务器进行安全漏洞加固&#xff0c;一般服务厂商、或者甲方信息安全中心提供一些安全的shell脚本&#xff0c;一般这种shell脚本都是收回权限&…

Websocket在Java中的实践——自动注册端点

大纲 依赖自动注册端点端点测试 在 《Websocket在Java中的实践——握手拦截器》中我们使用握手拦截器实现了路径解析的工作。这个过程略显复杂&#xff0c;因为路径解析这样比较底层的工作应该由框架来解决&#xff0c;而不应该交由开发者来做。本文介绍的自动注册端点的功能就…

开箱即用的fastposter海报生成器

什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维码、头像&#xff09;即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码&#xff0c;方便快速开发。 软件特性&…

2024高考录取分数线一览表(含一本线、二本线、专科线)

2024年全国各地的高考录取分数线已经全部公布&#xff0c;查大学网&#xff08;www.chadaxue.com&#xff09;为大家整理全国31个省市高考录取分数线汇总&#xff0c;包括本科批&#xff08;一本分数线线和二本分数线&#xff09;、专科批和特殊类招生控制分数线汇总&#xff0…

ArcGIS中将测绘数据投影坐标(平面坐标)转地理坐标(球面经纬度坐标)

目录 前言1.测绘数据预览1.1 确定带号1.2 为什么是对Y轴分带&#xff0c;而不是对X轴分带&#xff1f; 2 测绘数据转shp2.1 添加数据2.2 显示XY数据2.3 添加经纬度字段2.4 计算经纬度 3.shp数据重投影4.总结 前言 最近在刚好在做一个小功能&#xff0c;将测绘数据转为经纬度坐标…

2024年值得信赖的在线代理IP服务商

在当今的网络世界中&#xff0c;代理IP服务成为了许多企业和个人在进行网络数据处理、多账号管理等任务时不可或缺的工具。然而&#xff0c;面对市场上众多的代理IP服务商&#xff0c;如何挑选出真正值得信赖的服务商成为了一大难题。作为专业的测评团队&#xff0c;我们近期对…

cuda编码入门学习笔记

在日常深度学习和科学计算中,使用图形处理器(GPU)进行加速是一个常见的做法。CUDA (Compute Unified Device Architecture) 是英伟达公司提供的用于GPU编程的平台和编程模型。同时它是一种并行计算模型,允许开发人员使用标准C语言对GPU进行编程。CUDA的核心思想是将任务分解为…