【随机森林-鸢尾花分类】

news2024/12/24 8:24:28

1. 引言

随机森林是集成学习中的一颗瑞士军刀,它是一种强大的机器学习算法,常用于分类和回归任务。随机森林集合了“三个臭皮匠,顶个诸葛亮”的智慧,通过组合多个决策树的预测结果,来提高模型的鲁棒性和性能。

2. 随机森林的原理

2.1 决策树简介

在介绍随机森林之前,我们先来了解一下决策树。决策树是一种常用的分类和回归算法,它通过不断对特征进行划分,构建一棵树状结构来进行预测。每个非叶节点表示对一个特征的划分,每个叶节点表示一个类别或预测值。

2.2 随机森林的构建过程

随机森林的构建过程分为两个主要阶段:随机选择特征和随机选择样本。

随机选择特征:在每个决策树的节点,随机选择一部分特征来进行划分。这样做的目的是减少特征之间的相关性,增加每棵树之间的差异性,从而提高整体模型的性能。

随机选择样本:在每个决策树的训练过程中,从原始训练集中随机有放回地抽取一部分样本来进行训练。这被称为自助采样(Bootstrap Sampling)。通过自助采样,每棵树都会有一部分数据没有被选中,从而增加了集成模型的多样性,防止过拟合。

2.3 随机森林的预测

对于分类问题,随机森林通过投票法(硬投票)来决定最终的预测类别。每棵决策树都会给出一个预测结果,最终的预测结果为多数投票得出的类别。

对于回归问题,随机森林通过平均法来决定最终的预测值。每棵决策树都会给出一个预测结果,最终的预测结果为所有决策树预测值的平均值。

3. 随机森林的优势

3.1 高度鲁棒性

随机森林通过集成多个决策树的结果,对异常值和噪声具有很好的鲁棒性。单个决策树可能会过拟合,但是多个决策树的组合可以有效地减少过拟合的风险。

3.2 可解释性

相比于一些复杂的深度学习模型,随机森林是一种相对简单的算法,易于理解和解释。决策树可以可视化,帮助我们理解模型的决策过程。

3.3 特征重要性评估

随机森林可以通过特征重要性评估每个特征对于模型性能的贡献程度。这个信息可以帮助我们选择重要特征,进行特征工程,提高模型的性能。

3.4 并行计算

随机森林的训练过程可以并行计算,因为每棵树都是独立训练的。这使得随机森林在大规模数据集上具有较高的计算效率。

4. 随机森林的实战项目

代码如下:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林分类器
rf_model = RandomForestClassifier(n_jobs=-1) # n_jobs=-1表示使用所有的CPU核心

# 加入网格搜索和交叉验证
from sklearn.model_selection import GridSearchCV

# 设置参数

param_grid = {
    "n_estimators": [100, 200, 300, 400, 500],
    "max_depth": [3, 5, 7, 9],
    "max_features": [2, 3, 4],
    "criterion": ["gini", "entropy"]
}

# 创建网格搜索对象
grid_search = GridSearchCV(estimator=rf_model, param_grid=param_grid, cv=3)

# 训练模型
grid_search.fit(X_train, y_train)

# 查看最优参数
print("最优参数:", grid_search.best_params_)
print("最优分数:", grid_search.best_score_)
print("最优模型:", grid_search.best_estimator_)
print("最优模型在测试集上的分数:", grid_search.best_estimator_.score(X_test, y_test))

# 使用最优模型进行预测
y_pred = grid_search.best_estimator_.predict(X_test)

# 查看准确率
print("准确率:", accuracy_score(y_test, y_pred))

# 查看特征重要性
feature_importance = pd.Series(grid_search.best_estimator_.feature_importances_, index=iris.feature_names)
print(feature_importance)

import matplotlib.pyplot as plt
import seaborn as sns

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 可视化特征重要性
sns.barplot(x=feature_importance, y=feature_importance.index)
plt.xlabel("重要性")
plt.ylabel("名称")
plt.title("特征重要性可视化")
plt.show()

