Machine Learning机器学习之随机森林(Random Forests)

目录

前言:

思想与原理:

随机森林分类效果与什么因素有关:

经典的随机森林算法:

一、构建经典随机森林算法

1、思路

2、步骤:

3、代码实现

二、随机森林算法应用

  建模步骤

Python代码实现(完整代码):

三、总结

随机森林算法总结:

优点:

缺点:

算法提升方向:


博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

前言:

随机森林(Random Forest)是由Leo Breiman和Adele Cutler于2001年提出的一种集成学习方法,首次在其论文《Random Forests》中发表,用于解决分类和回归问题。它是一种决策树的集成方法,通过构建多棵决策树并进行集成,来提高预测性能和稳定性。

思想与原理:

随机森林的核心思想是通过构建多棵决策树,并将它们集成在一起,来提高整体模型的性能和鲁棒性。其基本原理如下:

  1. 随机选择样本: 在训练每棵决策树时,从训练集中随机抽取一部分样本(有放回抽样),用于构建决策树的训练集。这样可以增加模型的多样性,并减少过拟合的风险。

  2. 随机选择特征: 在训练每棵决策树时,从所有特征中随机选择一部分特征,用于构建决策树的节点。这样可以增加决策树之间的差异性,提高集成模型的性能。

  3. 集成预测: 对于分类问题,随机森林中的每棵决策树都会对样本进行分类,最终通过投票或取平均值的方式来确定最终的预测结果;对于回归问题,每棵决策树会对样本进行预测,最终通过取平均值的方式来确定最终的预测结果。

随机抽取样本和特征 -> | -> 对于每棵决策树: -> 随机选择一部分样本(有放回抽样) ->|                                                       |
开始 -> 集成预测 -> 对于分类问题: -> 对每棵决策树进行预测 -> 通过投票确定最终的预测结果 -> 结束|               ||               -> 对于回归问题: -> 对每棵决策树进行预测 -> 取平均值确定最终的预测结果 -> 结束|| -> 随机选择一部分特征 ->

随机森林算法的随机性思想和集成学习的思想使得它在实践中表现出色,具有很高的预测性能和抗过拟合能力。由于其简单、灵活且易于实现,随机森林成为了机器学习领域中应用广泛的算法之

随机森林分类效果与什么因素有关:

  1. 树的数量(n_estimators): 随机森林中包含的决策树数量对分类效果有显著影响。通常情况下,随着树的数量增加,随机森林的分类效果会更好,因为集成了更多的决策树,减少了过拟合的风险。但是,增加树的数量也会增加计算成本,因此需要在效果和效率之间进行权衡。

  2. 每棵树的最大深度(max_depth): 决策树的最大深度控制了树的复杂度,即树能够学习的规则的复杂程度。较深的树可以更好地捕获数据中的复杂关系,但也更容易过拟合。因此,适当限制每棵树的最大深度可以提高随机森林的泛化能力,减少过拟合的风险。

        通过调节这两个因素,可以优化随机森林的分类效果,以达到最佳的预测性能。

经典的随机森林算法:

  1. Breiman's Random Forests: 这是Leo Breiman于2001年提出的最初版本的随机森林算法。它使用了随机抽样和随机选择特征的思想,并使用基尼系数或信息增益来选择最优划分特征。

  2. Classification and Regression Trees (CART): CART是一种经典的决策树算法,可以用于构建随机森林。它使用基于基尼系数的方法来选择最优划分特征,并采用贪婪算法进行树的构建。

  3. Extremely Randomized Trees (Extra-Trees): Extra-Trees是一种与传统随机森林略有不同的集成学习算法。它在每个节点上随机选择特征,并随机确定划分点,而不是使用基尼系数或信息增益来选择最优划分特征。

  4. Isolation Forests: Isolation Forests是一种基于随机森林的异常检测算法。它使用了随机森林的思想,并通过随机选择特征和随机抽样样本来构建多棵决策树,然后利用树的高度来评估样本的异常程度。

这些经典的随机森林算法在原理和实现上略有不同,但都基于随机性的思想,并采用了多棵决策树的集成策略,以提高模型的泛化能力和鲁棒性。

一、构建经典随机森林算法

