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

embedded/2025/2/8 10:46:47/

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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算法构建了一个睡眠时间预测模型。通过对数据的可视化分析,我们了解了各变量之间的关系,并基于这些信息进行了模型构建和优化。最终,我们得到了一个性能较好的预测模型,可以为人们提供睡眠时间的预测参考。
  需要注意的是,本模型的预测结果仅供参考,实际的睡眠时间还受到许多其他因素的影响,如个人体质、环境因素等。此外,模型的性能还有进一步提升的空间,可以通过更多的数据、更复杂的特征工程和更精细的参数调优来实现。


http://www.ppmy.cn/embedded/160517.html

相关文章

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

ssh中公钥和私钥怎么生成

ssh-keygen 是一个用于生成 SSH 密钥对的工具,通常用于 SSH(Secure Shell)协议的密钥认证。SSH 密钥对包括一个公钥和一个私钥,用于增强 SSH 登录的安全性,避免使用明文密码登录服务器。以下是关于 ssh-keygen 的详细说…

【Spring Boot实战教程】第一章——多环境配置与第三方技术整合

目录 ? 前言 一、SpringBoot简介 1. 入门案例 1.1 入门案例开发步骤 1.2 基于SpringBoot官网创建项目 1.3 SpringBoot项目快速启动 2. SpringBoot概述 问题导入 2.1 起步依赖 2.2 默认配置 二、基础配置 1. 配置文件格式 问题导入 1.1 修改服务器端口 1.2 自动…

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 复合类型

复合类型 欢迎来到,使用 Navicat Premium 17 在 PostgreSQL 创建自定义数据类型系列的第二部分。 在 第 1 部分 ,我们学习了如何为免费的 DVD Rental database 创建自定义域。域是一个用户定义的包含 NOT NULL 和 CHECK 等约束的数据类型。在今天的博客…

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker,运行lamp 编译安装php的时候发现要按天来算,于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…

Linux中DataX使用第三期

简介 紧接着上期关于DataX源码的初步了解,本期来自己定义一个简单的数据读取和数据写入插件。目的为了方便了解DataX工作的流程。 环境 Windows10 (linux中命令相似,为了方面调试就用windows的)JDK(1.8以上,推荐1.8)Python(2或3都可以)Apach…

UnityShader学习笔记——基础纹理

——内容源自唐老狮的shader课程 目录 1.概述 2.纹理颜色采样 3.纹理结合光照 4.凹凸纹理 4.1.概念 4.2.高度纹理贴图 4.3.法线纹理贴图(一般用这个) 4.3.1.概述 4.3.2.读取分量的规则 4.3.3.法线纹理贴图的两种存储方式 1.基于模型空间的法线纹理 2.基于切线空间的法…

feign Api接口中注解问题:not annotated with HTTP method type (ex. GET, POST)

Bug Description 在调用Feign api时,出现如下异常: java.lang.IllegalStateException: Method PayFeignSentinelApi#getPayByOrderNo(String) not annotated with HTTPReproduciton Steps 1.启动nacos-pay-provider服务,并启动nacos-pay-c…