Lucas带你手撕机器学习——决策树
一、决策树简介
决策树是一种基本的分类与回归方法,它通过树状结构对数据进行分类或预测。每个内部节点代表一个特征(属性),每个分支代表特征的一个可能值,而每个叶子节点代表一个分类或预测值。由于其直观和易于理解的特点,决策树广泛应用于机器学习、数据挖掘和决策分析等领域。
1.1 决策树的结构
决策树由以下几个部分组成:
- 根节点:树的起始节点,表示整个数据集。
- 内部节点:每个内部节点表示对某个特征的测试。
- 分支:分支代表特征的取值,连接节点。
- 叶子节点:终止节点,代表最终的分类结果或预测值。
1.2 决策树的类型
根据任务的不同,决策树可以分为两种类型:
- 分类树:用于分类任务,叶子节点表示类别标签。
- 回归树:用于回归任务,叶子节点表示数值预测。
二、构建决策树
构建决策树的基本步骤如下:
- 选择最优特征:根据某种准则(如信息增益、基尼指数等)选择最能区分数据的特征。
- 划分数据集:根据选择的特征将数据集划分为多个子集。
- 递归构建子树:对每个子集重复步骤1和2,直到满足停止条件(如达到最大深度、样本数小于阈值等)。
- 生成决策树:最终生成的树就是完整的决策树。
2.1 特征选择准则
特征选择是构建决策树的关键步骤,常用的准则有:
- 信息增益:通过计算选择特征前后信息熵的变化量来决定特征的重要性。信息增益越大,特征越重要。
[
IG(D, A) = H(D) - \sum_{v \in Values(A)} \frac{|D_v|}{|D|} H(D_v)
]
其中,(H(D)) 是数据集 (D) 的熵,(Values(A)) 是特征 (A) 的所有取值,(D_v) 是特征 (A) 取值为 (v) 的子集。
- 基尼指数:用于衡量一个数据集的不纯度,基尼指数越小,表示数据集的纯度越高。
[
Gini(D) = 1 - \sum_{i=1}^{C} p_i^2
]
其中,(C) 是类别数,(p_i) 是数据集中类别 (i) 的比例。
2.2 决策树的停止条件
在构建决策树时,需要设置停止条件,以避免过拟合。常用的停止条件有:
- 树的深度限制:限制树的最大深度,防止树过于复杂。
- 样本数限制:当节点的样本数小于某个阈值时停止分裂。
- 信息增益阈值:如果当前特征的信息增益小于某个阈值,则停止分裂。
三、决策树的优缺点
3.1 优点
- 易于理解和解释:决策树的结构清晰,容易可视化和理解。
- 无需特征缩放:决策树不受特征尺度影响,不需要进行特征缩放。
- 处理缺失值:决策树能够处理缺失值,通过对样本进行划分,可以有效减少缺失值的影响。
- 适应非线性关系:决策树能够适应特征之间的非线性关系。
3.2 缺点
- 易过拟合:决策树容易在训练集上过拟合,导致在新数据上的性能下降。
- 不稳定性:对数据的微小变化敏感,可能导致结构上的较大变化。
- 偏向于多值特征:决策树在选择特征时,可能偏向于取值较多的特征。
- 局部最优:特征选择过程可能陷入局部最优,导致模型性能不佳。
四、决策树的剪枝技术
为了减少决策树的过拟合问题,可以采用剪枝技术。剪枝分为两种类型:
4.1 预剪枝(Pre-pruning)
在决策树构建的过程中,通过设置一些条件提前停止树的生长。例如,可以根据当前节点的样本数、树的深度或信息增益等,决定是否继续分裂节点。
4.2 后剪枝(Post-pruning)
在决策树构建完成后,通过评估模型在验证集上的表现,剪去一些不必要的节点。常用的方法有:
- 最小化错误率:通过计算剪枝前后的错误率,选择最小的错误率。
- 复杂度惩罚:引入一个惩罚项,对树的复杂度进行约束,选择复杂度与性能之间的最佳平衡点。
五、决策树的实践应用
决策树在实际应用中非常广泛,主要应用于以下领域:
- 医疗诊断:通过分析患者的症状和体征,辅助医生进行疾病的判断。
- 金融风控:在信用评分和贷款审批中,评估客户的风险等级。
- 市场营销:通过客户特征分析,制定个性化的营销策略。
- 客户分类:根据客户行为特征,进行客户细分和个性化服务。
六、用 Python 实现决策树
下面是使用 Python 中的 scikit-learn 库实现决策树的一个完整示例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建决策树分类器
clf = DecisionTreeClassifier(max_depth=3, random_state=42)# 训练模型
clf.fit(X_train, y_train)# 进行预测
y_pred = clf.predict(X_test)# 评估模型
print("准确率:", accuracy_score(y_test, y_pred))
print("\n分类报告:\n", classification_report(y_test, y_pred))
print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))# 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.title("决策树可视化")
plt.show()
6.1 代码解析
- 数据加载:使用
load_iris函数加载鸢尾花数据集,该数据集包含三个类别的鸢尾花的特征。 - 数据划分:使用
train_test_split将数据集划分为训练集和测试集,测试集占比为 20%。 - 创建分类器:使用
DecisionTreeClassifier创建决策树分类器,设置最大深度为 3,确保树不会过于复杂。 - 模型训练:使用训练集训练模型。
- 模型预测:在测试集上进行预测,评估模型的准确率和其他性能指标。
- 可视化决策树:使用
plot_tree函数可视化决策树结构。
七、总结
决策树是一种强大且易于理解的机器学习模型,适用于分类和回归任务。通过选择最优特征进行划分,决策树能够有效地对数据进行建模。尽管决策树有许多优点,但在实际应用中也需要注意过拟合和不稳定性的问题,因此常常结合剪枝技术进行改进。由于其直观的可视化和解释性,决策树在多个领域都得到了广泛应用。
希望这份详细的讲解对您了解决策树有帮助!如果您有任何疑问或需要更深入的讨论,请随时告诉我!
相关文章:
Lucas带你手撕机器学习——决策树
一、决策树简介 决策树是一种基本的分类与回归方法,它通过树状结构对数据进行分类或预测。每个内部节点代表一个特征(属性),每个分支代表特征的一个可能值,而每个叶子节点代表一个分类或预测值。由于其直观和易于理解…...
OpenIPC开源FPV之Ardupilot配置
OpenIPC开源FPV之Ardupilot配置 1. 源由2. 问题3. 分析3.1 MAVLINK_MSG_ID_RAW_IMU3.2 MAVLINK_MSG_ID_SYS_STATUS3.3 MAVLINK_MSG_ID_BATTERY_STATUS3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW3.5 MAVLINK_MSG_ID_GPS_RAW_INT3.6 MAVLINK_MSG_ID_VFR_HUD3.7 MAVLINK_MSG_ID_GLOBAL_P…...
合并数组的两种常用方法比较
在 JavaScript 中,合并数组的两种常用方法是使用扩展运算符 (...) 和使用 push 方法。 使用扩展运算符 this.items [...this.items, ...data.items]; 优点: 易于理解:使用扩展运算符的语法非常直观,表达了“将两个数组合并成一个…...
qt 下载安装
1. 官网地址 https://www.qt.io/ 2. 下载 使用邮箱注册账号,登录,后边安装时也用的到 登录后: 这里需要电话号验证,电话号需要正确的,其他随便填,电话号中国区前需要86, 验证后自动下载 …...
Oracle SQL Developer 同时打开多个table的设置
Oracle SQL Developer 同时打开多个table的设置 工具 》 首选项 》数据库 》对象查看器,勾选 “自动冻结对象查看器窗口”...
NVIDIA发布Nemotron-70B-Instruct,超越GPT-4o和Claude 3.5的AI模型
一、Nemotron-70B-Instruct 是什么 Nemotron-70B-Instruct 是由 NVIDIA 基于 Meta 的 Llama 3.1-70B 模型开发的先进大语言模型(LLM)。该模型采用了新颖的神经架构搜索(Neural Architecture Search,NAS)方法和知识蒸馏…...
死锁(Deadlock)C#
在多线程编程中,死锁(Deadlock)是一种非常常见的问题,通常发生在两个或多个线程相互等待对方持有的锁,导致它们都无法继续执行。要避免死锁,需要了解死锁的四个必要条件以及相应的解决策略。 死锁的形成 …...
前端-基础CSS 知识总结
1.书写位置:title 标签下方添加 style 双标签,style 标签里面书写 CSS 代码。 <title>CSS 初体验</title> <style>/* 选择器 { } */p {/* CSS 属性 */color: red;} </style><p>体验 CSS</p> <link rel="stylesheet" href=…...
最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等
maven坐标 <!-- MySQL 8 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- Druid连接池 --><dependency><groupId&…...
jQuery快速填充非form数据
jQuery快速填充非form数据 先看看jQuery根据name填充form表单数据 <!DOCTYPE html> <html><head><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head><body><form id"myForm">…...
语音语言模型最新综述! 关于GPT-4o背后技术的尝试
近期,大型语言模型(LLMs)在生成文本和执行各种自然语言处理任务方面展现出了卓越的能力,成为了强大的AI驱动语言理解和生成的基础模型。然而,仅依赖于基于文本模态的模型存在显著局限性。这促使了基于语音的生成模型的发展,使其能够更自然、直观地与人类互动。 为了…...
根据用户选择的行和列数据构造数据结构(跨行跨列)
方案一 这段代码的功能是根据用户选择的行和列数据,生成一个适合复制粘贴的字符串表格。代码会先按列的 id 从小到大排序,再根据行列的选择关系将数据按顺序填入表格,每行之间使用换行符分隔,每列之间使用制表符分隔。如果某一行…...
Spark教程5-基本结构化操作
加载csv文件 df spark.read.format("json").load("/data/flight-data/json/2015-summary.json")Schema 输出Schema df.printSchema()使用Schema读取csv文件,以指定数据类型 from pyspark.sql.types import StructField, StructType, Strin…...
内置数据类型、变量名、字符串、数字及其运算、数字的处理、类型转换
内置数据类型 python中的内置数据类型包括:整数、浮点数、布尔类型(以大写字母开头)、字符串 变量名 命名变量要见名知意,确保变量名称具有描述性和意义,这样可以使得代码更容易维护,使用_可以使得变量名…...
Win/Mac/Android/iOS怎麼刪除代理設置?
設置代理設置的主要構成 IP 地址和端口 這些是代理伺服器配置的最基本組件。代理伺服器的IP地址引導互聯網流量,而端口號指定伺服器上的通信通道。 為什麼要刪除代理設置? 刪除代理設置通常是為了解決網路問題、提高速度、恢復安全性或過渡到新的網路…...
数据结构------手撕顺序表
文章目录 线性表顺序表的使用及其内部方法ArrayList 的扩容机制顺序表的几种遍历方式顺序表的优缺点顺序表的模拟实现洗牌算法 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,…...
UDP(用户数据报协议)端口监控
随着网络的扩展,确保高效的设备通信对于优化网络功能变得越来越重要。在这个过程中,端口发挥着重要作用,它是实现外部设备集成的物理连接器。通过实现数据的无缝传输和交互,端口为网络基础设施的顺畅运行提供了保障。端口使数据通…...
【Java小白图文教程】-05-数组和排序算法详解
精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…...
OpenCV视觉分析之目标跟踪(1)计算密集光流的类DISOpticalFlow的介绍
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 这个类实现了 Dense Inverse Search (DIS) 光流算法。更多关于该算法的细节可以在文献 146中找到。该实现包含了三个预设参数集,以提…...
Lucas带你手撕机器学习——套索回归
好的,下面我将详细介绍套索回归的背景、理论基础、实现细节以及在实践中的应用,同时还会讨论其优缺点和一些常见问题。 套索回归(Lasso Regression) 1. 背景与动机 在机器学习和统计学中,模型的复杂性通常会影响其在…...
【开题答辩全过程】以 基于python的天气预测可视化系统为例,包含答辩的问题和答案
个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...
Janus-Pro-7B模型部署避坑指南:解决403 Forbidden等常见网络错误
Janus-Pro-7B模型部署避坑指南:解决403 Forbidden等常见网络错误 你是不是也遇到过这种情况?好不容易把Janus-Pro-7B模型部署起来,满心欢喜地准备调用,结果浏览器或者命令行里弹出一个冷冰冰的“403 Forbidden”,瞬间…...
Python数据处理新姿势:用candas一键解析BLF文件并转DataFrame(附避坑指南)
Python数据处理新姿势:用candas一键解析BLF文件并转DataFrame(附避坑指南) 在汽车电子和物联网领域,CAN总线数据的处理一直是工程师们日常工作中的重要环节。BLF(Binary Logging Format)作为Vector公司推出…...
Phi-4-mini-reasoning在ollama中如何限制输出长度?max_tokens与stop参数详解
Phi-4-mini-reasoning在ollama中如何限制输出长度?max_tokens与stop参数详解 1. 为什么需要控制输出长度? 当你使用Phi-4-mini-reasoning进行文本生成时,可能会遇到这样的情况:模型生成的回答太长,包含了大量不必要的…...
Linux之固定IP地址、启动部署好的LLM服务
一、固定Linux的IP地址原因:断电、关机重启会导致服务器ip地址发生改变,IP地址发生变换会导致shell无法连接服务器。固定IP地址可以方便我们使用shell连接服务器稳定操作,所以了解固定IP是非常有必要的。这里推荐使用服务器图形化操作界面具体…...
别让AI把你带沟里:调教这货帮你写代码的实战指南
现在这年头,写代码要是没个AI傍身,出门都不好意思跟人打招呼。GitHub Copilot、ChatGPT、Claude……这些名字一个个听着跟漫威英雄似的。很多哥们儿心想:“这下稳了,以后我只要动动嘴,代码让AI写,我负责躺平…...
计算机毕业设计springboot停车场管理系统 基于SpringBoot框架的智能车库运营平台设计与实现 智慧停车服务系统——采用SpringBoot技术的车辆停放信息化解决方案
计算机毕业设计springboot停车场管理系统4z3jk9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 二十一世纪以来,随着城市化进程加速和机动车保有量持续增长&#x…...
【嵌入式开发】SecureCRT串口日志监听实战:从配置到故障排查
1. SecureCRT串口监听入门指南 第一次接触嵌入式开发的朋友,看到SecureCRT这个工具可能会有点懵。其实它就像是我们和硬件设备对话的"翻译官",把设备输出的串口信号转换成我们能看懂的文字信息。我刚开始用的时候也踩过不少坑,比如…...
Qwen-Image真实效果:交通标志识别+法规解释+安全提示生成动态演示
Qwen-Image真实效果:交通标志识别法规解释安全提示生成动态演示 1. 引言:当AI学会"看"交通标志 想象一下,当你开车经过一个陌生的交通标志时,如果能立即获得这个标志的详细解释和相关法规说明,甚至还能得到…...
【MCP 2.0安全审计黄金标准】:2026年首批通过CNAS认证的12项测试用例与自动化检测工具链
第一章:MCP 2.0安全审计黄金标准的演进逻辑与战略定位MCP(Managed Cloud Platform)2.0安全审计黄金标准并非对旧版的简单增强,而是面向云原生纵深防御体系重构的安全治理范式跃迁。其演进逻辑根植于三大现实驱动力:零信…...
