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

news2024/12/26 23:49:47

烘焙

前言

系列专栏:机器学习:高级应用与实践【项目实战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  float64
 8   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.73761909957277

XGBRegressor(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.473695445229609

Lasso() : 
Training Error :  17.971518133905626
Validation Error :  17.74093199010133

RandomForestRegressor() : 
Training Error :  3.980961875
Validation Error :  10.59801680952381

Ridge() : 
Training Error :  17.947362544638118
Validation Error :  17.737595699188827

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

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

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

相关文章

小丑的身份证和复印件 (BFS + Floyd)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 2 10 (JOKERjoke #####asdr) 输出 12 思路&#xff1a; 根据题意&#xff0c;要求最短时间&#xff0c;实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法&…

【图文教程】PyCharm安装配置PyQt5+QtDesigner+PyUic+PyRcc

这里写目录标题 PyQt5、Qt Designer、PyUic、PyRcc简介&#xff08;1&#xff09;下载安装PyQt5&#xff08;2&#xff09;打开designer.exe所在位置&#xff08;3&#xff09;在PyCharm中配置QtDesigner&#xff08;4&#xff09;验证QtDesigner是否配置成功&#xff08;5&…

重学java 34.API 5.工具类

有失才有悟&#xff0c;崩塌后的重建只会更牢固 —— 24.5.9 一、System类 1.概述: 系统相关类,是一个工具类 2.特点: a.构造私有,不能利用构造方法new对象 b.方法都是静态的 3.使用: 类名直接调用 4.方法 方法 …

Linux系统入侵排查(二)

前言 为什么要做系统入侵排查 入侵排查1 1.排查历史命令记录 2.可疑端口排查 3.可疑进程排查 4.开机启动项 4.1系统运行级别示意图&#xff1a; 4.2查看运行级别命令 4.3系统默认允许级别 4.4.开机启动配置文件 入侵排查2&#xff1a; 1.启动项文件排查&#xff1…

Python从0到POC编写--实用小脚本

UrlCheck&#xff1a; 假设我们要对一份 url 列表进行访问是不是 200 &#xff0c; 量多的话肯定不能一个一个去点开看&#xff0c; 这个时候我们可以借助脚本去判断&#xff0c; 假如有一份这样的列表&#xff0c; 这份列表呢&#xff0c;奇奇怪怪&#xff0c;有些写错了…

基于Spring Boot的公司OA系统设计与实现

基于Spring Boot的银行OA系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 用户登录界面&#xff0c;在银行OA系统运行后&#x…

刷题第3天(中等题):LeetCode24--两两交换链表中的节点--递归法

LeetCode24&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4…

FastDFS - 无法获取服务端连接资源:can‘t create connection to/xx.xx.xx.xx:0

问题描述 根据官方文档 安装完FastDFS服务器后&#xff0c; 服务正常启动&#xff0c;但是在 SpringBoot 项目使用 fastdfs-client 客户端报错无法获取服务端连接资源&#xff1a;cant create connection to/xx.xx.xx.xx:0, 一系列排查发现是获取到的 tracker 端口为 0 。 co…

Docx文件误删除如何恢复?别再花冤枉钱了,4个高效恢复软件!

不管是工作还是学习&#xff0c;总是会与各种各样的文件打交道。文件量越多就越容易出现文件丢失、文件误删的情况。遇到这些情况&#xff0c;失去的文件还能找回来吗&#xff1f;只要掌握了一些数据恢复方法&#xff0c;是很有机会恢复回来的&#xff0c;下面我会将这些方法分…

生信分析进阶2 - 利用GC含量的Loess回归矫正reads数量

在NGS数据比对后&#xff0c;需要矫正GC偏好引起的reads数量误差可用loess回归算法&#xff0c;使用R语言对封装的loess算法实现。 在NIPT中&#xff0c;GC矫正对检测结果准确性非常重要&#xff0c;具体研究参考以下文章。 Noninvasive Prenatal Diagnosis of Fetal Trisomy…

static静态成员变量和静态方法

当有new创建一个对象的,里面属性和方法,通过构造函数,能定义多个不同的对象,在我们做面向对象开发的时候,给一个场景,人在一个班级的时候,你的老师可能是固定的。 当我们用构造方法去构造的时候&#xff0c;每次都去传递一个固定的实参去定义个老师。 这样好会显得代码非常的…

DNS 解析在网络传输中有什么意义?

首先我们先说说什么是DNS解析&#xff1f; DNS解析是将域名解析为对应的IP地址的过程。DNS它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。DNS解析的过程就是寻找哪个IP地址对应你所输入的网址&#xff0c;然后将网页内容返回给用户…

常用的文件摆渡系统有哪些 | 好用的文件摆渡系统推荐

一、什么是文件摆渡系统 简单来说&#xff0c;文件摆渡系统是一种高效的、以文件为中心的文件管理系统&#xff0c;它的出现旨在解决企业在文件传输、共享和管理过程中的种种痛点。 更为值得一提的是&#xff0c;文件摆渡系统还具备强大的安全合规性&#xff0c;能够有效防止…

MultiBooth:文本驱动的多概念图像生成技术

在人工智能的领域&#xff0c;将文本描述转换为图像的技术正变得越来越先进。最近&#xff0c;一个由清华大学和Meta Reality Labs的研究人员组成的团队&#xff0c;提出了一种名为MultiBooth的新方法&#xff0c;它能够根据用户的文本提示&#xff0c;生成包含多个定制概念的图…

pytorch加载模型出现错误

大概的错误长下面这样&#xff1a; 问题出现的原因&#xff1a; ​很明显&#xff0c;我就是犯了第一种错误。 网上的修改方法&#xff1a; 我觉得按道理哈&#xff0c;确实&#xff0c;蓝色部分应该是可以把问题解决了的​。​但是我没有解决&#xff0c;因为我犯了另外一个错…

Django关于ORM的增删改查

Django中使用orm进行数据库的管理&#xff0c;主要包括以下步骤 1、创建model&#xff0c; 2、进行迁移 3、在视图函数中使用 以下的内容可以先从查询开始看&#xff0c;这样更容易理解后面删除部分代码 主要包括几下几种&#xff1a; 1、增 1&#xff09;实例例化model,代…

struct和union大小计算规则

Union 一&#xff1a;联合类型的定义 联合也是一种特殊的自定义类型&#xff0c;这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以联合也叫共用体&#xff09; 比如&#xff1a;共用了 i 这个较大的空间 二&#xff1a; 联合的…

每日Attention学习4——Spatial Attention Module

模块出处 [link] [code] [MM 21] Complementary Trilateral Decoder for Fast and Accurate Salient Object Detection 模块名称 Spatial Attention Module (SAM) 模块作用 空间注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional a…

CTFHUB-技能树-Web题-RCE(远程代码执行)-eval执行

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;eval执行解题方法&#xff1a;构造网址&#xff0c;查找当前目录文件并没有发现flag,接着查看上一级目录接着查看上一级接着查看上一级目录…

Transformer详解:从放弃到入门(完结)

前几篇文章中&#xff0c;我们已经拆开并讲解了Transformer中的各个组件。现在我们尝试使用这些方法实现Transformer的编码器。 相关文章&#xff1a; Transformer详解&#xff1a;从放弃到入门&#xff08;一&#xff09; Transformer详解&#xff1a;从放弃到入门&#xff08…