基于随机森林的鲍鱼年龄预测

文章目录

  • 1.作者介绍
  • 2.关于理论方面的知识介绍
    • 2.1 背景介绍
      • 2.1.1基本概念
      • 2.1.2算法步骤
      • 2.1.3优势
      • 2.1.4劣势
      • 2.1.5应用场景
      • 2.1.6随机森林的重要变体
      • 2.1.7相关理论
    • 2.2随机森林算法架构
      • 2.2.1 数据预处理与采样
      • 2.2.2构建决策树
      • 2.2.3决策树的训练
      • 2.2.4集成模型
      • 2.2.5 模型输出
    • 2.3鲍鱼数据集介绍
  • 3.关于实验过程的介绍,完整实验代码,测试结果
    • 3.1数据集处理
      • 3.1.1安装需要导入的模块:
      • 3.1.2数据集划分
      • 3.1.3训练参数设置
      • 3.1.4运行代码输出结果
    • 3.2问题分析
  • 4. 附录(完整代码)
  • 5.参考文献


1.作者介绍

郝浩,男,西安工程大学电子信息学院,2023级研究生
研究方向:输电线路绝缘子缺陷检测
电子邮件:2606801894@qq.com

孙思伟,男,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:sunsiwei0109@163.com

2.关于理论方面的知识介绍

2.1 背景介绍

随机森林(Random Forest)是一种集成学习方法,广泛应用于分类和回归任务。它是由Leo Breiman和Adele Cutler在2001年提出的,是基于决策树(Decision Tree)的组合模型。以下是随机森林算法的详细背景介绍:

2.1.1基本概念

随机森林通过构建多个决策树并结合其预测结果来提高模型的整体性能。它属于**Bagging(Bootstrap Aggregating)**方法的范畴。具体而言,随机森林通过以下两个主要步骤来创建多个不同的决策树:
Bootstrap采样:从原始训练集中有放回地随机抽取多个子集。
特征随机选择:在每个决策树的节点分裂时,随机选择一个特征子集进行最佳分裂,而不是使用所有特征。

2.1.2算法步骤

  1. 数据准备:从原始数据集创建多个Bootstrap样本,每个样本的大小与原始数据集相同。
  2. 构建决策树:对每个Bootstrap样本,构建一棵决策树。在构建过程中,节点的分裂仅在一个随机选择的特征子集上进行。
  3. 集成模型:将所有决策树的预测结果进行平均(回归任务)或投票(分类任务)以得到最终预测。

2.1.3优势

减少过拟合:单个决策树容易过拟合训练数据,而随机森林通过集成多个决策树来减少这种风险。
高准确性:由于结合了多个决策树的预测,随机森林通常比单个决策树更准确。
处理高维数据:随机选择特征使得它能有效处理高维数据集。
内置特征重要性评估:随机森林可以提供每个特征的重要性评分,有助于特征选择。

2.1.4劣势

计算开销较大:训练多个决策树和预测时的集成计算会耗费更多的资源。
解释性较差:相比单个决策树,随机森林的模型结构更为复杂,难以解释。

2.1.5应用场景

随机森林在许多领域有广泛的应用,包括但不限于:
金融领域:信用评分、股票市场预测
医疗领域:疾病预测、基因数据分析
市场营销:客户分类、销售预测
计算机视觉:图像分类、对象检测

2.1.6随机森林的重要变体

极端随机树(Extremely Randomized Trees, ExtraTrees):除了随机选择特征,还随机选择分裂点。
随机森林回归(Random Forest Regression):应用于回归任务。

2.1.7相关理论

Bagging:通过自助采样(Bootstrap)生成多个训练集,并对这些训练集分别训练模型,然后综合这些模型的预测结果。
决策树:一种树状结构的模型,利用特征的条件来进行数据分类或回归。
在这里插入图片描述
通过结合多个决策树,随机森林能够提高模型的泛化能力和稳定性,成为机器学习中非常重要且广泛应用的算法之一。

2.2随机森林算法架构

随机森林算法是一种集成学习方法,其架构由多棵独立的决策树组成。以下是随机森林算法的详细架构介绍:

