【python】基于随机森林和决策树的鸢尾花分类

目录

引言

决策树(Decision Tree)

随机森林(Random Forest)

数据集

结果

代码实现


引言

随机森林(Random Forest)和决策树(Decision Tree)是两种在机器学习中广泛使用的分类和回归方法,它们都属于监督学习算法。这两种算法在理解数据、构建预测模型方面有着各自的特点和优势,同时也存在紧密的联系。

决策树(Decision Tree)

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一个类别(对于分类树)或一个数值(对于回归树)。决策树通过学习简单的决策规则来预测目标变量的值。

构建过程

  1. 选择最佳特征进行分割:通常使用信息增益(对于ID3算法)、增益率(对于C4.5算法)或基尼不纯度(对于CART算法)等指标来选择最佳特征。
  2. 分割数据集:根据选择的特征将数据集分割成子集。
  3. 递归构建树:对每个子集重复上述过程,直到满足停止条件(如子集为空或达到预设的树深度)。
  4. 剪枝(可选):为了避免过拟合,可以移除树中的一些子树或叶节点。

优点

  • 易于理解和解释。
  • 能够处理非线性关系。
  • 不需要数据标准化或归一化。

缺点

  • 容易过拟合。
  • 对数据中的噪声敏感。
  • 不稳定,不同的样本集可能生成差异较大的树。

随机森林(Random Forest)

随机森林是一种集成学习方法,它构建多个决策树,并通过输出这些树的多数投票(对于分类问题)或平均值(对于回归问题)来预测结果。随机森林通过引入随机性来增强模型的泛化能力。

构建过程

  1. 构建多棵决策树
    • 随机选择样本:从原始数据集中随机有放回地抽取多个样本集,每个样本集用于构建一棵树。
    • 随机选择特征:在构建树的每个节点时,随机选择一部分特征来寻找最佳分割点。
  2. 组合多棵树:通过多数投票或平均值来组合多棵树的预测结果。

优点

  • 具有很高的预测准确率,通常优于单个决策树。
  • 能够处理高维数据,不需要进行特征选择。
  • 对异常值和噪声具有很好的容忍度,不容易过拟合。
  • 易于并行化,可以提高计算效率。

缺点

  • 在某些噪声很大的分类或回归问题上会过拟合。
  • 相对于单个决策树,随机森林的模型解释性较差。

总结
决策树和随机森林都是强大的机器学习算法,它们在处理分类和回归问题时各有优势。决策树简单直观,但容易过拟合;随机森林通过集成多个决策树来提高模型的稳定性和准确性,是处理复杂数据集时的优选算法之一。

数据集

数据集是著名的鸢尾花(Iris)数据集,它常被用于分类算法的测试和教学。数据集包含了150个样本,每个样本都有4个特征(花萼长度Sepal.Length、花萼宽度Sepal.Width、花瓣长度Petal.Length、花瓣宽度Petal.Width)和一个目标变量(Species),即鸢尾花的种类。在这个数据集中,鸢尾花被分为三种类型:Setosa、Versicolour和Virginica。

  • Sepal.Length:花萼的长度,以厘米为单位。
  • Sepal.Width:花萼的宽度,以厘米为单位。
  • Petal.Length:花瓣的长度,以厘米为单位。
  • Petal.Width:花瓣的宽度,以厘米为单位。
  • Species:鸢尾花的种类,有三种可能的值:Setosa、Versicolour和Virginica。

这个数据集非常适合用于分类算法的学习和测试,因为它包含了足够数量的样本和特征,同时又有清晰的分类标签。通过使用这个数据集,可以训练模型来预测给定花萼和花瓣的尺寸时,鸢尾花的种类

结果

单颗决策树如图所示:

代码实现


import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_recall_fscore_support
import matplotlib.pyplot as plt
from sklearn import tree

data = pd.read_csv('D:/iris.csv')

X = data.iloc[:, :4]
y = data.iloc[:, 4]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

accuracy = model.score(X_test, y_test)
precision, recall, _, _ = precision_recall_fscore_support(y_test, y_pred, average='weighted')
print("Accuracy: {:.2%}".format(accuracy))
print("Precision: {:.2%}".format(precision))
print("Recall: {:.2%}".format(recall))
plt.figure(figsize=(20, 10))
tree.plot_tree(model.estimators_[0], feature_names=data.columns[:4], class_names=data.columns[4], filled=True)
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红色文化3D虚拟数字展馆搭建意义深远

在房地产与土地市场的浪潮中,无论是新城规划、乡村振兴,还是商圈建设,借助VR全景制作、虚拟现实和web3d开发技术打造的全链条无缝VR看房新体验。不仅极大提升了带看与成交的转化率,更让购房者足不出户,即可享受身临其境…

【填坑指南】PHP8报:Unable to load dynamic library ‘zip.so’ 错误

1.原因分析 这种情况多数发生在PHP安装时因为各种原因失败后,残余的库与最后安装的PHP版本不兼容导致的。 2.我的路径 一开始我按照以前摸索出来的安装PHP7.3的成功经验来编译方法安装PHP8.3,发现以前的套路已经失效了。反复重装PHP8.3失败后&#xf…

Sentinel 学习笔记

Sentinel 学习笔记 作者:王珂 邮箱:49186456qq.com 文章目录 Sentinel 学习笔记[TOC] 前言一、基础概念二、Sentinel控制台2.1 安装控制台2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务降级2.6 服务熔断 三、Sentinel客户端3.1 原始Jar包客户端3.2 Sp…

