python机器学习——随机森林

随机森林

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

算法原理:

  1. 决策树(Decision Tree): 随机森林由多个决策树组成。决策树是一种基于树状结构的模型,用于从一个特征空间映射到目标值的过程。在决策树中,每个内部节点表示一个特征或属性,每个分支代表一个可能的特征输出,而每个叶节点代表一个类别或者数值。
  2. Bagging(Bootstrap Aggregating): 随机森林利用自助采样(bootstrap sampling)的方法,从训练集中有放回地抽取若干个样本,用于训练每棵决策树。这样可以保证每棵决策树的训练集略有不同,增加了模型的多样性。
  3. 随机特征选择: 在构建决策树的过程中,每次选择分裂节点时只考虑特征集的一个随机子集。这个过程减少了各个决策树之间的相关性,提高了模型的多样性。
  4. 投票或平均: 在分类问题中,随机森林通过投票的方式确定最终的分类结果;在回归问题中,随机森林通过平均各个决策树的预测值来得到最终的预测结果。

编程中可能用到的名词:

  • n_estimators: 随机森林中决策树的数量。
  • max_features: 每棵树在分裂节点时需要考虑的特征数量。
  • min_samples_split: 内部节点再划分所需的最小样本数。
  • criterion: 用于衡量分裂质量的准则,可以是**“mse”(均方误差)或"mae"(平均绝对误差)**等。

评估方法:

  • 对于分类问题,可以使用准确率(accuracy)、精确率(precision)、召回率(recall)等指标进行评估。
  • 对于回归问题,可以使用均方误差(Mean Squared Error,MSE)、均方根误差(Root Mean Squared Error,RMSE)等指标进行评估。

优缺点:

优点:
  • 随机森林能够处理高维数据,并且不需要对数据进行特征缩放。
  • 处理缺失值和异常值时表现较好。
  • 对于大量数据集,随机森林能够有效地减小过拟合的风险。
  • 能够评估特征的重要性
缺点:
  • 对噪声较大的数据敏感。
  • 不适合处理非常稀有的事件。
  • 在某些情况下,随机森林可能会因为过多的树而导致计算开销较大。

可以使用的场景:

  • 随机森林适用于各种类型的数据,包括分类和回归问题。
  • 适用于大规模数据集和高维数据。
  • 在特征具有不同重要性的情况下表现良好。
  • 通常用于金融、医疗、生物信息学等领域的预测建模。

RandomForestRegressor函数

参数:

  1. n_estimators: 随机森林中决策树的数量。
  2. criterion: 用于衡量分裂质量的准则,可以是"mse"(均方误差)或"mae"(平均绝对误差)。
  3. max_depth: 决策树的最大深度。
  4. min_samples_split: 内部节点再划分所需的最小样本数。
  5. min_samples_leaf: 叶节点最少样本数。
  6. max_features: 寻找最佳分割点时要考虑的特征数量。
  7. n_jobs: 并行处理任务的数量。
  8. random_state: 控制随机性的种子。

确定参数的方法

  1. n_estimators:
    • 通常情况下,增加决策树的数量能够提升模型的性能,但会增加计算成本。开始时可以选择一个合适的初始值(比如 100),然后通过交叉验证等方法来调整。
  2. criterion:
    • 对于分类问题,默认可以选择"gini"或者"entropy"作为衡量分裂质量的准则。在不确定时,可以尝试使用交叉验证来选择最优的准则。
  3. max_depth:
    • 决策树的最大深度可以控制模型的复杂度。开始时可以设置一个较大的值,然后通过验证曲线或者交叉验证来选择合适的深度,以避免过拟合或者欠拟合。
  4. random_state:
    • 这个参数控制随机性,设置了特定的值之后可以保证模型的可重复性。一般来说,可以选择一个固定的种子值,比如 42,以便结果可以被重现。
  5. min_samples_split:
    • 控制一个节点需要分裂所需要的最小样本数,可以通过交叉验证来选择合适的数值。
  6. min_samples_leaf:
    • 叶节点所需的最小样本数,同样可以通过交叉验证来进行选择。
  7. max_features:
    • 控制每棵树在分裂节点时考虑的最大特征数量,可以通过尝试不同的值来进行调整。
  8. n_jobs:
    • 用于指定训练时并行运行的作业数,通常可以设为 -1 表示使用所有可用的 CPU。但是在资源受限的情况下,可以适当调整这个值。

交叉验证

交叉验证是一种评估模型性能和进行参数调优的统计学方法。它通过将数据集划分为训练集和测试集,反复使用数据的不同部分进行训练和测试,以获得可靠的模型性能评估。

