算法与数据结构--决策树算法

2a20c54b85e042bfa2440367ae4807e9.gif

欢迎来到 Papicatch的博客

2a20c54b85e042bfa2440367ae4807e9.gif

文章目录

🍉决策树算法介绍

🍈原理

🍈核心思想包括

🍍递归分割

🍍选择标准

🍍剪枝

🍈解题过程

🍍数据准备

🍍选择最佳分割特征

🍍分割数据集

🍍递归构建子树

🍍剪枝处理

🍈时间复杂度和空间复杂度

🍍时间复杂度

🍍空间复杂度

🍈优缺点

🍍优点

🍍缺点

🍉示例

🍈案例分析1

🍍加载数据集

🍍划分训练集和测试集

🍍构建决策树模型

🍍预测

🍍评估模型

🍍可视化决策树

🍈案例分析2

🍍详细解释

🍉总结


2a20c54b85e042bfa2440367ae4807e9.gif

🍉决策树算法介绍

        决策树算法是一种常见的机器学习算法,广泛应用于分类和回归问题中。它通过将数据集分割成更小的子集,并在这些子集上递归地构建树形结构,从而实现对数据的预测和分类。本文将介绍决策树算法的原理、核心思想、解题过程、时间复杂度和空间复杂度,以及其优点和缺点,并提供一个案例实现。

🍈原理

        决策树的基本思想是将数据集逐步划分为不同的子集,使得每个子集中的数据更加同质化。具体来说,决策树通过选择特征及其对应的阈值来分割数据,选择的标准通常是信息增益或基尼指数等度量标准。树的每个节点表示一个特征,每条边代表该特征的一个取值或取值范围,叶子节点则表示分类结果或回归值。

🍈核心思想包括

🍍递归分割

        从根节点开始,选择一个最佳特征进行分割,继续对分割后的子集进行分割,直到满足停止条件。

🍍选择标准

        常用的选择标准有信息增益、信息增益率和基尼指数。信息增益用于ID3算法,信息增益率用于C4.5算法,而基尼指数用于CART算法。

🍍剪枝

        为防止过拟合,决策树算法通常会进行剪枝,分为预剪枝和后剪枝。

🍈解题过程

决策树的构建过程可以概括为以下步骤:

🍍数据准备

        收集并整理数据。

🍍选择最佳分割特征

        根据某种标准(如信息增益、基尼指数等),选择一个特征进行分割。

🍍分割数据集

        根据选择的特征将数据集分割成子集。

🍍递归构建子树

        对每个子集,重复步骤2和步骤3,直到满足停止条件(如所有样本属于同一类别,或特征用尽)。

🍍剪枝处理

        对生成的树进行剪枝,以提高模型的泛化能力。

🍈时间复杂度和空间复杂度

🍍时间复杂度

        决策树的构建时间复杂度取决于数据集的大小和特征数量。构建过程中需要对每个特征进行排序,复杂度为 O(nlogn),因此总的时间复杂度为O(mnlogn),其中 m 为特征数量,  n 为样本数量。

🍍空间复杂度

        存储决策树的空间复杂度取决于树的深度和节点数量。最坏情况下,空间复杂度为O(nlogn)。

🍈优缺点

🍍优点

  • 易于理解和解释:决策树的模型直观易懂,决策过程类似于人类的思考过程。
  • 无需数据预处理:决策树不需要特征缩放或归一化,能处理缺失数据。
  • 能够处理多种数据类型:既可以处理数值型特征,也可以处理分类型特征。

🍍缺点

  • 容易过拟合:决策树如果不进行剪枝,容易对训练数据过拟合,泛化能力差。
  • 对噪声敏感:对数据中的噪声较为敏感,可能导致模型性能下降。
  • 偏倚问题:不同分割标准可能导致不同的树结构,对数据中的一些重要特征选择不敏感。

🍉示例

🍈案例分析1

以下是使用Python的scikit-learn库实现决策树分类的示例:

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 = load_iris()
X = iris.data
y = iris.target

🍍划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, 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)

🍍评估模型

accuracy = accuracy_score(y_test, y_pred)
print(f'模型准确率: {accuracy:.2f}')

🍍可视化决策树

