机器学习:基于线性回归、岭回归、xgboost回归、Lasso回归、随机森林回归预测卡路里消耗

烘焙

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控循环单元、大型语言模型和强化学习模型

机器学习算法是一种通过训练模型对给定数据进行预测的方法。在预测卡路里消耗这个问题上,可以尝试使用以下几种机器学习算法:

  1. 线性回归:线性回归是一种基本的机器学习算法,用于建立连续变量和一个或多个自变量之间的线性关系模型。在预测卡路里消耗这个问题上,可以使用线性回归模型来建立卡路里消耗与其他相关变量(如运动时间、体重等)之间的线性关系。

  2. 岭回归:岭回归是一种回归算法,用于解决多重共线性问题。它通过对模型添加一个正则化项来降低参数的方差。在预测卡路里消耗这个问题上,岭回归可以用来减少参数的过拟合,提高预测的准确性。

  3. xgboost回归:xgboost是一种集成学习算法,属于梯度提升树模型。它通过迭代地训练一系列的决策树模型,并将它们组合成一个强大的模型。在预测卡路里消耗这个问题上,xgboost回归可以用来处理非线性关系,提高预测的准确性。

  4. Lasso回归:Lasso回归是一种基于L1正则化的线性回归算法,用于特征选择和参数稀疏化。在预测卡路里消耗这个问题上,Lasso回归可以用来筛选出对卡路里消耗影响较大的特征,提高模型的解释性和预测准确性。

  5. 随机森林回归:随机森林是一种集成学习算法,由多个决策树组成。它通过随机选择特征和样本进行训练,最终将多个决策树的预测结果进行平均或投票来得到最终结果。在预测卡路里消耗这个问题上,随机森林回归可以用来处理非线性关系和特征选择,提高预测的准确性。

目录

  • 1. 相关库和数据集
    • 1.1 相关库介绍
    • 1.2 数据集介绍
      • 1.2.1 加载数据
      • 1.2.2 数据信息
      • 1.2.3 数据描述
  • 2. 探索性数据分析
    • 2.1 特征相关性
    • 2.2 正态分布检验
  • 3. 构建机器学习模型
    • 3.1 数据准备(拆分为训练集和测试集)
    • 3.2 特征缩放
    • 3.3 模型构建(LR、XGBoost、Lasso、RF、Ridge)

1. 相关库和数据集

1.1 相关库介绍

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果,用于展现数据之间的相互关系。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
  • XGBoost – 这包含 eXtreme Gradient Boosting 机器学习算法,这是帮助我们实现高精度预测的算法之一。
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.model_selection import train_test_split 
from sklearn.preprocessing import LabelEncoder, StandardScaler 
from sklearn import metrics 
from sklearn.svm import SVC 
from xgboost import XGBRegressor 
from sklearn.linear_model import LinearRegression, Lasso, Ridge 
from sklearn.ensemble import RandomForestRegressor import warnings 
warnings.filterwarnings('ignore')

1.2 数据集介绍

1.2.1 加载数据

现在让我们将数据集加载到 pandas 的数据框中并打印其前五行。

df = pd.read_csv('calories.csv') 
df.head()

数据描述
现在让我们检查数据集的大小。

df.shape
(15000, 9)

1.2.2 数据信息

让我们检查数据集的哪一列包含哪种类型的数据。

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15000 entries, 0 to 14999
Data columns (total 9 columns):#   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  0   User_ID     15000 non-null  int64  1   Gender      15000 non-null  object 2   Age         15000 non-null  int64  3   Height      15000 non-null  int64  4   Weight      15000 non-null  int64  5   Duration    15000 non-null  int64  6   Heart_Rate  15000 non-null  int64  7   Body_Temp   15000 non-null  float648   Calories    15000 non-null  int64  
dtypes: float64(1), int64(7), object(1)
memory usage: 1.0+ MB

1.2.3 数据描述

现在我们将检查数据的描述性统计度量。

# Describe `df`
df.describe()

描述统计

2. 探索性数据分析

EDA是一种使用视觉技术分析数据的方法。它用于发现趋势和模式,或借助统计摘要和图形表示来检查假设。

sns.set()
sns.scatterplot(x= df['Height'], y= df['Weight']) 
plt.show()

高度宽度

2.1 特征相关性

features = ['Age', 'Height', 'Weight', 'Duration'] plt.subplots(figsize=(15, 10)) 
for i, col in enumerate(features): plt.subplot(2, 2, i + 1) df_sample = df.sample(1000) sns.scatterplot(x=df_sample[col], y=df_sample['Calories']) 
plt.tight_layout() 
plt.show()

