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

2024-06-15 04:04

本文主要是介绍基于随机森林的鲍鱼年龄预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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.chinasem.cn/article/1062379

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

机器学习回归预测方法介绍:优缺点及适用情况

机器学习中的回归任务是预测连续变量的值,这在金融、医疗、市场分析等领域有着广泛的应用。本文将介绍几种常见的机器学习回归方法,探讨它们的基本原理、优缺点及适用情况。 目录 1. 线性回归(Linear Regression) 2. 多项式回归(Polynomial Regression) 3. 决策树回归(Decision Tree Regression) 4. 随机森林回

首次使用回声状态网络 (ESN) 和语音特征进行帕金森病 (PD) 预测

帕金森病(Parkinson's disease, PD)是一种使人衰弱的神经退行性疾病,它需要进行精确和早期的诊断,以便为患者提供有效的治疗和护理。这种疾病是由James Parkinson在1817年首次确定的,其特征是多巴胺生成神经元的退化。多巴胺的不足导致了一系列症状,包括静止性震颤、肌肉僵硬、运动迟缓(姿势不稳定)、以及其他重要特征,如睡眠障碍、心律失常、便秘和语音变化,这

Excel做简单的趋势预测

这种方法不能代替机器学习,时序分析等,只是为后面的时序预测提供一个经验认识。 step1         选中序号列(或时间列)与预测列如图1所示: 图1 step2         工具栏点击“数据”,然后再“数据”下点击“预测模型”,如图2所示: 图2 step3         这样就会跳出窗口,此处可以进行一些参数设置如图3所示: 图3

AI智能时代:ChatGPT如何在金融市场发挥策略分析与预测能力?

文章目录 一、ChatGPT在金融策略制定中的深度应用客户需求分析与定制化策略市场动态跟踪与策略调整策略分析与优化 二、ChatGPT在算法交易中的深度应用自动交易策略制定交易执行与监控风险管理 三、未来展望《智能量化:ChatGPT在金融策略与算法交易中的实践》亮点内容简介作者简介目录获取方式 随着人工智能技术的飞速发展,ChatGPT作为一种先进的自然语言处理模型,正逐渐

【深度学习驱动流体力学】湍流仿真到深度学习湍流预测

目录 一、湍流项目结构二、三个OpenFOAM湍流算例1. motorBike背景和目的文件结构和关键文件使用和应用湍流仿真深度学习湍流预测深度学习湍流预测的挑战和应用结合湍流仿真与深度学习 2. pitzDaily背景和目的文件结构和关键文件使用和应用 3. pitzDailyMapped背景和目的文件结构和关键文件使用和应用 一、湍流项目结构 下面每个案例都包含了必要

风速预测 | 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型

基本描述 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型 模型步骤 时间序列风速预测模型基于MATLAB的无迹卡尔曼滤波算法(Unscented Kalman Filter, UKF)、SVR-UKF(Support Vector Regression - Unscented Kalman Filter)和ANN-Kalman(Arti

QuantML-Qlib Model | Kansformer: KAN+Transformer时序模型用于股票收益率预测

QuantML-Qlib Model | Kansformer: KAN+Transformer时序模型用于股票收益率预测 原创 QuantML QuantML 2024-06-18 20:57 上海 Content 之前公众号介绍了几篇KAN的文章,也做过KAN相关的模型: What KAN I say?KAN代码全解析 QuantML-Qlib开发版 | 最新神经网络结构KAN用于因

python数据分析案例-信用卡违约预测分析

一、研究背景和意义 信用卡已经成为现代社会中人们日常生活中不可或缺的支付工具,它不仅为消费者提供了便利,还为商家提供了更广泛的销售渠道。然而,随着信用卡的普及和使用量的增加,信用卡违约问题逐渐成为金融机构面临的重要挑战。信用卡违约不仅给金融机构带来财务损失,还损害了其声誉和信用评级,从而影响其长期可持续发展。因此,有效预测信用卡违约风险对金融机构来说至关重要。。。。。 二、实证分析 这个数据