from sklearn.tree import plot_tree
import matplotlib.pyplot as pltplt.figure(figsize=(12,8))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()

    以上代码展示了如何使用决策树对Iris数据集进行分类,包括数据加载、模型训练、预测和评估,以及决策树的可视化。通过这种方式,我们可以直观地理解决策树的决策过程和模型性能。

🍈案例分析2

        下面是一个更复杂的案例,实现了在一个金融数据集上的决策树分类模型,并进行了模型的性能评估和剪枝处理。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt# 加载数据集
data = pd.read_csv('financial_data.csv')  # 假设数据集名为financial_data.csv
X = data.drop('target', axis=1)
y = data['target']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 构建决策树模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=5, random_state=42)
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)
print(f'模型准确率: {accuracy:.2f}')
print('分类报告:')
print(report)# 可视化决策树
plt.figure(figsize=(20,12))
plot_tree(clf, filled=True, feature_names=X.columns, class_names=['Class 0', 'Class 1'])
plt.show()# 剪枝处理
path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas = path.ccp_alphasclfs = []
for ccp_alpha in ccp_alphas:clf = DecisionTreeClassifier(random_state=42, ccp_alpha=ccp_alpha)clf.fit(X_train, y_train)clfs.append(clf)# 评估剪枝后的模型
train_scores = [accuracy_score(y_train, clf.predict(X_train)) for clf in clfs]
test_scores = [accuracy_score(y_test, clf.predict(X_test)) for clf in clfs]plt.figure(figsize=(10,6))
plt.plot(ccp_alphas, train_scores, marker='o', label='Train', drawstyle="steps-post")
plt.plot(ccp_alphas, test_scores, marker='o', label='Test', drawstyle="steps-post")
plt.xlabel('Effective Alpha')
plt.ylabel('Accuracy')
plt.legend()
plt.title('Accuracy vs Alpha for Training and Testing Sets')
plt.show()

🍍详细解释

  1. 数据加载与预处理:加载金融数据集,并进行特征和目标变量的分离。
  2. 数据集划分:将数据集划分为训练集和测试集。
  3. 模型构建与训练:使用DecisionTreeClassifier构建决策树模型,并进行训练。
  4. 预测与评估:对测试集进行预测,并评估模型的准确率和分类报告。
  5. 模型可视化:可视化决策树,展示树的结构。
  6. 剪枝处理:通过计算成本复杂度剪枝路径,评估不同剪枝强度下模型的性能,并绘制准确率随剪枝参数变化的图。

🍉总结

        总之,决策树算法在数据科学和机器学习中具有重要地位,理解其原理和实现方法对解决实际问题具有重要意义。


希望这些能对刚学习算法的同学们提供些帮助哦!!!

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

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

相关文章

【GD32】 TIMER通用定时器学习+PWM输出占空比控制LED

扩展:对PWM波形的输出进行捕获 目录 一、简介二、具体功能描述1、时钟源的选择:2、预分频器:3、计数模式:向上计数模式:向下计数模式:中央对齐模式: 4、捕获/比较通道 输入捕获模式 输出比…

仙侠手游【天道情缘】修复版服务端+GM后台+详细教程

下载地址:仙侠手游【天道情缘】修复版服务端GM后台详细教程

【电子信息工程专业课】学习记录

数字信号处理 离散时间信号与系统 周期延拓 一个连续时间信号经过理想采样后,其频谱将沿着频率轴以采样频率Ωs 2π / T 为间隔而重复。 混频 各周期的延拓分量产生频谱交替的现象 奈奎斯特采样定理 fs > 2fh Z变换 收敛域:使任意给定序列x(n)的Z变…

ROS机器人小车建模仿真与SLAM

文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件:4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF ​ URDF&#xff…

传输层——TCP

在学习计算机网络的过程中,我们知道OSI七层协议模型,但是在实际开发应 用中我们发现OSI七层协议模型并不适合实施,因为OSI上三层通常都是由开 发人员统一完成的,这三层之间在实现过程中没有一个明确的界限,所以我 们更…

爬虫相关面试题

一,如何抓取一个网站? 1,去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据,写代码测试调查好不好拿,如果好拿直接开始爬取 3,看看有没有电脑能打开的手机网页&a…

面向对象初级的内存分布图

1.一个对象的内存图 2.二个对象的内存图 3.二个引用指向同一个对象 4.this的内存布局图 创建了一个Student类的对象s1,因为有new,所有在堆区开辟了一些内存空间,比如把这些内存空间的地址值叫001 形参name是竹小玲, 也就是对象s调用method方法的地址值, this表示方法调用者的地…