2.2.1 数据预处理与采样

  1. 数据准备
    原始数据集:包含特征(输入变量)和标签(输出变量)。
  2. Bootstrap采样
    从原始数据集中有放回地随机抽取多个子集(Bootstrap样本),每个子集的大小与原始数据集相同。

2.2.2构建决策树

  1. 特征选择
    在每个节点进行分裂时,从全部特征中随机选择一个特征子集(通常是总特征数的平方根)进行最佳分裂。
  2. 构建过程
    对于每个Bootstrap样本,构建一棵决策树。
    在构建过程中,使用特征子集来决定每个节点的分裂。

2.2.3决策树的训练

每棵决策树独立训练,不进行剪枝(Pruning),以确保每棵树的深度最大化,从而捕捉到训练数据中的更多模式。

2.2.4集成模型

  1. 集成预测
    对于分类任务:每棵决策树进行投票预测,最终结果为投票数最多的类别。
    对于回归任务:每棵决策树进行数值预测,最终结果为所有树预测值的平均值。

2.2.5 模型输出

最终模型由多棵决策树组成,集成了所有决策树的预测结果,从而提高整体模型的稳定性和准确性。

2.3鲍鱼数据集介绍

鲍鱼数据集可以从 UC Irvine 数据仓库中获得,其 URL:abalone.data。
此数据集数据以逗号分隔,没有列头。每个列的名字存在另外一个文件中。建立预测模型所需的数据包括性别、长度、直径、高度、整体重量、去壳后重量、脏器重量、壳的重量、环数。最后一列“环数”是十分耗时采获得的,需要锯开壳,然后在显微镜下观察得到。这是一个有监督机器学习方法通常需要的准备工作。基于一个已知答案的数据集构建预测模型,然后用这个预测模型预测不知道答案的数据。
本实验用Sklearn模块RandomForestRegressor类的对鲍鱼数据建立随机森林回归模型,然后用训练完成的模型测试一部分数据。
本示例采用鲍鱼数据集abalone.csv。本数据集有4178行9列。前8列表示特征,最后一列是鲍鱼的环数量,即是标签。部分数据如下表所示:

在这里插入图片描述

数据集应用场景:

鲍鱼数据集常用于以下机器学习任务:
回归分析:预测鲍鱼的年龄(环数)。
分类任务:将鲍鱼按年龄分组进行分类。
特征选择和工程:用于测试特征选择方法和工程技术。
算法评估:作为基准数据集评估机器学习算法的性能。
鲍鱼数据集因其简单且包含多种类型特征,成为机器学习入门和算法研究的理想选择。

3.关于实验过程的介绍,完整实验代码,测试结果

3.1数据集处理

3.1.1安装需要导入的模块:

import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score

3.1.2数据集划分

# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3.1.3训练参数设置

# 初始化随机森林模型
rf = RandomForestRegressor(random_state=42)# 定义参数网格
param = {"n_estimators": [10, 20, 30, 40], "max_depth": [25, 35, 45]}# 初始化 GridSearchCV,减少折数
gc = GridSearchCV(rf, param_grid=param, cv=3)

3.1.4运行代码输出结果

C:\Software\anaconda3\envs\py310\python.exe D:\JupetyCode\machinelearning\鲍鱼年龄.py 
Best Parameters: {'max_depth': 25, 'n_estimators': 40}
Best Score: 0.5344924150868674
Mean Squared Error: 5.25
R^2 Score: 0.52Actual  Predicted  Actual Age  Predicted Age
866        9     12.075        10.5         13.575
1483       8      9.325         9.5         10.825
599       16     13.825        17.5         15.325
1702       9     10.650        10.5         12.150
670       14     13.075        15.5         14.575进程已结束,退出代码为 0

3.2问题分析

有时在自己找代码的时候,有些代码在加载数据集路径时提示需要csv格式的文件(也就是excel文件)此时我们需要把数据集data文件(word文件)格式转变,并且csv文件需要我们手动添加鲍鱼特征类别,如下图所示,否则代码运行时会识别不到特征类别。本文中直接用data文件即可。

4. 附录(完整代码)

