行业大数据实验报告 通过聚类算法实现睡眠健康群体的精准智能划分

devtools/2025/3/31 11:57:39/
一、实验目标

本实验旨在通过聚类算法对睡眠健康群体进行多维特征分析,识别不同群体的睡眠模式,并根据群体特点制定个性化的睡眠改善方案。通过使用聚类算法,帮助理解不同群体的睡眠健康状况,为个性化健康管理提供支持。


二、实验环境
  • 编程语言:Python 3.11

  • 开发工具:Jupyter Notebook

  • 使用的库

    • Pandas:用于数据处理和分析

    • Scikit-learn:用于机器学习和聚类分析

    • Matplotlib:用于结果可视化

    • NumPy:用于数学运算和数据处理


三、实验数据

实验数据来自可穿戴设备记录的睡眠健康指标,包含以下特征:

  • Heart_Rate_Variability:心率变异性

  • Body_Temperature:体温

  • Movement_During_Sleep:睡眠时的运动量

  • Sleep_Duration_Hours:睡眠时长

  • Sleep_Quality_Score:睡眠质量评分

  • Caffeine_Intake_mg:咖啡因摄入量

  • Stress_Level:压力水平

  • Bedtime_Consistency:入睡时间一致性

  • Light_Exposure_hours:光照暴露时间

数据已上传并包含多个健康指标,适用于进行聚类分析。


 

四、实验步骤
  1. 数据加载和预处理

    • 加载数据并进行数据检查。

    • 对数据进行标准化处理,使得各特征的量纲一致,避免某些特征的影响过大。

  2. 聚类算法选择

    • 使用K-means聚类算法进行群体划分。

    • 使用肘部法选择最佳的簇数(K)。

  3. 聚类模型训练

    • 对标准化后的数据进行聚类分析,确定群体的划分。

    • 计算聚类的惯性(Inertia)来评估模型。

  4. 分析与结果展示

    • 展示每个簇的中心和每个数据点的分类结果。

    • 基于聚类结果分析每个簇的特点,并制定个性化的睡眠改善方案。

  5. 性能评估

    • 使用聚类的性能指标(如轮廓系数等)对聚类结果进行评估。

肘部法(Elbow Method)是一种常用的确定聚类数(簇数)的启发式方法,尤其是在 K-means 聚类中。它的核心思想是通过观察不同簇数下模型的表现来选择最佳的簇数。


代码展示

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 数据加载
file_path = 'wearable_tech_sleep_quality.csv' #替换为自己的数据
data = pd.read_csv(file_path)# 数据标准化
features = data[['Heart_Rate_Variability', 'Body_Temperature', 'Movement_During_Sleep','Sleep_Duration_Hours', 'Sleep_Quality_Score', 'Caffeine_Intake_mg','Stress_Level', 'Bedtime_Consistency', 'Light_Exposure_hours']]
scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)# 使用肘部法选择最佳簇数
inertia = []
for k in range(1, 11): kmeans = KMeans(n_clusters=k, random_state=42)kmeans.fit(scaled_features)inertia.append(kmeans.inertia_)
#从1到10(即簇数从1到10)训练不同簇数的 K-means 模型,计算每个模型的惯性,并将惯性值保存到 inertia 列表中。
#之后,通过绘制惯性值与簇数之间的关系图,我们可以观察惯性下降的趋势,并选择合适的簇数。# 绘制肘部法图形
#肘部法的核心是找到图形中的拐点。通常情况下,随着簇数的增加,惯性值会逐渐下降,
#但在某个点后,下降的幅度会显著减小,形成类似"肘部"的形状。此处即为最佳 K
plt.plot(range(1, 11), inertia, marker='o')
plt.title('Elbow Method for Optimal K')
plt.xlabel('Number of Clusters (K)')
plt.ylabel('Inertia')
plt.show()# 根据图形选择3个簇进行聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(scaled_features)
data['Cluster'] = clusters# 映射簇编号到对应的睡眠质量群体
cluster_mapping = {0: '低质量睡眠群体', 1: '中等睡眠质量群体', 2: '高质量睡眠群体'}# 将聚类标签替换为对应的群体名称
data['Sleep_Quality_Group'] = data['Cluster'].map(cluster_mapping)# 将结果写入新的 CSV 文件
output_file = 'new_sleep_quality_grouped.csv'
data.to_csv(output_file, index=False)# 输出文件路径,方便用户下载
print(f"更新后的数据已保存为: {output_file}")

kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(scaled_features)    
  的详细解释 

1.kmeans = KMeans(n_clusters=3, random_state=42)

  • KMeansscikit-learn 中用于执行 K-means 聚类算法的类。K-means 是一种无监督学习算法,它通过将数据点分配到 K 个簇中,使每个簇内部的点尽可能相似,而不同簇的点尽可能不同。

    1. n_clusters=3

      • 这个参数指定了要将数据分成几个簇。这里的 3 表示将数据分成 3 个簇。选择簇数(K)通常是通过肘部法(Elbow Method)或其他方法来确定的。

    2. random_state=42

      • random_state 用于设置随机数种子,使得每次运行代码时都能获得相同的结果。K-means 聚类算法在初始化簇中心时是随机的,因此指定 random_state 可以确保结果的可重复性。

      • 42 是任意选择的数值,它确保了代码运行时随机数生成器的初始化是一致的。

