Lucas带你手撕机器学习——决策树

一、决策树简介

决策树是一种基本的分类与回归方法,它通过树状结构对数据进行分类或预测。每个内部节点代表一个特征(属性),每个分支代表特征的一个可能值,而每个叶子节点代表一个分类或预测值。由于其直观和易于理解的特点,决策树广泛应用于机器学习、数据挖掘和决策分析等领域。

1.1 决策树的结构

决策树由以下几个部分组成:

  • 根节点:树的起始节点,表示整个数据集。
  • 内部节点:每个内部节点表示对某个特征的测试。
  • 分支:分支代表特征的取值,连接节点。
  • 叶子节点:终止节点,代表最终的分类结果或预测值。
1.2 决策树的类型

根据任务的不同,决策树可以分为两种类型:

  • 分类树:用于分类任务,叶子节点表示类别标签。
  • 回归树:用于回归任务,叶子节点表示数值预测。

二、构建决策树

构建决策树的基本步骤如下:

  1. 选择最优特征:根据某种准则(如信息增益、基尼指数等)选择最能区分数据的特征。
  2. 划分数据集:根据选择的特征将数据集划分为多个子集。
  3. 递归构建子树:对每个子集重复步骤1和2,直到满足停止条件(如达到最大深度、样本数小于阈值等)。
  4. 生成决策树:最终生成的树就是完整的决策树。
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 优点
  1. 易于理解和解释:决策树的结构清晰,容易可视化和理解。
  2. 无需特征缩放:决策树不受特征尺度影响,不需要进行特征缩放。
  3. 处理缺失值:决策树能够处理缺失值,通过对样本进行划分,可以有效减少缺失值的影响。
  4. 适应非线性关系:决策树能够适应特征之间的非线性关系。
3.2 缺点
  1. 易过拟合:决策树容易在训练集上过拟合,导致在新数据上的性能下降。
  2. 不稳定性:对数据的微小变化敏感,可能导致结构上的较大变化。
  3. 偏向于多值特征:决策树在选择特征时,可能偏向于取值较多的特征。
  4. 局部最优:特征选择过程可能陷入局部最优,导致模型性能不佳。

四、决策树的剪枝技术

为了减少决策树的过拟合问题,可以采用剪枝技术。剪枝分为两种类型:

4.1 预剪枝(Pre-pruning)

在决策树构建的过程中,通过设置一些条件提前停止树的生长。例如,可以根据当前节点的样本数、树的深度或信息增益等,决定是否继续分裂节点。

4.2 后剪枝(Post-pruning)

在决策树构建完成后,通过评估模型在验证集上的表现,剪去一些不必要的节点。常用的方法有:

  • 最小化错误率:通过计算剪枝前后的错误率,选择最小的错误率。
  • 复杂度惩罚:引入一个惩罚项,对树的复杂度进行约束,选择复杂度与性能之间的最佳平衡点。

五、决策树的实践应用

决策树在实际应用中非常广泛,主要应用于以下领域:

  1. 医疗诊断:通过分析患者的症状和体征,辅助医生进行疾病的判断。
  2. 金融风控:在信用评分和贷款审批中,评估客户的风险等级。
  3. 市场营销:通过客户特征分析,制定个性化的营销策略。
  4. 客户分类:根据客户行为特征,进行客户细分和个性化服务。

六、用 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 函数可视化决策树结构。

七、总结

决策树是一种强大且易于理解的机器学习模型,适用于分类和回归任务。通过选择最优特征进行划分,决策树能够有效地对数据进行建模。尽管决策树有许多优点,但在实际应用中也需要注意过拟合和不稳定性的问题,因此常常结合剪枝技术进行改进。由于其直观的可视化和解释性,决策树在多个领域都得到了广泛应用。

希望这份详细的讲解对您了解决策树有帮助!如果您有任何疑问或需要更深入的讨论,请随时告诉我!

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

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

相关文章

探索人工智能在自然语言处理中的应用

探索人工智能在自然语言处理中的应用 前言1. 机器翻译2. 情感分析3. 智能客服4. 文本生成未来展望 结语 前言 在信息爆炸的时代,自然语言处理(NLP)作为人工智能(AI)的一个重要分支,正以前所未有的速度改变着…

LabVIEW提高开发效率技巧----节省内存

在LabVIEW开发过程中,内存管理是保障程序稳定性和性能的关键。本文将详细介绍如何通过队列处理来节省内存,尤其是如何通过解耦释放不再需要的数据,防止内存泄漏。通过多个实际例子,从不同角度探讨队列处理在大数据量或长时间运行的…

苹果瑕疵数据集苹果质量数据集YOLO格式VOC格式 深度学习 目标检测 数据集

一、数据集概述 数据集名称:2类苹果图像数据集 数据集包含两类样本:正常苹果和有瑕疵的苹果。正常苹果样本代表完好的苹果,而有瑕疵的苹果样本代表苹果表面可能存在的损伤、瑕疵或病害。每个样本都经过详细标记和描述,以便训练模…

大语言模型数据类型与环境配置

文章目录 前言一、环境安装二、大语言模型数据类型1、基本文本指令数据类型2、数学指令数据类型3、几何图形指令数据类型4、多模态指令数据类型5、翻译指令数据类型 三、vscode配置 前言 简单给出环境安装与数据类型及vscode运行配置,其中vscode运行配置是便于我们…

专业135+总分400+西安交通大学815869(原909)信号与系统考研经验电子信息与通信工程,真题,大纲,参考书

