使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)

在本文中,我们将学习如何使用Python开发一个机器学习模型,该模型可以根据一些生物测量来预测一个人在锻炼过程中燃烧的卡路里数量。

导入库和数据集

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 sb
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')

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

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

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第1张图片
现在让我们检查数据集的大小。

df.shape

输出:

(15000, 9)

让我们看看数据集的所有数据类型。

df.info()

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第2张图片
现在我们将检查数据的描述性统计测量

df.describe()

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第3张图片

探索性数据分析

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

sb.scatterplot(df['Height'], df['Weight'])
plt.show()

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第4张图片
因此,我们在这两个特征之间有一种线性关系,这是非常明显的。

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

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第5张图片
正如预期的那样,锻炼的持续时间越长,消耗的卡路里就越多。但除此之外,我们无法观察到燃烧的卡路里与身高或体重特征之间的任何关系。
在这里我们可以观察到一些现实生活中的情况:

  • 男生的平均身高高于女生。
  • 此外,女孩的体重低于男孩。
  • 在相同的平均锻炼时间内,男性消耗的卡路里高于女性。
features = df.select_dtypes(include='float').columns
  
plt.subplots(figsize=(15, 10))
for i, col in enumerate(features):
    plt.subplot(2, 3, i + 1)
    sb.distplot(df[col])
plt.tight_layout()
plt.show()

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第6张图片
连续特征的分布遵循接近正态分布,除了一些特征(如Body_Temp和Calories)。

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

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第7张图片

plt.figure(figsize=(8, 8))
sb.heatmap(df.corr() > 0.9,
           annot=True,
           cbar=False)
plt.show()

使用机器学习进行卡路里燃烧预测 -- 机器学习项目基础篇(8)_第8张图片
在这里,我们有一个严重的数据泄漏问题,因为有一个功能,是高度相关的目标列,即卡路里。

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

模型训练

现在,我们将分离特征和目标变量,并将它们分成训练和测试数据,我们将使用这些数据来选择在验证数据上表现最好的模型。

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.1,
                                      random_state=22)
X_train.shape, X_val.shape

输出:

((13500, 5), (1500, 5))

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

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

现在,让我们训练一些最先进的机器学习模型,并将它们与我们的数据进行比较。

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.893463692619434
Validation Error :  18.007896272831253

XGBRegressor() : 
Training Error :  10.110870876925963
Validation Error :  10.16210130894184

Lasso() : 
Training Error :  17.915089584958036
Validation Error :  17.995033362288662

RandomForestRegressor() : 
Training Error :  3.982735208112875
Validation Error :  10.472395222222223

Ridge() : 
Training Error :  17.893530494767777
Validation Error :  18.00781790803129

在上述所有模型中,我们已经训练的RandomForestRegressor,XGB模型的性能与验证数据的MAE相同。

你可能感兴趣的:(数据科学,机器学习,python,机器学习,数据科学,python)