在这里插入图片描述
正如预期的那样,锻炼时间越长,消耗的卡路里就越多。但除此之外,我们无法观察到卡路里消耗量与身高或体重特征之间的任何关系。

在这里,我们可以观察到一些现实生活中的现象:

  • 男生的平均身高高于女生。
  • 此外,女生的体重也低于男生。
  • 同样的平均锻炼时间,男性消耗的卡路里高于女性。

2.2 正态分布检验

features = ['Age', 'Height', 'Weight', 'Duration', 'Heart_Rate', 'Body_Temp'] plt.subplots(figsize=(15, 10)) 
for i, col in enumerate(features): plt.subplot(2, 3, i + 1) sns.distplot(df[col]) 
plt.tight_layout() 
plt.show() 

特征分布图
除了一些特征,如体温和卡路里,连续特征的分布接近正态分布。

df.replace({'male': 0, 'female': 1}, inplace=True) 
df.head() 

替代

plt.figure(figsize=(7, 6)) 
sns.heatmap(df.corr() > 0.9, annot=True, cbar=True, cmap='Purples')

相关性
这里存在一个严重的数据泄漏问题,因为有一个特征与目标列高度相关,而目标列是卡路里。

to_remove = ['Weight', 'Duration'] 
df.drop(to_remove, axis=1, inplace=True) 

3. 构建机器学习模型

3.1 数据准备(拆分为训练集和测试集)

features = df.drop(['User_ID', 'Calories'], axis=1) 
target = df['Calories'].values X_train, X_val,\Y_train, Y_val = train_test_split(features, target, test_size=0.2, random_state=22) 
X_train.shape, X_val.shape 

3.2 特征缩放

((12000, 5), (3000, 5))

现在,让我们对数据进行归一化处理,以获得稳定而快速的训练。

# Normalizing the features for stable and fast training. 
scaler = StandardScaler() 
X_train = scaler.fit_transform(X_train) 
X_val = scaler.transform(X_val) 

3.3 模型构建(LR、XGBoost、Lasso、RF、Ridge)

现在,让我们来训练一些最先进的机器学习模型,比较一下哪种模型更适合我们的数据。

from sklearn.metrics import mean_absolute_error as mae 
models = [LinearRegression(), XGBRegressor(), Lasso(), RandomForestRegressor(), Ridge()] for i in range(5): models[i].fit(X_train, Y_train) print(f'{models[i]} : ') train_preds = models[i].predict(X_train) print('Training Error : ', mae(Y_train, train_preds)) val_preds = models[i].predict(X_val) print('Validation Error : ', mae(Y_val, val_preds)) print()
LinearRegression() : 
Training Error :  17.947279968371927
Validation Error :  17.73761909957277XGBRegressor(base_score=None, booster=None, callbacks=None,colsample_bylevel=None, colsample_bynode=None,colsample_bytree=None, device=None, early_stopping_rounds=None,enable_categorical=False, eval_metric=None, feature_types=None,gamma=None, grow_policy=None, importance_type=None,interaction_constraints=None, learning_rate=None, max_bin=None,max_cat_threshold=None, max_cat_to_onehot=None,max_delta_step=None, max_depth=None, max_leaves=None,min_child_weight=None, missing=nan, monotone_constraints=None,multi_strategy=None, n_estimators=None, n_jobs=None,num_parallel_tree=None, random_state=None, ...) : 
Training Error :  7.674381575814138
Validation Error :  10.473695445229609Lasso() : 
Training Error :  17.971518133905626
Validation Error :  17.74093199010133RandomForestRegressor() : 
Training Error :  3.980961875
Validation Error :  10.59801680952381Ridge() : 
Training Error :  17.947362544638118
Validation Error :  17.737595699188827

在上述所有模型中,我们对 RandomForestRegressor 和 XGB 模型进行了训练,它们在验证数据上的 MAE 相同,性能也相同。

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

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

相关文章

如何从未入库的gerrit中撤销一个文件

用一个例子说明 比如有一个提交里面的default.xml的修改没有必要&#xff0c;需要从未入库的gerrit中移除 步骤如下&#xff1a; 1.做reset操作 git reset HEAD^ packages/SettingsProvider/res/values/defaults.xml 2.做checkout操作 git checkout packages/SettingsProv…

