目录

机器学习案列基于随机森林的运动能量消耗预测分析实战

【机器学习案列】基于随机森林的运动能量消耗预测分析实战

🧑 博主简介:曾任某智慧城市类企业 算法总监 ,目前在美国市场的物流公司从事 高级算法工程师 一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID: xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

https://i-blog.csdnimg.cn/direct/afcf144472ba428aaa75866392fec38d.gif#pic_center

一、背景描述

本数据集包含了来自不同用户的多项体征数据,包括性别、年龄、身高、体重等基本信息,以及运动持续时间、心率和体温等与身体活动相关的数据。

通过分析这些数据,可以探索用户在进行身体活动时的热量消耗情况,即目标变量Calories,从而为个性化健身计划或健康管理提供数据支持。

https://i-blog.csdnimg.cn/img_convert/fba6c9ada15f71f3e884a1a0d7c42f97.png

二、数据说明

https://i-blog.csdnimg.cn/img_convert/e52694f076ebc414d15624cfb928583f.png

数据来源:

三、技术实现

3.1 环境配置

# 核心库依赖
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
import seaborn as sns

3.2 数据预处理

# 加载数据并清洗
data = pd.read_csv('calories.csv').drop(columns=['User_ID'])
data.columns = data.columns.str.lower()

# 异常值处理(以身高为例)
Q1 = data['height'].quantile(0.25)
Q3 = data['height'].quantile(0.75)
data = data[(data['height'] > Q1-1.5*(Q3-Q1)) & (data['height'] < Q3+1.5*(Q3-Q1))]
  • 数据维度
    15,000样本 × 8特征
  • 特征组成 :
    • 基础体征:性别、年龄、身高(cm)、体重(kg)
    • 运动指标:持续时间(min)、心率(bpm)、体温(℃)
    • 目标变量:卡路里(Cal)
  • 数据质量
    无缺失值,检测到身高/体重异常值

四、数据分析

4.1 关键统计指标

data.describe().T

https://i-blog.csdnimg.cn/img_convert/3443eadcb95a36dc7dc16510a5e361c8.png

4.2 可视化分析

# 相关性热力图
plt.figure(figsize=(10,6))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')

https://i-blog.csdnimg.cn/img_convert/ff05d04dd50b48122e514f834186370f.png

1.持续时间越长,燃烧的卡路里就越高。

2.心率越快,燃烧的卡路里就越高。

3.年龄和燃烧的卡路里具有较弱的相关性。

4.持续时间增加会导致心率和体温增加。

五、预测建模

5.1 特征工程

encoder = LabelEncoder()

model_data = data.copy()
model_data['gender'] = encoder.fit_transform(model_data['gender'])

model_data.sample(5)

https://i-blog.csdnimg.cn/img_convert/4fcefb86e27f599d7092702981ba5568.png

5.2 数据集划分

x = model_data[['gender', 'age', 'height', 'weight', 'duration', 'heart_rate',
                'body_temp']]
y = model_data['calories']

x_train, x_test, y_train, y_test = train_test_split(x, y, 
                                                    train_size=0.7, 
                                                    random_state=42)

5.3 随机森林建模

rf_model = RandomForestRegressor(n_estimators=1000, 
                                 max_depth=15, 
                                 max_features=3, 
                                 oob_score=True, 
                                 random_state=42)

rf_model.fit(x_train, y_train)
rf_predicted = rf_model.predict(x_test)
rf_score = rf_model.score(x_test, y_test)
rf_mae = mean_absolute_error(y_test, rf_predicted)
rf_oob = rf_model.oob_score_

rf_df = pd.DataFrame({'model':['Random Forest'], 
                      'r2_score':[rf_score], 
                      'rf_mae':[rf_mae], 
                      'oob_score':[rf_oob]})

https://i-blog.csdnimg.cn/img_convert/4c245d44c155381f48c6d770059c54a4.png

5.4 预测结果可视化

sns.scatterplot(x=x_test['heart_rate'], 
                y=y_test, 
                color=sns.color_palette('viridis')[4])
sns.lineplot(x=x_test['heart_rate'], 
             y=rf_predicted, 
             color=sns.color_palette('viridis')[2])

https://i-blog.csdnimg.cn/img_convert/041f6bf4789955941751e4632cf7ad55.png

5.5 特征重要性

# 获取特征重要性
feature_importances = rf_model.feature_importances_
feature_names = x.columns

# 绘制特征重要性条形图
sns.barplot(x=feature_importances, y=feature_names, palette="viridis")
plt.xlabel("Importance")
plt.ylabel("Features")
plt.title("Feature Importances")
plt.show()

https://i-blog.csdnimg.cn/img_convert/33225df7aa66a82dc9ee94e035d900b4.png

关键结论

  1. 运动持续时间贡献度达62.8%
  2. 心率(21.4%)和体温(9.7%)为次要因素
  3. 身高/体重等静态特征影响小于5%

六、模型部署

# 保存最佳模型
import joblib
joblib.dump(model, 'calorie_predictor.pkl')

# 预测示例
test_sample = [[1, 30, 175, 70, 30, 120, 40.5]]  # 男性,30岁,运动30分钟
print(rf_model.predict(scaler.transform(test_sample)))  # 输出: [245.6]

https://i-blog.csdnimg.cn/img_convert/c85827d85324e7165054d4835efa44e3.png

七、总结

  1. 核心规律 :运动时长是能量消耗的决定性因素
  2. 模型优势 :RF实现R²=0.997的高精度预测
  3. 应用场景 :健身APP卡路里计算、运动手环算法优化

完整代码&数据集下载私信我!!!


技术交流 :欢迎在评论区探讨特征工程优化方案或模型改进思路!