【机器学习】随机森林算法(看我以弱博强)

目录

算法引入:

算法介绍:

1. 集成学习:

2. 训练过程:

3. 分类和回归:

算法优点:

算法缺点:

算法实现:

1. 数据准备

2. 划分数据集

3. 创建随机森林模型

4. 训练模型

5. 预测

6. 评估模型

完整代码示例


人工智能领域在当今可谓炙手可热,在人工智能与机器学习领域,随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。以最终达到以弱博强的目的。

算法引入:

俗话说“三个臭皮匠顶个诸葛亮”,有一天班里要进行考试,班里有一名学霸,科目有语数外三门学科,学霸呢,每一科语数外都能考到95+,班里还有三名偏科学渣A、B、C,学生A呢语文能考100分,学生B呢,数学能考100分,学生C呢,英语能考100分,但是学生A、B、C的其他两门学科都不及格,学霸说:你们三个垃圾,你们都是战五渣,学生A、B、C很不服,想挫一挫学霸的锐气,但是他们每一个人成绩都没有学霸的成绩高,于是学生A、B、C想了一个办法,如果让学生A去做语文卷子、学生B去做数学卷子、学生C去做英语卷子,这样可以直接碾压学霸,毫无悬念的A、B、C以总成绩300分拿下学霸,这种以弱博强的算法思想就是随机森林算法。


算法介绍:

随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。从算法的名字来看,随机就是随机选取,这个具有不确定性,可能是在一个群体里面选一部分,森林则是由很多树构成,树呢在机器学习领域有一种叫决策树,随机森林就是通过很多决策树构成,决策树可以看一下我的这一篇博客:【机器学习】决策树算法-CSDN博客

1. 集成学习:

随机森林是一种集成学习方法,它结合了多个决策树的预测结果。首先我们要有很多决策树组成的随机森林,根据这个随机森林的结果,我们去预测一个新决策树的结果。

2. 训练过程:

自助采样:在构建每棵树时,随机森林使用自助采样(bootstrap sampling)从原始数据集中抽取样本,这意味着同一样本可能被多次抽取,而某些样本可能一次也不被抽取,这些自助采样都是随机选取的,带有不确定性。比如在下图中,我们有星星、云朵、星球、棒棒糖、猫咪、爱心图标,我们这些是随机选取、自助采样,可能会有重合的比如下图中(2,4)坐标,那么有一个新的事物我们可以根据选取的这样事物进行预测新事物的结果。
特征选择:在每个决策节点,随机森林不是考虑所有特征,而是随机选择一部分特征进行最佳分割点的搜索,例如:下图中每一个事物不是以整体作为单位去考虑的,而是随机选取了一部分。

3. 分类和回归:

分类:对于分类问题,每棵树会给出分类结果,随机森林通过多数投票法决定最终的分类。
回归:对于回归问题,每棵树会给出预测值,随机森林通过取这些预测值的平均值作为最终预测。


算法优点:

   - 模型随机性强,不易overfit,抗噪性强,表示对异常点outlier不敏感,具有很高的准确率。
   - 处理高维数据相对较快。
   - 树状结构,模型可解释度高,可以告诉你每个特征的重要性。

算法缺点:

   - 模型往往过于general,不具备正确处理过于困难的样本的能力。
   - 模型起点高,但是天花板低。

参数:
   - n_estimators:森林中树的数量。
   - max_features:寻找最佳分割时要考虑的特征数量。
   - max_depth:树的最大深度。
   - min_samples_split:分裂内部节点所需的最小样本数。
   - min_samples_leaf:叶节点所需的最小样本数。


算法实现:

随机森林算法的具体实现涉及到多个步骤,包括数据准备、模型训练、预测以及评估。下面我将详细介绍这些步骤,并提供一个完整的Python代码示例,使用scikit-learn库来实现随机森林算法。

1. 数据准备

首先,我们需要准备数据集。这里我们使用鸢尾花数据集(Iris dataset),这是一个常用的分类数据集。

2. 划分数据集

将数据集划分为训练集和测试集,以便在训练集上训练模型,并在测试集上评估模型的性能。

3. 创建随机森林模型

使用scikit-learn库中的RandomForestClassifier或RandomForestRegressor来创建随机森林模型。

4. 训练模型

使用训练集数据训练模型。