1、思路

  1. 对于每棵决策树:

    • 随机抽样训练集,生成子数据集。
    • 随机选择一部分特征。
    • 使用子数据集和选定特征训练一棵决策树。
  2. 集成预测:

    • 对于分类问题,对每棵决策树进行预测,并通过投票确定最终预测结果。
    • 对于回归问题,对每棵决策树进行预测,并取平均值确定最终预测结果。

2、步骤:

  1. 对于每棵决策树:

    • 随机抽样训练集,生成子数据集。
    • 随机选择一部分特征。
    • 使用子数据集和选定特征训练一棵决策树。
  2. 对于每个样本:

    • 对每棵决策树进行预测。
    • 对于分类问题,通过投票确定最终预测结果;
    • 对于回归问题,取平均值确定最终预测结果。

3、代码实现

通过Python代码实现的随机森林算法,包括了构建随机森林和进行预测的过程。在构建随机森林时,对训练数据进行随机抽样并随机选择一部分特征,然后使用这些数据训练一棵决策树;在进行预测时,对每个样本使用所有决策树进行预测,并通过投票决定最终的预测结果。 

from sklearn.tree import DecisionTreeClassifier
import numpy as np# 构建随机森林
def RandomForest(X_train, y_train, n_estimators, max_features=None, max_depth=None):forest = []n_samples = X_train.shape[0]  # 训练集样本数量if max_features is None:max_features = int(np.sqrt(X_train.shape[1]))  # 默认选择特征数量为特征总数的平方根for i in range(n_estimators):# 随机抽样生成子数据集sample_indices = np.random.choice(n_samples, n_samples, replace=True)# 随机选择特征feature_indices = np.random.choice(X_train.shape[1], max_features, replace=False)# 根据选定的样本和特征训练一棵决策树X_subset = X_train[sample_indices][:, feature_indices]y_subset = y_train[sample_indices]tree = DecisionTreeClassifier(max_depth=max_depth)tree.fit(X_subset, y_subset)# 将训练好的决策树和使用的特征索引保存到森林中forest.append((tree, feature_indices))return forest# 随机森林预测
def RandomForestPredict(X_test, forest):predictions = []for sample in X_test:tree_predictions = []# 对每棵决策树进行预测for tree, feature_indices in forest:# 根据决策树使用的特征索引获取样本对应的特征X_subset = sample[feature_indices].reshape(1, -1)# 对样本进行预测prediction = tree.predict(X_subset)tree_predictions.append(prediction)# 投票决定最终的预测结果final_prediction = np.argmax(np.bincount(tree_predictions))predictions.append(final_prediction)return predictions

二、随机森林算法应用

        基于随机森林算法实现对乳腺癌数据集进行分类。数据集包含了乳腺肿瘤样本的特征,以及它们是良性还是恶性的分类标签。我们可以使用随机森林模型来预测一个肿瘤是良性还是恶性。

  建模步骤

  1. 准备数据集: 加载乳腺癌数据集和空气质量数据集,并进行必要的数据预处理。

  2. 数据预处理: 包括数据清洗、特征选择、特征缩放、数据编码等。

  3. 构建随机森林模型: 使用乳腺癌数据集构建一个复杂的随机森林分类器。

  4. 模型评估: 在测试集上评估模型的性能,包括准确率、精确率、召回率、F1值等指标。

  5. 可视化结果: 使用Matplotlib展示数据处理结果,如特征重要性、模型预测结果等。

Python代码实现(完整代码):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import StandardScaler# 加载乳腺癌数据集
cancer = load_breast_cancer()
X = pd.DataFrame(cancer.data, columns=cancer.feature_names)
y = cancer.target# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 构建随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = rf_model.predict(X_test)# 模型评估
accuracy = accuracy_score(y_test, y_pred)
print("随机森林模型的准确率为:", accuracy)
print("分类报告:")
print(classification_report(y_test, y_pred))# 可视化特征重要性
feature_importances = rf_model.feature_importances_
sorted_indices = np.argsort(feature_importances)[::-1]
sorted_features = X.columns[sorted_indices]
plt.figure(figsize=(20, 12))
plt.barh(sorted_features, feature_importances[sorted_indices])
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.title('Feature Importance of Random Forest Classifier')
plt.show()