from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)

# 可视化混淆矩阵
sns.heatmap(cm, annot=True, cmap="Blues")
plt.xlabel("预测值")
plt.ylabel("真实值")
plt.title("混淆矩阵")
plt.show()

from sklearn.tree import plot_tree

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 可视化决策树
plt.figure(figsize=(20, 20))
plot_tree(grid_search.best_estimator_[0], feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()




5. 总结

随机森林是一种强大的集成学习算法,具有高度鲁棒性、可解释性和特征重要性评估等优势。

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

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

相关文章

学习笔记|大模型优质Prompt开发与应用课(二)|第一节:大模型应用密码—Prompt的一千种打开方式

文章目录 第一节:大模型应用密码—Prompt的一千种打开方式01你可能听过一个小故事1910华盛顿纺织厂罢工事件 02 小问题:哪些场景会被提效类目一︰减少重复性工作的成本(降本)例如∶做策划初稿、写JD、润色文案prompt生成结果prompt生成结果prompt生成结果promptprom…

个人博客系统项目进行自动化测试

目录 一、项目界面 二、博客系统自动化测试用例 三、自动化测试 1)准备工作 2)登录界面测试 测试正确的登录案例 登录界面测试出现问题 测试错误的登录案例 3)博客列表界面测试 4)博客详情界面测试 5)博客编辑…

DEVICENET转ETHERNET/IP网关devicenet协议

捷米JM-EIP-DNT,你听说过吗?这是一款自主研发的ETHERNET/IP从站功能的通讯网关,它能够连接DEVICENET总线和ETHERNET/IP网络,从而解决生产管理系统中协议不同造成的数据交换互通问题。 这款产品在工业自动化领域可谓是一大利器&…

【QT 网络云盘客户端】——主窗口界面的设计

目录 1.设计主窗口界面 2.设置窗口的背景图片 3. 自定义标题栏 3.1 设置toolbutton按钮的图片 3.2 设置按钮的大小 3.3 将自定义标题栏添加设置到主页面中 3.4 去除窗口的原标题栏 3.5 设置按钮颜色 3.6 切换页面功能实现 4.我的文件页面的设计 4.1 菜单栏的设计 4…

插件使用权限管理软件(三)WebAPI项目IIS部署

前言 前面完成了WebAPI项目的接口服务类编写工作,接下来讲把项目部署到服务器的IIS上,让系统运行起来。 一. 项目发布 右键项目RightsManagementSystems.Web.Entry 选择“发布”选项 弹出发布选项界面,选择“文件夹”,点击下一步…

【Android知识笔记】UI体系(一)

Activity的显示原理 setContentView 首先开发者Activity的onCreate方法中通常调用的setContentView会委托给Window的setContentView方法: 接下来看Window的创建过程: 可见Window的实现类是PhoneWindow,而PhoneWindow是在Activity创建过程中执行attach Context的时候创建的…

SystemServer进程

前言 在systemServer启动文章中我们讲了在SystemServer.java的main方法里面调用new SystemServer().run()方法启动System_server进程。那么我们接着看一下SystemServer.java具体做了哪些事情? ##SystemServer的run方法介绍 frameworks\base…

VictoriaMetrics

VictoriaMetrics是一个开源的时序数据库和监控解决方案,专门用于存储和查询大规模时间序列数据。它的设计灵感来自Prometheus,但在某些方面与Prometheus有所区别,主要关注于提供高性能、高可用性和低资源占用的特点。 一、与Prometheus区别和…

Kotlin Multiplatform 创建多平台分发库

目标:通过本教程学习如何使用 Kotlin Multiplatform Library 创建多平台分发库(iOS,安卓)。 创建一个项目 1、本教程使用的是Android Studio创建 2、选择 新建工程,选择 Kotlin Multiplatform Library 3、点击next 输入需要创建的项目名称以…

第2章 逻辑分页、AutoFac注入、工作单元与仓储