5. 预测

使用训练好的模型对测试集进行预测。

6. 评估模型

计算模型的准确率或其他评估指标,如均方误差。

完整代码示例

下面是一个按照上面所说的步骤,进行写完整的Python代码示例

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# 加载数据集 使用load_iris函数加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集 使用train_test_split函数将数据集划分为训练集和测试集,测试集占30%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建随机森林分类器 实例化RandomForestClassifier,设置树的数量为100
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

# 训练模型 使用训练集数据训练模型
rf_classifier.fit(X_train, y_train)

# 预测测试集 使用训练好的模型对测试集进行预测
y_pred = rf_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 打印特征重要性 
feature_importances = rf_classifier.feature_importances_
print("Feature importances:")
for feature, importance in zip(iris.feature_names, feature_importances):
    print(f"{feature}: {importance:.2f}")

# 可视化特征重要性 使用Matplotlib库绘制特征重要性的条形图
import matplotlib.pyplot as plt
features = iris.feature_names
indices = np.argsort(feature_importances)
plt.title("Feature Importances")
plt.barh(range(len(indices)), feature_importances[indices], color="r", align="center")
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel("Relative Importance")
plt.show()

这个示例展示了如何使用随机森林算法进行分类任务,并评估模型的性能。你可以根据具体需求调整数据集、模型参数和评估指标。


随机森林是一种非常强大的机器学习算法,适用于处理各种复杂的数据集和预测任务。随机森林算法因其准确性和易用性而受到广泛应用,在·分类问题、回归问题、特征选择、数据降维等方面应用很广泛。执笔至此,感触彼多,全文将至,落笔为终,感谢各位的支持。 

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

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

相关文章

Python和C++的差异在哪里

1.编程应用领域 C:广泛应用于系统级开发、嵌入式系统、游戏开发等领域。C的底层控制和高性能使其成为这些领域的理想选择。 Python:广泛应用于数据科学、Web开发、人工智能等领域。Python的简洁语法和强大库支持使其成为这些领域的首选语言。 2.语法风…

代码随想录 (三)—— 哈希表部分刷题

当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。 数组set (集合)map(映射) 在java中有就是,hashmap, LinkedHashMap, TreeMap ,HashTable 等 总结一下,当我们遇到了要快速判断一个…

vue-scrollto实现页面组件锚点定位

文章目录 前言背景操作指南安装及配置步骤vue组件中使用 参考文章 前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据…

处理 Vue3 中隐藏元素刷新闪烁问题

一、问题说明 页面刷新,原本隐藏的元素会一闪而过。 效果展示: 页面的导航栏通过路由跳转中携带的 meta 参数控制导航栏的 显示/隐藏,但在实践过程中发现,虽然元素隐藏了,但是刷新页面会出现闪烁的问题。 项目源码&…

现代 C++ 模板教程 学习笔记

现代C模板教程 看了这个教程,自己记录一些内容,不一定靠谱。 为什么需要模板?简单来说就是为了少写点重复的代码,让编译器自动帮我们生成。为了少写点函数,就有了函数模板,为了少写点类,就有了…

探索未来:揭秘pymqtt,AI与物联网的新桥梁

文章目录 探索未来:揭秘pymqtt,AI与物联网的新桥梁背景:为什么选择pymqtt?什么是pymqtt?如何安装pymqtt?简单的库函数使用方法1. 配置MQTT连接2. 创建Mqtt对象3. 发布消息4. 订阅主题5. 运行MQTT客户端 场景…

transformer中的attention机制之旅

本文为学习笔记,若有相关交流或者需要补充的评论区欢迎 attention在深度学习之中最初是作为模型中的一个组件 用于提升模型精度,其原理是为了通过一定的计算方式获取信息中强化关注的特征。 attention相关的基础介绍可以参考其他博客中的内容: 一文看懂 …

C++ | Leetcode C++题解之第463题岛屿的周长

题目&#xff1a; 题解&#xff1a; class Solution {constexpr static int dx[4] {0, 1, 0, -1};constexpr static int dy[4] {1, 0, -1, 0}; public:int dfs(int x, int y, vector<vector<int>> &grid, int n, int m) {if (x < 0 || x > n || y <…

P1169 [ZJOI2007] 棋盘制作

