🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【机器学习案列】基于随机森林的运动能量消耗预测分析实战
一、背景描述
本数据集包含了来自不同用户的多项体征数据,包括性别、年龄、身高、体重等基本信息,以及运动持续时间、心率和体温等与身体活动相关的数据。
通过分析这些数据,可以探索用户在进行身体活动时的热量消耗情况,即目标变量Calories,从而为个性化健身计划或健康管理提供数据支持。
二、数据说明
数据来源:
https://www.kaggle.com/datasets/ruchikakumbhar/calories-burnt-prediction
三、技术实现
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
4.2 可视化分析
# 相关性热力图
plt.figure(figsize=(10,6))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
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)
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]})
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])
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()
关键结论:
- 运动持续时间贡献度达62.8%
- 心率(21.4%)和体温(9.7%)为次要因素
- 身高/体重等静态特征影响小于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]
七、总结
- 核心规律:运动时长是能量消耗的决定性因素
- 模型优势:RF实现R²=0.997的高精度预测
- 应用场景:健身APP卡路里计算、运动手环算法优化
完整代码&数据集下载:私信我!!!