当前位置: 首页 > article >正文

【机器学习案列】基于XGBoost的睡眠时间预测

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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_score

plt.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算法构建了一个睡眠时间预测模型。通过对数据的可视化分析,我们了解了各变量之间的关系,并基于这些信息进行了模型构建和优化。最终,我们得到了一个性能较好的预测模型,可以为人们提供睡眠时间的预测参考。
  需要注意的是,本模型的预测结果仅供参考,实际的睡眠时间还受到许多其他因素的影响,如个人体质、环境因素等。此外,模型的性能还有进一步提升的空间,可以通过更多的数据、更复杂的特征工程和更精细的参数调优来实现。


http://www.kler.cn/a/537962.html

相关文章:

  • C++,STL 迭代器简介:概念、分类、操作
  • ASP.NET Core JWT
  • Docker 部署 MinIO | 国内阿里镜像
  • Spring Boot接入Deep Seek的API
  • windows蓝牙驱动开发-蓝牙无线电重置和恢复
  • OpenCV:图像修复
  • Redis深入学习
  • 本地部署deepseek并布置到其他盘
  • LIMO:少即是多的推理
  • AI协助处理-罕见的Oracle内存溢出
  • vivado 7 系列器件时钟
  • Centos Stream 10 根目录下的文件夹结构
  • 网络安全 linux学习计划 linux网络安全精要
  • 查看云机器的一些常用配置
  • WPF点击提交按钮后验证
  • Lua语言的嵌入式系统
  • node.js + html + Sealos容器云 搭建简易多人实时聊天室demo 带源码
  • 知识点(SSTI漏洞/flask框架/tonado框架)
  • WPS如何接入DeepSeek(通过JS宏调用)
  • 在 Navicat 17 中扩展 PostgreSQL 数据类型 | 创建自定义域
  • 二叉树理论基础详解:从零开始理解数据结构的核心
  • react 路由配置:从入门到精通
  • 美的java面试经验
  • docker compose 文件详解
  • 【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现
  • 网络安全治理架构图 网络安全管理架构