P1169 [ZJOI2007] 棋盘制作 left[i][j]:代表从(i,j)(i,j)能到达的最左位置 right[i][j]:代表从(i,j)(i,j)能到达的最右位置 up[i][j]:代表从(i,j)(i,j)向上扩展最长长度. 悬线法&#xff1a; 假设求没有黑色格子的最大矩形&#xff0c;那么我们可以考虑对每个点计算&#x…

二、安装vmtools

1、 介绍 vmtools 安装后&#xff0c;可以让我们在 windows 下更好的管理 vm 虚拟机。可以设置 windows 和 centos 的共享文件夹 当时当我们发现安装虚拟机工具位置是灰色的 右击打开终端 在终端输入命令 yum list installed | grep open-vm-*yum list installed 命令会列出…

04:(寄存器开发)使用外部中断按键控制LED

寄存器开发 1、选择外部引脚配置2、上升沿触发/下降沿触发3、NVIC的配置4、完整代码 关于外部中断的AFIO&#xff0c;NVIC的基础知识请参考《stm32标准库入门教程》 链接: link 1、选择外部引脚配置 如上图所示&#xff1a;外部中断配置寄存器AFIO_EXTICR(1~4)中选择EXTI(0 ~ …

Bootstrap 5 练习 - 显示工具提示

文章目录 引言准备工作创建HTML文件导入Bootstrap 5框架编写页面代码编写JavaScript脚本浏览网页注意事项结束语 引言 大家好&#xff0c;今天我们将一起学习如何在Bootstrap 5中创建一个简单的工具提示&#xff08;Tooltip&#xff09;。工具提示是一个非常实用的用户界面元素…

通过观测云 DataKit Extension 接入 AWS Lambda 最佳实践

前言 AWS Lambda 是一项计算服务&#xff0c;使用时无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行代码并自动缩放。借助 AWS Lambda&#xff0c;几乎可以为任何类型的应用程序或后端服务运行代码&#xff0c;而且无需执行任何管理。 Lambda Layer 是一个包…

Java面试宝典-Java集合02

目录 Java面试宝典-Java集合02 21、TreeMap 和 TreeSet 在排序时如何比较元素&#xff1f; 22、ArrayList 和 LinkedList 的区别是什么&#xff1f; 23、ArrayList 和 Vector 的区别&#xff1f; 24、队列和栈是什么&#xff1f;有什么区别&#xff1f; 25、Queue和Deque的区别…

大模型存储选型 JuiceFS 在关键环节性能详解

从去年开始&#xff0c;LLM大语言模型领域发展迅速、如 LLaMA、ChatGLM、Baichuan、Qwen 和 yi-model 等基础模型&#xff08;Foundation Models&#xff09;的数量显著增加。众多企业也开始基于这些基础模型做 post-training 的相关工作&#xff0c;以开发特定垂直领域的模型实…

小猿口算自动PK脚本

大家好&#xff0c;我是小黄。 近期&#xff0c;众多大学生炸鱼小猿口算APP,把一众小学生都快虐哭了&#xff0c;小黄听闻后&#xff0c;也跃跃欲试。对此小黄也参考网上的资料写了一个自动Pk的脚步。 首先大家需要安装一个pytorch环境过程中&#xff0c;如果小伙伴对此不熟悉的…

Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)

1.进程终止 &#xff08;1&#xff09;错误码 对于程序常见错误信息&#xff0c;C/C提供了信息解释&#xff0c;保存在<string.h>&#xff0c;使用strerror(错误码)就可以查询 错误信息成立的前提是错误码要和错误信息匹配&#xff0c;我们需要结合C/C给我们的错误码来…

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI&#xff0c;支持 ChatGPT 网页端的大部分功能&#xff0c;支持各类模型服务&#xff0c;包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星&#xff0c;非常受欢迎。 功能介绍 本篇介绍该项目的功能…

考研笔记之操作系统(四) - 文件管理

文件管理 1. 简介1.1 前情回顾1.2 文件的属性1.3 文件内部数据的组织方式1.4 操作系统向上提供的文件功能1.5 文件应如何放在外存 2. 文件的逻辑结构2.1 无结构文件2.2 有结构文件2.2.1 顺序文件2.2.2 索引文件2.2.3 索引顺序文件2.2.4 多级索引顺序文件 3. 文件目录3.1 基本概…