【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)
决策树是一种树形结构的机器学习模型,适用于分类和回归任务。它通过一系列基于特征的条件判断来将数据分割为多个子区域,从而预测目标变量的值。
1. 决策树的结构
-
根节点(Root Node)
- 决策树的起点,包含所有样本。
- 根据某个特征的分割规则分裂。
-
内部节点(Internal Nodes)
- 每个节点表示一次分割(划分标准)。
- 根据特定特征及阈值分裂为子节点。
-
叶子节点(Leaf Nodes)
- 决策树的终点,包含分类结果或回归预测值。
2. 决策树的构造
划分准则(分裂规则)
构造决策树的核心是选择最优的特征和阈值进行分裂,常用的准则包括:
-
分类问题:
-
信息增益(Information Gain):
:分裂前的熵。
:分裂后每个子集的熵。
-
基尼指数(Gini Index):
:样本属于第 k 类的比例。
- 决策树选择使基尼指数下降最多的分裂。
-
-
回归问题:
- 均方误差(Mean Squared Error, MSE):
- 均方误差(Mean Squared Error, MSE):
3. 决策树算法
-
ID3 算法
- 使用信息增益作为分裂准则。
- 适用于分类问题。
-
C4.5 算法
- 改进 ID3,支持连续特征。
- 使用信息增益比作为分裂准则。
-
CART(Classification and Regression Tree)
- 适用于分类和回归。
- 分类使用基尼指数,回归使用均方误差。
4. 决策树的优缺点
优点
- 易解释:规则清晰,直观理解。
- 无需特征缩放:对特征的分布和尺度不敏感。
- 可处理非线性关系:通过分裂捕捉复杂的非线性关系。
缺点
- 易过拟合:树过深会导致模型对训练数据拟合过度。
- 对噪声敏感:数据中的异常值可能显著影响树的结构。
- 不稳定性:小的变化可能导致树结构发生较大改变。
5. 决策树的剪枝
为了防止过拟合,决策树通常需要剪枝:
-
预剪枝(Pre-Pruning):
- 在构造时提前停止分裂。
- 条件:达到最大深度、节点样本数小于阈值、分裂带来的增益不足。
-
后剪枝(Post-Pruning):
- 先构造完整树,再从底部向上剪枝。
- 剪枝条件:剪枝后误差降低或复杂度减少。
6. 决策树在分类与回归中的应用
分类问题
- 用于多类别或二分类任务。
- 叶子节点存储类别标签。
回归问题
- 用于预测连续值。
- 叶子节点存储预测值(通常为均值)。
7. 决策树的实现
分类问题
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)# 创建决策树分类器
clf = DecisionTreeClassifier(criterion="gini", max_depth=3, random_state=42)
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
输出结果
Accuracy: 1.0
回归问题
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建决策树回归器
reg = DecisionTreeRegressor(criterion="squared_error", max_depth=3, random_state=42)
reg.fit(X_train, y_train)# 预测
y_pred = reg.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))
输出结果
MSE: 36.28620386292295
8. 决策树的可视化
代码示例
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as pltiris = load_iris()
clf = DecisionTreeClassifier(random_state=1234)
model = clf.fit(iris.data, iris.target)# 将 iris.target_names 转换为列表
class_names_list = list(iris.target_names)plot_tree(clf, feature_names=iris.feature_names, class_names=class_names_list, filled=True)
plt.show()