从“制造”到“智造”:“灯塔”经验助力中国制造业转型升级-转载

作者&#xff1a;Karel Eloot&#xff0c;侯文皓&#xff0c;Francisco Betti&#xff0c;Enno de Boer和Yves Giraud 作为中国实体经济的主体&#xff0c;制造业是推动中国经济发展乃至全球制造业持续增长的重要引擎。站在历史与未来交汇的新起点上&#xff0c;中国制造业将背…

ASP.NET信息安全研究所设备管理系统的设计与实现

摘 要 以研究所的设备管理系统为背景&#xff0c;以研究所设备管理模式为研究对象&#xff0c;开发了设备管理系统。设备管理系统是设备管理与计算机技术相结合的产物&#xff0c;根据系统的功能需求分析与定义的数据模式&#xff0c;分析了应用程序的主要功能和系统实现的主…

MoviePy(Python音视频开发)

音视频基础帧率、码率、分辨率视频格式H.264和H.265视频压缩算法 Moviepy常见剪辑类VideoFlieClipImageFlieClipColorClipTextClipCompositeVideoClipAudioFlieClipCompositeAudioClip 常见操作音视频的读入与导出截取音视频 音视频基础 帧率、码率、分辨率 体积&#xff08;V…

中国场外信用衍生产品交易基本术语与适用规则(2022 年版)

中国场外信用衍生产品交易基本术语与适用规则 &#xff08;2022 年版&#xff09; 版权所有© 中国银行间市场交易商协会 2022 声 明 中国银行间市场交易商协会&#xff08;简称“交易商协会”&#xff09;发布《中国场外信用衍 生产品交易基本术语与适用规则&#xff08;2…

知从科技应邀参加恩智浦技术日巡回研讨会郑州站汽车电子专场

4月18日&#xff0c;恩智浦技术日巡回研讨会的首个汽车电子专场在郑州成功举办。此次研讨会汇聚了众多行业专家&#xff0c;聚焦前沿的赋能技术&#xff0c;共同探讨汽车电子架构、ADAS、汽车电气化、车载信息娱乐系统、UWB超宽带等热门应用。作为恩智浦合作伙伴&#xff0c;知…

Python运维之多进程!!

本节的快速导航目录如下喔&#xff01;&#xff01;&#xff01; 一、创建进程的类Process 二、进程并发控制之Semaphore 三、进程同步之Lock 四、进程同步之Event 五、进程优先队列Queue 六、多进程之进程池Pool 七、多进程之数据交换Pipe 一、创建进程的类Process mu…

【 npm详解:从入门到精通】

文章目录 npm详解&#xff1a;从入门到精通1. [npm](https://www.npmjs.com/)的安装2. npm的基础用法2.1 初始化项目2.2 安装依赖2.3 卸载依赖2.4 更新依赖 3. npm的高级用法3.1 运行脚本3.2 使用npm scope3.3 使用npm link 4. npm资源5. 使用npm进行依赖树分析和可视化6. npm进…

虚拟机镜像文件qcow2格式转vmdk

一、在esxi上虚拟机导出qcow2镜像文件 1、卸载数据盘、网卡 2、登录虚拟机所在物理服务器&#xff0c;查找系统盘名为vm-101-disk-0的文件位置 find / -name "vm-101-disk-0"使用命令导出qcow2镜像&#xff08;进度条走完就完成了&#xff09;&#xff1a; qemu…

Oracle 修改数据库的字符集

Oracle 修改数据库的字符集 alter system enable restricted session; alter database "cata" character set ZHS16CGB231280; alter database "cata" national character set ZHS16CGB231280; alter system enable restricted session; alter database…

小红书释放被封手机号 无限注册

前几年抖音也可以释放被封手机号 那时候都不重视 导致现在被封手机号想释放 基本不可能的 或者就是最少几百块 有专业的人帮你通过某些信息差释放 本教程是拆解 小红书被封手机号怎么释放&#xff0c;从今年开始&#xff0c;被封的手机号无法注销了 所以很困扰 那么本教程来…

大模型微调实战之强化学习 贝尔曼方程及价值函数(五)

大模型微调实战之强化学习 贝尔曼方程及价值函数&#xff08;五&#xff09; 现在&#xff0c; 看一下状态-动作值函数的示意图&#xff1a; 这个图表示假设首先采取一些行动(a)。因此&#xff0c;由于动作&#xff08;a&#xff09;&#xff0c;代理可能会被环境转换到这些状…