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

news/2025/2/8 20:54:45/

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

相关文章

【电脑系统】电脑突然(蓝屏)卡死发出刺耳声音

文章目录 前言问题描述软件解决方案尝试硬件解决方案尝试参考文献 前言 在 更换硬盘 时遇到的问题,有时候只有卡死没有蓝屏 问题描述 更换硬盘后,电脑用一会就卡死,蓝屏,显示蓝屏代码 UNEXPECTED_STORE_EXCEPTION 软件解决方案…

基于 .NET 8.0 gRPC通讯架构设计讲解,客户端+服务端

目录 1.简要说明 2.服务端设计 2.1 服务端创建 2.2 服务端设计 2.3 服务端业务模块 3.客户端设计-控制台 4.客户端设计-Avalonia桌面程序 5.客户端设计-MAUI安卓端程序 1.简要说明 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用…

用Python获取股票数据并实现未来收盘价的预测

获取数据 先用下面这段代码获取上证指数的历史数据,得到的csv文件数据,为后面训练模型用的 import akshare as ak import pandas as pd# 获取上证指数历史数据 df ak.stock_zh_index_daily(symbol"sh000001")# 将数据保存到本地CSV文件 df.…

前端知识自检

CSS lang 伪类 :lang 伪类使你有能力为不同的语言定义特殊的规则 <style> q:lang(no) {quotes: "~" "~"; } </style> </head><body> <p>Some text <q lang"no">A quote in a paragraph</q> Some te…

【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据

一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址&#xff1a; https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动&#xff0c;会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…

5-Scene层级关系

Fiber里有个scene是只读属性&#xff0c;能从fiber中获取它属于哪个场景&#xff0c;scene实体中又声明了fiber&#xff0c;fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中&#xff0c;可以通过entity获取对应的scene root fiber等属性…

IOS开发日志-ios新建项目后-将storyboard去掉,版本调整为IOS13以下

目标IOS版本12&#xff0c;Xcode 16.2&#xff0c;记录ios新建项目后&#xff0c;如何将故事板storyboard和SceneDelegate 文件去掉&#xff0c;调整为代码开发。 创建后的项目中包含SceneDelegate&#xff0c;SceneDelegate 是 iOS 13 引入的类&#xff0c;用于管理应用程序的…

Idea 2024.3 使用CodeGPT插件整合Deepseek

哈喽&#xff0c;大家好&#xff0c;我是浮云&#xff0c;最近国产大模型Deepseek异常火爆&#xff0c;作为程序员我也试着玩了一下&#xff0c;首先作为简单的使用&#xff0c;大家进入官网&#xff0c;点击开始对话即可进行简单的聊天使用&#xff0c;点击获取手机app即可安装…