Shell 学习笔记 - 导读 + 变量定义

初识 Shell 本章学习目标 了解什么是 Shell了解 Shell 的版本及用途掌握 Shell 变量的用法 导读( 了解 \color{cyan}{了解} 了解) 现在的人们使用的操作系统(Windows、Android、iOS 等)都带有图形化界面,简单直观&…

网络安全 - DDoS 攻击原理 + 实验

DDoS 攻击 什么是 DDoS 进攻 D D o S \color{cyan}{DDoS} DDoS(Distributed Denial of Service,分布式拒绝服务)攻击是一种通过多个计算机系统同时向目标系统发送大量请求,消耗其资源,使其无法正常服务的攻击方式。DD…

举例说明 如何判断Spark作业的瓶颈

首先看哪个Job执行时间长: 例如下图中明显Job 2时间执行最长,这个对rdd作业是直观有效的。 对于sql作业可能不准确,sql需要关注stage的详情耗时。 然后看执行时间长的Job中哪个stage执行时间长: 明显stage 7和stage 13执行时间长&…

经验分享,如何去除文本中的空格

有时候我们需要去掉一窜文本中的空格,这里分享一个好用的免费网站,可实现在线去除 网址:http://www.txttool.com/t/?idMzM4 使用截图:

CloudFlare 里如何设置参数传递的 301 重定向

自从接到【哈哈,笑死我了都,黔驴技穷了都!】一文里提到的代维客户订单,这两天明月就一直在加班加点的重新部署着客户的四个服务器,因为有三个都是 WordPress+WooCommerce 式的电商平台,很是有些费时费力,好在现在基本都搞定了,剩下的就是些细节方面的优化、调整了。期间…

力扣231. 2 的幂(位运算)

Problem: 231. 2 的幂 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.若为0和负数则直接返回false; 2.利用一个标志数mask令其为一,不断的算术左移同时和n做与(&)运算,统计n中二进制位为1的个数&a…

HTTP-代理

HTTP-代理 web代理服务器是网络的中间实体,代理位于客户端和服务器之间,扮演者中间人的角色,在各端点之间来回传递http报文 web的中间实体 web上的代理服务器是代表客户端完成事务处理的中间人,如果没有web代理,htt…

(4)SDL渲染开发

SDL渲染开发 1. SDL简介2. 环境搭建2.1 windows2.2 Linux 3. SDL子系统3.1 eg1 创建窗口 4:SDL显示4.1 显示图片4.2 绘制长方形显示 5. SDL事件6. SDL多线程6.1 接口演示6.2 yuv显示6.3 pcm播放 1. SDL简介 SDL(Simple DirectMedia Layer)是一…

导出excle表

文章目录 导出excle表需求场景引入依赖具体代码 导出excle表 需求场景 假设我们有一个需求,现在数据库中有一些用户信息,我们想要把这些信息导出到excle表格中,然后存储到本地磁盘中。要求:excle表格的第一行需要有黄色背景&…

2千泰中英泰语词汇对照含MP3真人读音

越来越多的人到泰国旅游,今天这一份数据就是服务于此,包含了2000条泰语的日常生活词汇,并且每条记录都含有真人发音MP3对应。 有分100个章节,每个章节共有20条记录,非常适合一章节一章节的学习,具体章节有&…

《大数据分析》期末考试整理

一、单项选择题(1*9) 1.大数据发展历程:出现阶段、热门阶段和应用阶段 P2 2.大数据影响 P3 1)大数据对科学活动的影响 2)大数据对思维方式的影响 3)大数据对社会发展的影响 4)大数…

C语言适不适合新手学习?

C 语言,尽管从整体上看相对较为简单,但在实际编写 C 程序的过程中,会涉及到诸如指针等一些细节方面,这确实可能会给新手带来一定程度的困扰和挑战。不过,我们需要明确的是,这种挑战从某种意义上来说是具有积…

paddleocr实验过程

切割数据 Paddleocr/PPOCRLabel/gen_ocr_train_val_test.py;切割后的数据在train_data中,注意切割后的数据前缀默认是当前目录,因此建议切割数据在liunx中进行。建议在liunx中指定 python gen_ocr_train_val_test.py --datasetRootPathXX …