经过将近一年的考研复习,终于梦圆西安交大,今年专业课815(和专硕869(原909)差不多)信号与系统135,总分400,回想这一年的复习还有很多经验和大家分享,希望可以对大家复习有所帮助,少走…

3.cpp基本数据类型

cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型&#xff1a;存储真值 true 或假值 false&#xff0c;C语言编译器C99以上支持。 C语言的bool类型&#xff1a;要添加 #include <stdbool.h>头文件 #includ…

数据库相关知识点

1. 数据库分片与分区 分片&#xff08;Sharding&#xff09;&#xff1a;这是一种将数据水平分割的技术&#xff0c;每个分片包含数据的一个子集。分片通常用于提高数据库的扩展性和性能&#xff0c;特别是在处理大量数据时。通过将数据分布在多个分片上&#xff0c;可以并行处…

ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)

【版权所有&#xff0c;文章允许转载&#xff0c;但须以链接方式注明源地址&#xff0c;否则追究法律责任】【创作不易&#xff0c;点个赞就是对我最大的支持】 前言 仅作为学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01; 目录 前…

Maven基础知识

一、Maven的概述 maven 是什么&#xff1f; 是一个项目管理工具&#xff0c;它包含了一个项目对象模型&#xff0c;一组标准集合&#xff0c;一个项目的生命周期&#xff0c;一个依赖管理系统&#xff0c;和用来运行定义在生命周期阶段和插件目标的逻辑。 二、Maven的依赖管理…

【331】基于Springboot的“有光”摄影分享网站系统

“有光”摄影分享网站设计与实现 摘 要 自互联网的发展至今&#xff0c;其基础理论与技术都已完善&#xff0c;并积极参与了整个社会各个领域。它容许信息根据媒体传播&#xff0c;并和信息可视化工具一起为大家提供优质的服务。对于信息多头管理、差错率高、信息安全系数差、…

Redis 命令集 (超级详细)

目录 Redis 常用命令集 string类型 hash类型 list类型 set类型 zset类型 bitmap 类型 geo 类型 GEOADD (添加地理位置的坐标) GEOPOS (获取地理位置的坐标) GEODIST (计算两个位置之间的距离) GEOHASH (返回一个或多个位置对象的 geohash 值) GEORADIUS (根据用户…

本地docker部署中间件和应用

Docker Desktop搭建 安装完成之后使用docker下载镜像&#xff0c;报以下错误&#xff1a; 解决办法&#xff1a; Docker Engine配置能访问的镜像地址&#xff1a; {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled…

Vue实现手风琴功能组件 vue 实现折叠面板功能

Vue实现手风琴功能组件 vue 实现折叠面板功能,前端不使用第三方组件实现手风琴折叠面板功能 效果图: dom<div class="foldSection"><divv-for="(item, index) in ListData":key="item.id"class="accordion"><div …

反编译工具jadx

一.官网 https://github.com/skylot/jadx 下载解压即可 二.使用 将想要反编译的apk文件拖入jadx中&#xff0c;等待反编译结束。 三.提醒 反编译出来的只能帮你理解逻辑&#xff0c;并且一般apk都会有加密。

SLAM|2. 差异与统一:坐标系变换与外参标定

本章主要内容 1.坐标系变换 2.相机外参标定 上一章我们了解了相机内参的概念&#xff0c;内参主要解决三维世界与二维图像之间的映射关系。有了内参我们可以一定程度上还原相机看到了什么&#xff08;但缺乏尺度&#xff09;。但相机看到的数据只是处于相机坐标系&#xff0c;为…

2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)

原文标题&#xff1a;Domain Adaptive YOLO for One-Stage Cross-Domain Detection 中文标题&#xff1a;面向单阶段跨域检测的域自适应YOLO 1、Abstract 域转移是目标检测器在实际应用中推广的主要挑战。两级检测器的域自适应新兴技术有助于解决这个问题。然而&#xff0c;两级…

【Qt6聊天室项目】 主界面功能实现

1. 获取当前用户的个人信息 1.1 前后端逻辑分析&#xff08;主界面功能&#xff09; 主界面上所有的前后端交互逻辑相同&#xff0c;分析到加载会话列表后其余功能仅实现。 核心逻辑总结 异步请求-响应模型 客户端发起请求&#xff0c;向服务器发送包含会话ID的请求服务端处…

ASP.NET Core 8.0 中使用 Hangfire 调度 API

在这篇博文中&#xff0c;我们将引导您完成将 Hangfire 集成到 ASP.NET Core NET Core 项目中以安排 API 每天运行的步骤。Hangfire 是一个功能强大的库&#xff0c;可简化 .NET 应用程序中的后台作业处理&#xff0c;使其成为调度任务的绝佳选择。继续阅读以了解如何设置 Hang…

计算机毕业设计PySpark+大模型高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

基于Spark的高考报名信息推荐系统 系统用到的各项技术和工具的介绍&#xff1a; 1. Python Python是一种高级的、解释型的程序设计语言&#xff0c;因为其简洁而易学、可读性强等特点&#xff0c;在数据处理、人工智能、机器学习、Web开发等领域得到了广泛运用。在该系统中…

php AES 加解密(支持在线运行)

https://andi.cn/page/621792.html 这篇文章不仅给出了 php AES 加解密代码&#xff0c;而且可以在线运行来对数据进行加解密&#xff0c;满足实际中的一些需求。