🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【机器学习案列】基于XGBoost的睡眠时间预测
- 一、引言
- 二、数据集介绍
- 三、数据可视化分析
- 3.1 导入所需库
- 3.2 加载数据
- 3.3 数据探索
- 3.4 可视化分析
- 3.4.1 单变量分布
- 3.4.2 双变量关系
- 3.4.3 相关性分析
- 四、模型构建
- 4.1 数据预处理
- 4.2 划分训练集和测试集
- 4.3 构建XGBoost模型
- 4.4 训练模型
- 五、模型评估
- 六、模型优化
- 6.1 参数调优
- 6.2特征工程
- 结论
一、引言
在快节奏的现代生活中,充足的睡眠对于维持身心健康至关重要。然而,许多人的睡眠时间往往受到各种因素的影响,如工作压力、生活习惯等。本文将介绍如何使用XGBoost算法来预测睡眠时间,通过分析一些与睡眠相关的日常活动数据,如锻炼时间、阅读时间、手机使用时间等,来构建一个预测模型。
二、数据集介绍
本次分析所使用的数据集包含以下字段:
- 锻炼时间(小时/天)
- 阅读时间(小时/天)
- 手机使用时间(小时/天)
- 工作时间(小时/天)
- 咖啡因摄入量(毫克/天)
- 放松时间(小时/天)
- 睡眠时间(小时/夜)
这些数据反映了人们在一天中的各种活动情况以及对应的睡眠时间。通过对这些数据的分析,我们可以探索不同活动对睡眠时间的影响,进而构建预测模型。
三、数据可视化分析
在开始构建模型之前,我们先对数据进行简单的可视化分析,以了解各变量之间的关系。
3.1 导入所需库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_scoreplt.rcParams['font.sans-serif'] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False
3.2 加载数据
# 假设数据集存储在CSV文件中
data = pd.read_csv('sleep.csv', encoding='GBK')
3.3 数据探索
# 查看数据基本信息
print(data.info())# 查看数据的前几行
print(data.head())
3.4 可视化分析
3.4.1 单变量分布
# 绘制各变量的分布图
plt.figure(figsize=(12, 8))
sns.histplot(data['睡眠时间(小时/夜)'], kde=True)
plt.title('睡眠时间分布')
plt.show()plt.figure(figsize=(12, 8))
sns.histplot(data['锻炼时间(小时/天)'], kde=True)
plt.title('锻炼时间分布')
plt.show()
# ... 对其他变量进行类似操作
通过这些分布图,我们可以初步了解各变量的数据分布情况,例如睡眠时间是否呈正态分布,锻炼时间的分布范围等。
3.4.2 双变量关系
# 绘制睡眠时间与其他变量的散点图
plt.figure(figsize=(12, 8))
sns.scatterplot(x='锻炼时间(小时/天)', y='睡眠时间(小时/夜)', data=data)
plt.title('锻炼时间与睡眠时间的关系')
plt.show()plt.figure(figsize=(12, 8))
sns.scatterplot(x='手机使用时间(小时/天)', y='睡眠时间(小时/夜)', data=data)
plt.title('手机使用时间与睡眠时间的关系')
plt.show()
# ... 对其他变量进行类似操作
这些散点图可以帮助我们观察不同变量与睡眠时间之间的关系,例如是否存在线性关系等。
3.4.3 相关性分析
# 计算变量之间的相关性
correlation_matrix = data.corr()# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('变量相关性热力图')
plt.show()
热力图可以直观地展示各变量之间的相关性,帮助我们发现哪些变量与睡眠时间有较强的相关性,从而为后续的特征选择提供依据。
四、模型构建
4.1 数据预处理
在构建模型之前,我们需要对数据进行一些预处理操作,如处理缺失值、特征缩放等。
# 处理缺失值
data.fillna(data.mean(), inplace=True)# 特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_features = scaler.fit_transform(data.drop('睡眠时间(小时/夜)', axis=1))
scaled_data = pd.DataFrame(scaled_features, columns=data.columns[:-1])
scaled_data['睡眠时间(小时/夜)'] = data['睡眠时间(小时/夜)']
4.2 划分训练集和测试集
X = scaled_data.drop('睡眠时间(小时/夜)', axis=1)
y = scaled_data['睡眠时间(小时/夜)']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4.3 构建XGBoost模型
# 初始化XGBoost模型
xgb_model = XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
4.4 训练模型
xgb_model.fit(X_train, y_train)
五、模型评估
# 预测测试集
y_pred = xgb_model.predict(X_test)# 计算评估指标
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print(f'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')
通过计算均方误差(MSE)和R²分数,我们可以评估模型的性能。MSE越小,R²分数越接近1,表示模型的预测效果越好。
六、模型优化
为了进一步提升模型的性能,我们可以尝试一些优化方法,如调整模型参数、特征工程等。
6.1 参数调优
from sklearn.model_selection import GridSearchCV# 设置参数网格
param_grid = {'n_estimators': [100, 200, 300],'learning_rate': [0.01, 0.1, 0.2],'max_depth': [3, 4, 5]
}# 初始化GridSearchCV
grid_search = GridSearchCV(estimator=XGBRegressor(random_state=42), param_grid=param_grid, cv=5, scoring='neg_mean_squared_error')# 执行网格搜索
grid_search.fit(X_train, y_train)# 输出最佳参数
print(f'Best Parameters: {grid_search.best_params_}')# 使用最佳参数重新训练模型
best_xgb_model = grid_search.best_estimator_
通过网格搜索,我们可以找到最佳的模型参数组合,从而提升模型的性能。
6.2特征工程
除了调整模型参数,我们还可以通过特征工程来优化模型。例如,我们可以尝试添加一些新的特征,如工作时间与放松时间的比值、咖啡因摄入量与锻炼时间的交互项等,来捕捉更多的信息。
# 添加新特征
data['工作放松比'] = data['工作时间(小时/天)'] / data['放松时间(小时/天)']
data['咖啡因锻炼交互'] = data['咖啡因摄入量(毫克/天)'] * data['锻炼时间(小时/天)']# 重新进行数据预处理和模型训练
# ...
通过特征工程,我们可以为模型提供更有价值的信息,从而提高预测的准确性。
结论
本文通过分析与睡眠相关的日常活动数据,使用XGBoost算法构建了一个睡眠时间预测模型。通过对数据的可视化分析,我们了解了各变量之间的关系,并基于这些信息进行了模型构建和优化。最终,我们得到了一个性能较好的预测模型,可以为人们提供睡眠时间的预测参考。
需要注意的是,本模型的预测结果仅供参考,实际的睡眠时间还受到许多其他因素的影响,如个人体质、环境因素等。此外,模型的性能还有进一步提升的空间,可以通过更多的数据、更复杂的特征工程和更精细的参数调优来实现。