可视化结果
- 决策树图中显示特征的分裂规则、样本数量、类别比例等信息。
- 有助于理解模型决策逻辑。
9. 决策树的扩展
-
随机森林(Random Forest)
- 使用多棵决策树,结合集成学习(Bagging)。
- 提升泛化性能,减少过拟合。
-
梯度提升树(Gradient Boosted Trees)
- 以决策树为弱学习器,通过梯度提升优化。
-
XGBoost / LightGBM / CatBoost
- 各种基于决策树的高效梯度提升框架。
决策树作为经典的机器学习模型,易于理解且功能强大,适合小规模数据集或需解释性强的任务。在实际应用中,可以结合剪枝和集成学习来提升模型性能。
相关文章:
【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)
决策树是一种树形结构的机器学习模型,适用于分类和回归任务。它通过一系列基于特征的条件判断来将数据分割为多个子区域,从而预测目标变量的值。 1. 决策树的结构 根节点(Root Node) 决策树的起点,包含所有样本。根据某…...
【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤
目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步:定义程序的目标 1.8.2 第 2 步:设计程序 1.8.3 第 3 步:编写代码 1.8.4 第 4 步:编译 1.8.5 第 5 步:运行程序 1.8.6 第 6 步:测试和调试程序 1.8.…...
Docker 使用 Dockerfile 文件打包部署前端项目
编写 Dockerfile 文件: FROM nginx:latest ADD dist /etc/nginx/html/dist COPY nginx.conf /etc/nginx/nginx.conf ENV PATH /usr/sbin:$PATH EXPOSE 80 ENTRYPOINT ["nginx"] CMD ["-g","daemon off;"]编写 nginx.conf 文件&#…...
HTML-全
. CSS css后缀名的文件被html引用 在HTML中,CSS(层叠样式表,Cascading Style Sheets)是一种用于设置网页上的文本内容、图片布局和版面设计等外观样式的样式表语言。简单来说,CSS定义了HTML元素如何显示在浏览器中。…...
高效流程图绘制:开发设计流程图利器
在选择画流程图的工具时,不同的项目和使用场景会决定最佳的工具。以下是几款常见的流程图工具,并结合具体项目使用场景提供建议: 1. Lucidchart 特点: 在线协作:支持多人实时协作,适合团队合作。模板丰富&…...
数据仓库的概念
先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...
AI - 谈谈RAG中的查询分析(2)
AI - 谈谈RAG中的查询分析(2) 大家好,RAG中的查询分析是比较有趣的一个点,内容丰富,并不是一句话能聊的清楚的。今天接着上一篇,继续探讨RAG中的查询分析,并在功能层面和代码层面持续改进。 功…...
Java基础面试题,46道Java基础八股文(4.8万字,30+手绘图)
Java是一种广泛使用的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)在1995年首次发布。它是一种面向对象的语言,这意味着它支持通过类和对象的概念来构造程序。 Java设计有一个核心理念:“编写一次&am…...
taro小程序马甲包插件
插件名 maloulab/taro-plugins-socksuppet-ci maloulab/taro-plugins-socksuppet-ci安装 yarn add maloulab/taro-plugins-socksuppet-ci or npm i maloulab/taro-plugins-socksuppet-ci插件描述 taro官方是提供了小程序集成插件的tarojs/plugin-mini-ci ,且支持…...
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
💥 .NET开源 ORM 框架 SqlSugar 系列 🎉🎉🎉 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…...
2020年
C D A C B B A B C B A 42...
基于Matlab卡尔曼滤波的GPS/INS集成导航系统研究与实现
随着智能交通和无人驾驶技术的迅猛发展,精确可靠的导航系统已成为提升车辆定位精度与安全性的重要技术。全球定位系统(GPS)和惯性导航系统(INS)在导航应用中各具优势:GPS提供全球定位信息,而INS…...
《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?“找不到mfc140u.dll文件”要怎么解决?教你几招轻松搞定
《只狼》运行时提示“mfc140u.dll文件缺失”的科普与解决方案 作为一名软件开发从业者,在游戏开发和维护过程中,我们经常会遇到各种运行时错误和系统报错。今天,我们就来探讨一下《只狼》这款游戏在运行时提示“mfc140u.dll文件缺失”的原因…...
C语言:指针与数组
一、. 数组名的理解 int arr[5] { 0,1,2,3,4 }; int* p &arr[0]; 在之前我们知道要取一个数组的首元素地址就可以使用&arr[0],但其实数组名本身就是地址,而且是数组首元素的地址。在下图中我们就通过测试看出,结果确实如此。 可是…...
win11无法检测到其他显示器-NVIDIA
https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后,检测驱动、更新驱动。...
SQLite:DDL(数据定义语言)的基本用法
SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…...
AI工具集:一站式1000+人工智能工具导航站
在当今数字化时代,人工智能(AI)技术的飞速发展催生了众多实用的AI工具,但面对如此多的选择,想要找到适合自己的高质量AI工具却并非易事。网络搜索往往充斥着推广内容,真正有价值的信息被淹没其中。为了解决…...
视觉处理基础2
目录 1.池化层 1.1 概述 1.2 池化层计算 1.3 步长Stride 1.4 边缘填充Padding 1.5 多通道池化计算 1.6 池化层的作用 2. 卷积拓展 2.1 二维卷积 2.1.1 单通道版本 2.1.2 多通道版本 2.2 三维卷积 2.3 反卷积 2.4 空洞卷积(膨胀卷积) 2.5 …...
代码随想录第十四天|二叉树part02--226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
资料引用: 226.翻转二叉树(226.翻转二叉树) 101.对称二叉树(101.对称二叉树) 104.二叉树的最大深度(104.二叉树的最大深度) 111.二叉树的最小深度(111.二叉树的最小深度)…...
vue基础之7:天气案例、监视属性、深度监视、监视属性(简写)
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
保险智能体部署失败率高达73%?揭秘头部险企AI Agent上线前必须完成的3个合规校验步骤
更多请点击: https://codechina.net 第一章:保险智能体部署失败率高达73%?揭秘头部险企AI Agent上线前必须完成的3个合规校验步骤 近期多家头部保险机构联合发布的《2024保险AI落地白皮书》指出,AI Agent在核心承保、核保与理赔场…...
告别眨眼误判!用Python+OpenCV优化人脸68关键点疲劳检测的3个实用技巧
告别眨眼误判!用PythonOpenCV优化人脸68关键点疲劳检测的3个实用技巧在计算机视觉应用中,人脸关键点检测一直是热门研究方向。特别是68关键点检测技术,因其在表情识别、疲劳监测等场景中的实用性而备受关注。然而,许多开发者在实际…...
别再只盯着MSE了!用Python实战对比5大回归评估指标(附避坑指南)
别再只盯着MSE了!用Python实战对比5大回归评估指标(附避坑指南)当你的回归模型在测试集上表现不佳时,第一个浮现在脑海的问题往往是:"该用哪个指标来评估才最合理?"这个问题远比想象中复杂——我…...
openEuler 22.03 LST上安装RealVNC 6.11,我踩过的那些依赖坑(附离线包下载方法)
在openEuler 22.03 LST离线环境中部署RealVNC 6.11的完整指南当我们需要在隔离网络的生产环境中部署远程桌面服务时,依赖管理往往成为最棘手的挑战。本文将分享我在openEuler 22.03 LST系统上安装RealVNC 6.11时积累的实战经验,特别是如何处理复杂的离线…...
Agent 的知识更新:如何避免过期信息导致决策错误
《Agent 知识更新全指南:从根上解决过期信息导致的决策灾难》 关键词 智能Agent、知识更新、时效性推理、决策可靠性、时间感知RAG、过期信息检测、知识生命周期管理 摘要 你有没有遇到过这种情况:问2024年巴黎奥运会的举办时间,GPT4还一本正经告诉你「2020年东京奥运会…...
效率直接起飞!2026年最值得信赖的专业AI论文软件
2026年AI论文写作工具已从“内容生成”升级为智能学术辅助系统,核心评价维度包括文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规与多语言支持。本次测评覆盖6款主流工具,测试场景涵盖中英文论文、全流程与专项功能、免费与付费版本,…...
水纹真实度提升300%的关键技巧,深度拆解--style raw、--chaos 45与自定义tile texture协同机制
更多请点击: https://kaifayun.com 第一章:水纹真实度提升300%的关键技巧,深度拆解--style raw、--chaos 45与自定义tile texture协同机制 水纹渲染的真实感跃升并非依赖单一参数调优,而是三重机制在纹理生成管线中的精准耦合&am…...
宏裕塑胶高性能RTP导电塑料,打造卓越导电材料新标杆
导读:在高端制造领域,导电塑料的性能直接决定产品的可靠性与竞争力。宏裕塑胶高性能RTP导电塑料,通过整合美国RTP公司尖端技术,正在重新定义行业标准,为电子、汽车、医疗等领域提供稳定高效的解决方案。宏裕塑胶高性能…...
5分钟掌握NoFences:告别杂乱桌面的免费桌面整理终极指南
5分钟掌握NoFences:告别杂乱桌面的免费桌面整理终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要面对一个布满杂乱图标的Windows桌面&#…...
SAS宏编程中IN运算符的三种实现方法与实战应用
1. 项目概述:从“硬编码”到“智能匹配”的宏编程跃迁在SAS宏编程的世界里,我们常常会遇到一个经典困境:如何优雅地处理一组离散的、但逻辑上同属一个类别的值?比如,你需要根据用户传入的省份名称,执行不同…...