执行结果:精确率96%

 可视化数据特征图

三、总结

随机森林算法总结:

随机森林(Random Forest)是一种集成学习方法,通过构建多个决策树并集成它们的预测结果来进行分类或回归。随机森林具有以下特点:

  • 集成学习方法: 随机森林通过构建多个决策树并结合它们的预测结果来降低模型的方差,提高模型的泛化能力。

  • 随机性: 随机森林引入了随机抽样样本和随机选择特征的机制,使得每棵决策树都具有差异性,提高了模型的多样性。

  • 适用性广泛: 随机森林适用于分类和回归问题,对于大型数据集和高维特征具有良好的适应性。

优点:

  1. 准确性高: 随机森林通常具有很高的准确性,能够在处理各种类型的数据集时获得良好的性能。

  2. 抗过拟合: 由于随机森林采用了多棵决策树的集成策略,并引入了随机性,因此具有较强的抗过拟合能力。

  3. 对特征重要性的评估: 随机森林可以通过特征重要性来评估每个特征对预测的贡献程度,提供了有用的特征选择信息。

  4. 处理高维数据: 随机森林可以处理高维数据和大规模数据集,且不需要进行特征降维或特征选择。

缺点:

  1. 计算资源消耗较大: 随机森林中包含多棵决策树,因此在训练和预测过程中可能需要较多的计算资源。

  2. 模型可解释性较差: 随机森林是一种黑盒模型,难以解释每个决策树的具体逻辑,对于模型的解释性较差。

  3. 参数调节不直观: 虽然随机森林不需要过多的调参工作,但是调节一些参数如树的数量、树的深度等并不是非常直观。

算法提升方向:

  1. 集成策略改进: 引入更多的随机性或者尝试其他集成方法来提高模型性能。

  2. 特征工程优化: 提取更有价值的特征,改善模型的预测能力。

  3. 模型解释性提升: 改进随机森林模型的解释性,使得模型的预测结果更容易理解和解释。

  4. 并行化处理: 探索并行化处理的方法来加速模型的训练过程。

  5. 模型调优: 对模型参数进行调优,以进一步提高模型的性能和泛化能力。

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

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

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

相关文章

36.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-数据解码器的实现

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:35.登录成功数据…

Embedding模型提升效果的方法之一:Whitening和pooling

0. 前言 Embedding模型的主流框架基本上分为三类——基于bert结构的,基于GPT结构的和基于T5结构的,当然这些结构都是Transformer的变形。对于Embedding模型,使用bert结构目前看是最好的。有篇论文论文对基于bert的Embedding模型和基于GPT的E…

集合(下)Map集合的使用

文章目录 前言一、Map接口二、Map接口的实现类 1.HashMap类2.TreeMap类总结 前言 Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类…

CUMT linux操作系统课程设计 任务2

先说题目: 调试Linux内核的启动过程,并在Linux 0.11内核进入保护模式之前添加提示信息 //这里吐槽一下,学校发的文档让你用断点去查看运行根本无法操作,报错如下: 所以别管这个报错,先跟着我来 第一题,调试…

各城市宗族文化姓氏占比数据