import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score# 模拟加载数据
abalone_data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data'
abalone_column_names = ['Sex', 'Length', 'Diameter', 'Height', 'Whole weight', 'Shucked weight', 'Viscera weight', 'Shell weight', 'Rings']
abalone = pd.read_csv(abalone_data_url, names=abalone_column_names)# 将 'Sex' 列的分类变量映射为数值变量
abalone["Sex"] = abalone["Sex"].map({"M": 0, "F": 1, "I": 2})# 分离特征和目标
X = abalone.drop("Rings", axis=1)
y = abalone["Rings"]# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化特征值
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 初始化随机森林模型
rf = RandomForestRegressor(random_state=42)# 定义参数网格
param = {"n_estimators": [10, 20, 30, 40], "max_depth": [25, 35, 45]}# 初始化 GridSearchCV,减少折数
gc = GridSearchCV(rf, param_grid=param, cv=3)# 进行网格搜索
gc.fit(X_train, y_train)# 输出最佳参数和最佳得分
print(f"Best Parameters: {gc.best_params_}")
print(f"Best Score: {gc.best_score_}")# 使用最佳模型进行预测
best_model = gc.best_estimator_
y_pred = best_model.predict(X_test)# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print(f"Mean Squared Error: {mse:.2f}")
print(f"R^2 Score: {r2:.2f}")# 查看预测结果和实际结果的对比
comparison = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})# 计算实际年龄和预测年龄
comparison['Actual Age'] = comparison['Actual'] + 1.5
comparison['Predicted Age'] = comparison['Predicted'] + 1.5# 打印对比结果
print(comparison.head())

5.参考文献

  1. Breiman, L. (2001). Random forests. Machine learning, 45(1), 5-32.
  2. Ho, T. K. (1995). Random decision forests. In Proceedings of the 3rd international conference on document analysis and recognition (Vol. 1, pp. 278-282). IEEE.

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

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

相关文章

写给程序员看的LangChain入门指南来了(送PDF版)

《LangChain入门指南》 LangChain作为大模型集成框架鼎鼎大名,这本《LangChain入门指南》是一本很及时的书,值得推荐~ 01 为什么需要LangChain 首先想象一个开发者在构建一个LLM应用时的常见场景。 当你开始构建一个新项目时,…

初阶 《数组》 3. 数组越界

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。 C语言本身…

极验行为式验证码适配Harmony 鸿蒙SDK下载

现阶段,越来越多的开发者正在积极加入鸿蒙生态系统。随着更多开发者的参与,早在去年9月,极验就成为首批拥有鸿蒙NEXT内测版本和手机系统测试机会的验证码供应商。 为了提高各开发者及企业客户集成鸿蒙版本行为验4.0的效率,方便大家…

leetcode 动态规划 (基础版) 下降路径最小和

题目: 题解: 这题和三角型路径和相似,但这题无法在像哪一题一样通过换一个方向逃避下标特判。所以这道题就写一个下标特判的方案。特殊的下标是每一行的第一个元素和最后一个元素,它们由头上的一个元素和左上和右上中的其中一个…

python magic_number对照表(python1.5-python3.12)

文章目录 前言获取Magic NumberMagic Number对照表 其它相关推荐: Python3.9及以上Pyinstaller 反编译教程(exe转py) 前言 Python3.7及以上版本的编译后二进制文件中,头部除了四字节Magic Number,还有四个字节的空位和八个字节的时间戳 大小…

Spring Boot组件化与参数校验

Spring Boot组件化与参数校验 Spring Boot版本选择 2.3.x版本 2.6.x版本 Spring Boot核心思想 约定大于配置,简化繁琐的配置 Spring Boot自动配置原理 SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,Spr…

【AI副业指南】用AI做心理测试图文号,单月稳赚7000+(附详细教程)

大家好,我是画画的小强 因为AI的出现,很多自媒体副业项目变得简单容易上手,也给予很多想要在业余时间变现的朋友更丰富的项目选择。 今天分享的赛道绝对颠覆大家的认知,本期将叫大家如何通过AI在自媒体平台上做心理测试账号。 …

购物返利系统的安全性:防范欺诈与数据保护