python条件

条件语句 if语句 if...else语句 if...elif...else语句 嵌套 is is 是一个身份运算符,用于比较两个对象的身份,即它们在内存中的地址是否相同。这与比较两个对象是否相等的 运算符不同。 运算符比较的是两个对象的值是否相等。 比较对象 比较基本数据…

2024-07-12 Unity AI状态机1 —— 框架介绍

文章目录 1 有限状态机2 状态机实现框架2.1 StateMachine2.2 BaseState2.3 ...State2.4 IAIObject 3 框架类图 本文章参考 B 站唐老狮 2023 年直播内容。点击前往唐老狮 B 站主页。 1 有限状态机 ​ 有限状态机(Finite - State Machine,FSM&#xff09…

linux的学习(四):磁盘,进程,定时,软件包的相关命令

简介 关于磁盘管理,进程管理,定时任务,软件包管理的命令的使用 磁盘管理类命令 du du 目录名: 查看文件和目录占用的磁盘空间 参数: -h:可以看到大小的单位,g,mb-a:还可以看到文…

日前光伏功率曲线预测

《利用 2DGRA-BiLSTM 模型的日前光伏功率曲线预测方法》 利用2DGRA实现最佳历史相似日数据的获取,根据日功率曲线的波动性将总数据分为3类(晴空条件、轻度非晴空条件和重度非晴空条件),根据3种分类&#x…

SpringCloud架构师面试

一、微服务是什么 1、基本概念 微服务是一种架构风格(区别于单体架构、垂直架构、分布式架构、SOA架构),应用程序被划分为更小的、流程驱动的服务。 2、微服务的特征 轻量化:将复杂的系统或者服务进行纵向拆分,每个…

【自然语言处理】面向新冠肺炎的社会计算应用

面向新冠肺炎的社会计算应用 1 任务目标 1.1 案例简介 新冠肺炎疫情牵动着我们每一个人的心,在这个案例中,我们将尝试用社会计算的方法对疫情相关的新闻和谣言进行分析,助力疫情信息研究。本次作业为开放性作业,我们提供了疫情…

计算机网络之广域网

广域网特点: 主要提供面向通信的服务,支持用户使用计算机进行远距离的信息交换。 覆盖范围广,通信的距离远,需要考虑的因素增多, 线路的冗余、媒体带宽的利用和差错处理问题。 由电信部门或公司负责组建、管理和维护,并向全社会…

Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决办法

在Spring配置数据源时,当使用Spring容器加载druid.properties数据库连接池配置文件时,容易碰到create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/mydbs, errorCode 1045, state 28000 java.sql.SQLException: Access denied for user …

在JavaScript中,什么是解构赋值(destructuring assignment)?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介在JavaScript中,什么是解构赋值(destructuring assignment)?1. 引言2. 解构赋值的概念3. 数组解构赋值3.1 基本语法3.2 跳过元素3.3 默认值3.4 交换变量值 4. 对象解构赋值4.1 基本语…

springboot系列教程(一):简介与入门案例(含源码)

一、SpringBoot简介 SpringBoot继承了Spring优秀的基因,上手难度小简化配置,提供各种默认配置来简化项目配置内嵌式容器简化Web项目,简化编码 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,只…

React学习笔记03-----手动创建和运行

一、项目创建与运行【手动】 react-scripts集成了webpack、bable、提供测试服务器 1.目录结构 public是静态目录,提供可以供外部直接访问的文件,存放不需要webpack打包的文件,比如静态图片、CSS、JS src存放源码 (1&#xff09…

QT多线程下,信号槽分别在什么线程中执行,如何控制?

可以通过connect的第五个参数进行控制信号槽执行时所在的线程 connect有几种连接方式,直接连接、队列连接和 自动连接 直接连接(Qt::DirectConnection):信号槽在信号发出者所在的线程中执行 队列连接(Qt::QueuedConn…

whereis命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置

文章目录 1、whereis2、实例 1、whereis whereis 命令是 Linux 和类 Unix 系统中的一个命令行工具,用于定位二进制程序、源代码和手册页(man pages)的位置。当你想要快速找到某个程序或命令的安装位置时,whereis 命令会非常有用。…

关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法

文章目录 1. ERNEL32.dll 下载2. 解决方法 👍 个人网站:【 洛秋小站】 1. ERNEL32.dll 下载 Windows 7 在安装postman时报错缺少动态链接库,提示缺少.NET Framework,这是因为本地缺少相应的dll文件导致的,这时就需要下载ERNEL32.dll文件,在解…

MySQl高级篇-查询优化篇

SQL性能分析 SQL性能下降原因: 查询语句写的烂索引失效(数据变更)关联查询太多join(设计缺陷或不得已的需求)服务器调优及各个参数设置(缓冲、线程数等) SQL调优过程: 观察&…

【大语言模型】私有化搭建-企业知识库-知识问答系统

下面是我关于大语言模型学习的一点记录 目录 人工智能学习路线 MaxKB 系统(基于大语言模型的知识问答系统) 部署开源大语言模型LLM 1.CPU模式(没有好的GPU,算力和效果较差) 2.GPU模式(需要有NVIDIA显卡支持) Ollama网络配置 Ollama前…

nodejs安装部署运行vue前端项目

文章目录 1.安装nodejs2.安装Vue CLI1.配置npm镜像源:2.安装Vue CLI:3.创建Vue项目4.启动Vue项目5.Express 1.安装nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境,它让开发人员能够创建服务器、Web 应用、命令行工具和脚…