常见的交叉验证方法包括 K 折交叉验证(K-fold cross-validation)和留一交叉验证(leave-one-out cross-validation):

  1. K 折交叉验证
    • 将原始数据集分成 K 个子集,其中一个子集被保留作为测试集,其余 K-1 个子集用来训练模型。这个过程重复 K 次,每个子集都有机会成为测试集。最后,计算 K 次评估的平均值作为最终的性能指标。
  2. 留一交叉验证
    • 留一交叉验证是 K 折交叉验证的一个特例,其中 K 等于样本数。对于每一轮,只留下一个样本作为测试集,其余的样本作为训练集。然后计算每次迭代的性能指标,并求平均值。

交叉验证可以帮助我们更充分地利用数据集,降低训练结果对数据划分的依赖性,同时能够更准确地评估模型在未见数据上的泛化能力。在模型选择和调参时,交叉验证也能够帮助我们选择最优的超参数组合,以避免模型在特定数据集上的过拟合或欠拟合。

交叉验证的方法
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.datasets import load_diabetes
import numpy as np# 加载糖尿病数据集diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target# 定义参数网格
param_grid = {'n_estimators': [100, 200, 300],'max_features': [1.0],'max_depth' : [10, 20, 30],'n_jobs':[-1],'criterion' : ['absolute_error', 'squared_error', 'poisson', 'friedman_mse']  # 将 criterion 参数的取值修改为合法选项
}# 初始化随机森林回归器rf = RandomForestRegressor()# 初始化交叉验证方法kfold = KFold(n_splits=5, shuffle=True, random_state=42)# 执行网格搜索grid_search = GridSearchCV(rf, param_grid, cv=kfold, scoring='neg_mean_squared_error')
grid_search.fit(X, y)# 输出最佳参数和评分print("最佳参数:", grid_search.best_params_)
print("最佳模型得分:", grid_search.best_score_)

这里采用的是K折交叉验证

这个代码会从我们选择的param_grid中选择最优的参数并且返回,但是这个代码的运行速度极慢,建议一个一个参数的进行测试,不要所有参数一起测试

例子

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_diabetes
import numpy as np# 加载糖尿病数据集diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target# 将数据集划分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 定义参数网格param_grid = {'n_estimators': [100, 200, 300],'max_features': ['auto', 'sqrt', 'log2'],'max_depth' : [10, 20, 30],'min_samples_split': [2, 5, 10],'min_samples_leaf': [1, 2, 4]
}# 初始化随机森林回归器rf = RandomForestRegressor(random_state=42)# 执行网格搜索grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='neg_mean_squared_error', n_jobs=-1)
grid_search.fit(X_train, y_train)# 输出最佳参数print("最佳参数:", grid_search.best_params_)# 在测试集上评估模型best_rf = grid_search.best_estimator_
y_pred = best_rf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("在测试集上的均方误差:", mse)
  1. 首先,我们导入需要的库,包括RandomForestRegressorGridSearchCVtrain_test_split等;
  2. 加载糖尿病数据集,并将数据集划分为训练集和测试集;
  3. 定义了一个参数网格param_grid,包括了随机森林模型的各种参数及其可能的取值;
  4. 初始化了一个随机森林回归器rf
  5. 使用GridSearchCV进行网格搜索和交叉验证,寻找最佳的参数组合;
  6. 输出了最佳的参数组合,并用这些参数在测试集上评估模型的性能,计算并输出了均方误差(MSE)作为评估指标。

需要注意的是,这个代码的运行时间较长

预测

假设我们有一组新的特征数据X_new需要进行预测,可以像下面这样使用训练好的模型进行预测:

# 假设有一组新的特征数据 X_new 需要进行预测
X_new = np.array([[0.03906215, 0.05068012, 0.06169621, 0.02187235, -0.0442235,-0.03482076, -0.04340085, -0.00259226, 0.01990842, -0.01764613]])# 使用训练好的模型进行预测
predicted_y = best_rf.predict(X_new)
print("预测的结果:", predicted_y)

在这里插入图片描述

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

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

相关文章

Pytorch实战教程(一)-神经网络与模型训练

0. 前言 人工神经网络 (Artificial Neural Network, ANN) 是一种监督学习算法,其灵感来自人类大脑的运作方式。类似于人脑中神经元连接和激活的方式,神经网络接受输入,通过某些函数在网络中进行传递,导致某些后续神经元被激活,从而产生输出。函数越复杂,网络对于输入的数…

云架构师学习------腾讯云通识-存储与数据库