购物返利系统的安全性:防范欺诈与数据保护 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 购物返利系统作为一种电子商务模式,通过向消…

不同版本的 Rocky Linux 快速更换阿里镜像源

环境:兼容 Rocky Linux 任意版本。 搞服务器系统从 CentOS 折腾到 Rocky Linux,然后又折腾到 Alma Linux;最近因为 RKE2 没有做 Alma Linux 的兼容性,又折腾到了 Rocky Linux ,真的是一把鼻涕一把泪呀。但是实在是不理…

行车记录仪文件夹“0字节”现象解析与恢复策略

一、行车记录仪文件夹“0字节”现象描述 行车记录仪作为现代驾驶中的必备设备,其储存的视频数据对于事故记录和取证至关重要。然而,有时车主们可能会遇到这样一个问题:行车记录仪的某个文件夹内的文件突然变成了0字节大小,无法正…

Transformer的上下文学习能力是哪来的?

有理论基础,我们就可以进行深度优化了。 为什么 transformer 性能这么好?它给众多大语言模型带来的上下文学习 (In-Context Learning) 能力是从何而来?在人工智能领域里,transformer 已成为深度学习中的主导模型,但人们…

口罩佩戴智能监测摄像机

智能监测摄像机在现代城市安全管理中扮演着关键角色,尤其是像口罩佩戴智能监测摄像机这样的设备,其应用正在日益扩展,对于公共卫生和安全至关重要。 这类摄像机利用先进的图像识别技术,能够实时监测人群中是否佩戴口罩。通过高精度…

微信小程序笔记 四!

协同工作和发布 - 协同工作 1. 了解权限管理需求 在中大型的公司里,人员的分工非常仔细:同一个小程序项目,一般会有不同岗位、不同角色的员工同时参与设计与开发。 此时出于管理需要,我们迫切需要对不同岗位、不同角色的员工的…

探讨GMock封装与StubMock的实现及其优点

文章目录 0.概要1. 为什么要封装GMock?2. stub_mock.h 的设计与实现2.1 接口(宏)介绍2.2 核心实现细节2.3 使用示例2.3.1 静态函数打桩2.3.2 类成员函数打桩2.3.3 虚函数打桩2.3.4 重载函数打桩 2.4 lambda表达式的使用场景2.5 gmock action …

How to use ModelSim

How to use ModelSim These are all written by a robot

Apache DolphinScheduler 亚马逊云科技联合Meetup: 基于云上的最佳实践

引言 随着大数据和云计算技术的快速发展,企业在数据管理和任务调度上面临着前所未有的挑战,包括复杂的配置过程、性能优化和成本管理等问题。同时,确保数据在传输和存储过程中的安全性,并满足合规性要求,也是一个重要…

深入理解TCP协议:工作原理、报文结构及应用场景

TCP协议详解 TCP(Transmission Control Protocol,传输控制协议)是因特网协议套件中最重要的协议之一。它为应用程序提供了可靠、面向连接的通信服务。TCP协议确保数据包按顺序到达,并且没有丢失或重复。本文将详细介绍TCP协议的工…

纯前端实现导出excel

项目背景: vue2 插件: xlsx;xlsx-style;file-saver 说明: 单独使用 xlsx插件,也可以将网页上的table导出成excel,但是导出的excel,没有样式 结合xlsx-style;file-saver&a…

Zookeeper 集群节点故障剔除、切换、恢复原理

Zookeeper 集群节点故障剔除、切换、恢复原理 zookeeper 集群节点故障时,如何剔除节点,如果为领导节点如何处理,如何进行故障恢 复的,实现原理? 在 Zookeeper 集群中,当节点故障时,集群需要自动剔除故障节点并进行故障恢复,确保集群的高 可用性和一致性。具体来说,…

手机数据如何恢复?11 款最佳安卓手机恢复软件

媒体可能由于各种原因而从您的设备中删除,可能是意外或病毒攻击。 在这些情况下,照片恢复应用程序是唯一的解决方案。理想的照片恢复应用程序取决于各种因素,例如存储设备的损坏程度、删除照片后的持续时间以及应用程序使用的恢复算法的有效性…