1 CoreCms.Net.Model.ViewModels.Basics.IPageList<T> namespace CoreCms.Net.Model.ViewModels.Basics { ///<typeparam name"T">泛型类型实例(1个指定实体的类型实例)。</typeparam> /// <summary> /// 【逻辑分页列表--接口】 /// <…

akka 简单使用

由于AKka的核心是Actor&#xff0c;而Actor是按照Actor模型进行实现的&#xff0c;所以在使用Akka之前&#xff0c;有必要弄清楚什么是Actor模型。 Actor模型最早是1973年Carl Hewitt、Peter Bishop和Richard Seiger的论文中出现的&#xff0c;受物理学中的广义相对论(general…

3ds MAX绘制茶壶

综合一下之前的内容画个茶壶 长方形&#xff0c;然后转化为可编辑多边形&#xff0c;添加节点并设置圆角&#xff0c;如下图 车削生成一个圆环&#xff0c;其实这一步也可以用一个圆柱体和两个圆角圆柱体解决 效果如下&#xff1a; 茶壶的底座绘制好了 接下来是茶壶的上半边 …

牛客网面试必刷:CD12 换钱的最少货币数

牛客网面试必刷&#xff1a;CD12 换钱的最少货币数 前言一、动态规划&#xff08;1&#xff09;需要判断钱币和总金额&#xff08;2&#xff09;不需要判断钱币和总金额 前言 问题链接: CD12 换钱的最少货币数 一、动态规划 参考自&#xff1a;【编程题 动态规划】兑换零钱(…

Coremail敏感配置信息泄露

生活是美好的&#xff0c;生命在其间又是如此短促。既然活着&#xff0c;就应该好好地活。应该更珍惜自己生命的每个时刻&#xff0c;精神上的消沉无异于自杀。像往日一样正常的投入生活吧&#xff0c;即便是痛苦&#xff0c;也应该被看做是人的正常情感&#xff0c;甚至它是组…

【多线程】进程调度的基本过程

进程调度的基本过程 1. 什么是进程/任务&#xff08;Process/Task&#xff09;2. 描述一个进程3. 什么是进程调度&#xff1f;3.1 进程状态3.2 进程的优先级3.3 进程的上下文3.4 进程的记账信息 4. 组织这些进程 1. 什么是进程/任务&#xff08;Process/Task&#xff09; 操作…

【用户体验分析报告】 按需加载组件,导致组件渲染卡顿,影响交互体验?组件拆包预加载方案来了!

首先&#xff0c;我们看一些针对《如何提升应用首屏加载体验》的文章&#xff0c;提到的必不可少的措施&#xff0c;便是减少首屏幕加载资源的大小&#xff0c;而减少资源大小必然会想到按需加载措施。本文提到的便是一个基于webpack 插件与 react 组件实现的一套研发高度自定义…

nginx入门 - 学习笔记

一、初识 1、相关概念 1&#xff09;正向代理 一个位于客户端和原始服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff0c;然后代理向原始服务器转交请求并将获得内容返回给客户端。 2&#xff09;反向代理…

【C++】多态,虚函数表相关问题解决

文章目录 多态概念及其触发条件重写和协变&#xff08;考点1&#xff09;&#xff08;考点2&#xff09; 虚函数表及其位置&#xff08;考点3&#xff09; 多继承中的虚函数表 多态概念及其触发条件 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态。具体点就是去完成…

DSA之图(2):图的存储结构

文章目录 0 图的结构1 邻接矩阵1.1 无向图的邻接矩阵1.2 有向图的邻接矩阵1.3 网&#xff08;有权图&#xff09;的邻接矩阵表示法1.4 邻接矩阵的建立1.4.1 采用邻接矩阵建立无向网1.4.2 采用邻接矩阵建立有向网 1.5 邻接矩阵的优缺点1.5.1 优点1.5.2 缺点 2 邻接表2.1 无向图的…

Java将汉字转拼音以及判断字符是否为汉字

首先是将汉字转换为拼音&#xff1a; 导入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>创建转拼音的静态方法toPinyin&#xf…