各城市宗族文化姓氏占比数据 1、指标:省份代码、所属省份、城市代码、所属城市、第1大姓氏、第2大姓氏、第3大姓氏、宗族文化强度 2、方法说明: 根据2005年全国1%的人口调查数据计算。其中第1大姓氏第一大姓人口数/总人口数,宗族文化强度(…

一文700字从0到1教你实现Jmeter分布式压力测试!

之前写过用jmeter做接口测试的文章,本篇我们继续介绍下用jmeter做分布式压力测试的例子。 用jmeter做压力测试,如果只用一台机器,有鉴于线程数的限制和一台机器的性能,可能无法满足压力测试的实际需求,解决这个问题&a…

力扣--并查集1631.最小体力消耗路径

这题将图论和并查集联系起来。把数组每个位置看成图中的一个节点。 这段代码的主要思路是: 遍历地图中的每个节点,将每个节点与其相邻的下方节点和右方节点之间的边加入到边集合中(因为从上到下和从下到上他们高度绝对值一样的,…

OpenHarmony之媒体组件模块简介

源码 本文基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.2 Release源码foundation目录下的player_framework,在OpenHarmony 2.0 Release版本当中,这个模块的名字叫媒体组件模块,为了方便理解我们在本文中仍旧延…

VR全景展示:传统制造业如何保持竞争优势?

在结束不久的两会上,数字化经济和创新技术再度成为了热门话题。我国制造产业链完备,但是目前依旧面临着市场需求不足、成本传导压力加大等因素影响,那么传统制造业该如何保持竞争优势呢? 在制造行业中,VR全景展示的应用…

Query2doc——Query改写

大模型LLM最近一年比较火,但是可能由于数据量较大,存在一些矛盾的数据或者质量差的数据,就会导致大模型存在幻视情况,即存在严重不符合事实的情况。随着之而来,RAG(Retrieval Augmented Generation&#xf…

计算机组成原理(超详解!!) 第三节 运算器(浮点加减乘)

1.浮点加法、减法运算 操作过程 1.操作数检查 如果能够判断有一个操作数为0,则没必要再进行后续一系列操作,以节省运算时间。 2.完成浮点加减运算的操作 (1) 比较阶码大小并完成对阶 使二数阶码相同(即小数点位置对齐)…

windows@浏览器主页被篡改劫持@360篡改主页@广告和弹窗设置@极速版

文章目录 360篡改浏览器主页方法1锁定浏览器主页 方法2注册表修改 360广告和弹窗360极速版 小结 360篡改浏览器主页 如果您使用360,且不想卸载它,那么当你启动360后,它可能会篡改你的浏览器(比如edge)的主页start page为360早期可能是通过修改快捷方式的target等属性,但是现在…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接:最长斐波那契数列 题目: 输入一个没有重复数字的单调递增的数组,数组中至少有 3 个数字,请问数组中最长的斐波那契数列的长度是多少?例如,如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…

C++模版(基础)

目录 C泛型编程思想 C模版 模版介绍 模版使用 函数模版 函数模版基础语法 函数模版原理 函数模版实例化 模版参数匹配规则 类模版 类模版基础语法 C泛型编程思想 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板是泛型编程…

【前端Vue】Vue3+Pinia小兔鲜电商项目第3篇:静态结构搭建和分类实现,1. 整体结构创建【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程(附代码资料)主要内容讲述:认识Vue3,使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

【数据结构与算法】java有向带权图最短路径算法-Dijkstra算法(通俗易懂)

目录 一、什么是Dijkstra算法二、算法基本步骤三、java代码四、拓展(无向图的Dijkstra算法) 一、什么是Dijkstra算法 Dijkstra算法的核心思想是通过逐步逼近的方式,找出从起点到图中其他所有节点的最短路径。算法的基本步骤如下:…

应用层协议 - HTTP

文章目录 目录 文章目录 前言 1 . 应用层概要 2. WWW 2.1 互联网的蓬勃发展 2.2 WWW基本概念 2.3 URI 3 . HTTP 3.1 工作过程 3.2 HTTP协议格式 3.3 HTTP请求 3.3.1 URL基本格式 3.3.2 认识方法 get方法 post方法 其他方法 3.3.2 认识请求报头 3.3.3 认识请…

MyBatis是纸老虎吗?(七)

在上篇文章中,我们对照手动编写jdbc的开发流程,对MyBatis进行了梳理。通过这次梳理我们发现了一些之前文章中从未见过的新知识,譬如BoundSql等。本节我想继续MyBatis这个主题,并探索一下MyBatis中的缓存机制。在正式开始梳理前&am…

如何解决kafka rebalance导致的暂时性不能消费数据问题

文章目录 背景思考答案排它故障转移共享 背景 之前在review同组其它业务的时候,发现竟然把kafka去掉了,问了下原因,有一个单独的服务,我们可以把它称为agent,就是这个服务是动态扩缩容的,会采集一些指标&a…

使用C++实现一个简单的日志功能

日志对于一些大一些的项目来说,可以在项目运行出现问题时更好的帮助 项目的维护人员快速的定位到问题出现的地方并且知道出现问题的原因, 并且日志也可以帮助程序员很好的进行项目的Debug,那么今天我就来实 现一个C编写的一个简单的日志功能。…