2. clusters = kmeans.fit_predict(scaled_features)

  • kmeans.fit_predict(scaled_features)

    • fit:该方法用于训练 K-means 聚类模型,依据输入的特征数据 scaled_features 来执行聚类计算。它通过不断调整簇中心来最小化每个簇内的误差(惯性),直到收敛(即簇中心不再变化或变化极小)。

    • predict:该方法会使用训练好的模型来对每个数据点进行预测,即将每个数据点分配到它最接近的簇中心。

    • fit_predictfitpredict 方法的合并方法,它不仅执行训练过程,而且返回每个数据点的簇标签(即它所属的簇的编号)。

      • 例如,如果你有 1000 个样本,fit_predict 将返回一个长度为 1000 的数组,其中每个元素是样本所属簇的编号(例如 0, 1, 2)。

    • scaled_features 是标准化后的特征数据,包含了每个数据点的多个特征。这是输入到 K-means 模型中的数据,因为标准化后的数据有助于提高聚类算法的效果,避免因为特征的尺度不同而影响聚类结果。

五、实验结果
  1. 聚类训练过程: 通过肘部法,我们发现最适合的簇数为 3。接着使用 K-means 聚类算法进行模型训练,得到以下聚类结果:

    • 簇 0:低质量睡眠群体

    • 簇 1:中等睡眠质量群体

    • 簇 2:高质量睡眠群体

  2. 群体划分与分析聚类后的数据展示了每个群体的特征:

    • 簇 0(低质量睡眠群体):睡眠时长较短,压力水平较高,咖啡因摄入量较多,睡眠质量较低。

    • 簇 1(中等睡眠质量群体):睡眠时长适中,睡眠质量中等,咖啡因摄入量适中,压力水平适中。

    • 簇 2(高质量睡眠群体):睡眠时长较长,压力水平较低,咖啡因摄入量较低,睡眠质量较高。

  3. 个性化睡眠改善方案

    • 簇 0:建议延长睡眠时长,减少咖啡因摄入,减轻压力,增加运动。

    • 簇 1:建议保持规律作息,优化睡眠环境,减少咖啡因摄入,进行适度运动。

    • 簇 2:建议维持现有习惯,继续保持低压力和健康的睡眠环境,增加日间光照暴露。

  4. 聚类性能评估聚类模型的轮廓系数(Silhouette Score)为 0.45,说明聚类效果较好,但仍有提升空间。惯性值也在进一步优化过程中得到改善。

文章来源:https://blog.csdn.net/w156236/article/details/146536309
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/devtools/171839.html

相关文章

华为OD机试2025A卷 - 游戏分组/王者荣耀(Java Python JS C++ C )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 2020年题: 英雄联盟是一款十分火热的对战类游戏。每一场对战有10位玩家参与,分为两组,每组5人。每位玩家都有一个战斗力,代表着这位玩家的厉害程度。为了对战尽可能精彩,我们需要…

黑天鹅事件频发:2025年5种蒙特卡洛模拟工具压力测试

——当不确定性成为常态 2025年,全球经济在供应链动荡、技术迭代加速和气候异常的叠加冲击下,黑天鹅事件从“偶然”演变为“新常态”。企业如何在高风险环境中保持决策韧性?答案藏在蒙特卡洛模拟工具与 PLM(产品生命周期管理&…

【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在现代操作系统中,线程是程序执行流的最小单元。与进程相比,线程更加轻量级,创建和销毁的开销更小&…

体育赛事即时比分 分析页面的开发技术架构与实现细节

本文基于“体育即时比分系统”的实际开发经验总结,仅供技术交流。该系统在实现过程中,主要解决了实时比分更新、赔率数据同步、赛事分析展示等关键问题,并采用了以下技术栈: 后端:PHP(ThinkPHP 框架&#…

【Linux】进程间通信——共享内存

文章目录 共享内存(Shared Memory)什么是共享内存2. 共享内存的特点3.共享内存的主要函数3.1.shmget()3.2.shmat3.3.shmdt3.4.shmctl 共享内存实现进程间通信ShareMemory.hppServer.ccClient.cc 总结 共享内存(Shared Memory) 什…

智能汽车图像及视频处理方案,支持视频实时拍摄特效能力

在智能汽车日新月异的今天,美摄科技作为智能汽车图像及视频处理领域的先行者,凭借其卓越的技术实力和前瞻性的设计理念,为全球智能汽车制造商带来了一场视觉盛宴的革新。美摄科技推出智能汽车图像及视频处理方案,一个集高效性、智…

游戏引擎学习第177天

仓库:https://gitee.com/mrxiao_com/2d_game_4 今日计划 调试代码有时可能会非常困难,尤其是在面对那些难以发现的 bug 时。显然,调试工具是其中一个非常重要的工具,但在游戏开发中,另一个非常常见的工具就是自定义的调试工具&a…

【MySQL | 七、存储引擎是什么?】

存储引擎是什么?作用于哪里? 1. 存储引擎的定义 存储引擎(Storage Engine)是数据库管理系统中负责 数据的存储、检索和管理 的核心组件。它决定了数据如何存储在磁盘上,以及如何从磁盘中读取数据。存储引擎是数据库与…