云架构师学习------腾讯云通识-存储与数据库 云架构师学习------腾讯云通识-存储与数据库存储基础存储服务对象存储-COS产品概述功能概览产品优势 云硬盘-CBS产品概述产品功能产品优势云硬盘类型 文件存储-CFS产品概述产品功能产品优势文件存储类型及性能规格存储类型性能与规格…

图论09-桥和割点

文章目录 1 寻找桥的算法2 桥的代码实现3 寻找割点的算法4 割点的代码实现 1 寻找桥的算法 2 桥的代码实现 package Chapt06_Bridge;import java.util.ArrayList;public class FindBridges {private Graph G;private boolean[] visited;//ord数组记录访问的顺序private int or…

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…

计蒜客详解合集(2)期

目录 T1126——单词倒排 T1617——地瓜烧 T1612——蒜头君的数字游戏 T1488——旋转单词 T1461——校验信用卡号码 T1437——最大值和次大值 T1126——单词倒排 超级水的一道题,和T1122类似但更简单,分割后逆序输出即可~ 编写程序,读入…

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

🎏在不同的命名空间变量名可相同 创建(如下方代码块) 🎄分析一下构成 🎈-1- namespace 关键字命名空间 🎈-2- wm9 空间名称 🎈-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…

振南技术干货集:研发版本乱到“妈不认”? Git!(1)

注解目录 1、关于 Git 1.1Git 今生 (Git 和 Linux 的生父都是 Linus,振南给你讲讲当初关于 Git 的爱恨情愁,其背后其实是开源与闭源两左阵营的明争暗斗。) 1.2Git的爆发 (Git 超越时代的分布式思想。振南再给你讲讲旧金山三个年轻人创办 GitHub&…

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日,在第六届中国国际进口博览会上,普华永道发布企业数据资源会计处理一体化平台(英文名为Data Accounting Platform,简称DAP)。该产品以普华永道“五步法”数据资源入表路径为理论依据,依托多年来普华…

现在个人想上架微信小游戏已经这么难了吗...

点击上方亿元程序员关注和★星标 引言 大家好,最近我突然想起来我还有一款微信小游戏还没有上架,于是捣鼓了一天把游戏完善了一下,然后准备提交审核,却发现异常的艰难… 1.为什么难? 相信大家都大概知道&#xff0c…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024) 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议(ICAMCE 2024)将于2024年2月23-25日在中国▪长沙…

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接:https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码:lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式&#xf…

GZ038 物联网应用开发赛题第1套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第1套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员…

【漏洞复现】BYTEVALUE智能流控路由器存在命令执行

【漏洞介绍】 百为智能流控路由器 /goform/webRead/open 路由的 ?path 参数存在有回显的命令注入漏洞。攻击者可通过该漏洞在服务器端执行命令,写入后门,获取服务器权限,从而获取路由器权限。 【指纹】 title”BYTEVALUE 智能流控路由器”…

151. 反转字符串中的单词

151. 反转字符串中的单词 原题链接:完成情况:解题思路:参考代码:错误经验吸取 原题链接: 151. 反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/description/ 完成情况: 解…

ai批量剪辑矩阵无人直播一站式托管系统源头技术开发

1.全店IP形象打造----剪辑 全店IP打造模式为场景组合,需要在每个场景内按照顺序分别上传短视频素材,会与选中的音乐、标题文案组合生成有逻辑顺序的视频。可调配标题字号大小、音频音量大小。如想要携带团购地址可设置POI。可开启团购引导动画、镜头转场…

AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀

文章目录 一、ChatGPT简介二、ChatGPT在产品经理工作中的应用1. 快速获取用户反馈2. 智能分析竞品3. 智能推荐产品4.分析市场趋势5.优化产品功能 三、总结与展望《AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀》亮点内容简介目录作者简介获取方式 随着人工智能…

火山引擎公共云·城市分享会:共享云经验,一起向未来

数智化时代的来临,不仅激发了行业对云计算的资源需求,也重构了云计算的技术架构及产品布局,给业务场景带来更多可能性,让云计算成为企业走向高效治理的一剂“良方”。随着业务的多样化、复杂化,企业应该如何借助云计算…

各种业务场景调用API代理的API接口教程(附带电商平台api接口商品详情数据接入示例)

API代理的API接口在各种业务场景中具有广泛的应用,本文将介绍哪些业务场景可以使用API代理的API接口,并提供详细的调用教程和代码演示,同时,我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

NAS 扩容简明指南:使用各种外设给 NAS 们扩容

说起来有趣,NAS 除了“不同设备共享存储”这个功能之外,最重要的功能就是为设备扩容,但是 NAS 自己的存储容量不够了,又该如何。 ​这篇文章分享下我目前使用外设给 NAS 扩容的思路,如何以相对低的成本来获取更大的容…