构建预测睡眠质量模型_相关性分析,多变量分析和聚类分析

news/2024/9/25 8:09:35/

数据入口:睡眠质量记录数据集 - Heywhale.com

本数据集目的是探究不同因素是如何影响睡眠质量和整体健康的。

数据说明

字段说明
Heart Rate Variability心率变异性:心跳时间间隔的模拟变化
Body Temperature体温:以摄氏度为单位的人工生成体温
Movement During Sleep睡眠期间活动:睡眠时活动量的合成数据
Sleep Duration Hours睡眠时长:模拟生成的总睡眠小时数
Sleep Quality Score睡眠质量评分:代表睡眠质量的合成评分
Caffeine Intake (mg)咖啡因摄入量(毫克):以毫克为单位的模拟咖啡因摄入量
Stress Level压力水平:压力水平的模拟指数
Bedtime Consistency睡眠规律性:睡眠时间一致性的模拟值;范围 0-1,数值越低表示规律性越差
Light Exposure Hours日间光照时长:白天接触到光照的时长

一:相关性分析

首先进行相关性分析,以探索这些变量之间的关联,特别是与睡眠质量评分(Sleep_Quality_Score)的关系。

python">import pandas as pdfile_path = 'wearable_tech_sleep_quality.csv'
data = pd.read_csv(file_path)correlation_matrix = data.corr()correlation_matrix

相关性分析结果:

  • 睡眠质量评分(Sleep_Quality_Score)与其他变量的相关性普遍较弱。其中,与咖啡因摄入量(Caffeine_Intake_mg)的相关性最强,为-0.722,表明咖啡因摄入量与睡眠质量评分呈负相关。
  • 其他变量之间的相关性也普遍不强,但有一些值得注意的关联,例如心率变异性(Heart_Rate_Variability)与就寝时间一致性(Bedtime_Consistency)之间的相关性为0.048,以及睡眠期间的运动(Movement_During_Sleep)与就寝时间一致性(Bedtime_Consistency)之间的相关性为-0.039。

下一步,我将进行多变量分析,使用多元线性回归来探究多个变量如何共同影响睡眠质量评分。

二:多变量分析

python">from sklearn.linear_model import LinearRegression
import numpy as npX = data.drop('Sleep_Quality_Score', axis=1)
y = data['Sleep_Quality_Score'] model = LinearRegression()model.fit(X, y)coefficients = model.coef_coefficients_df = pd.DataFrame(coefficients, X.columns, columns=['Coefficient'])
coefficients_df

多变量分析结果(多元线性回归):

多元线性回归模型的系数如下:

  • 心率变异性(Heart_Rate_Variability):0.0036
  • 体温(Body_Temperature):-0.0107
  • 睡眠期间的运动(Movement_During_Sleep):-0.2030
  • 睡眠时长(Sleep_Duration_Hours):0.1324
  • 咖啡因摄入量(Caffeine_Intake_mg):-0.0229
  • 压力水平(Stress_Level):-0.0418
  • 就寝时间一致性(Bedtime_Consistency):-0.5801
  • 光照暴露时间(Light_Exposure_hours):0.0033

这些系数表明,每个变量对睡眠质量评分的相对影响。例如,就寝时间一致性(Bedtime_Consistency)的系数为-0.5801,这意味着就寝时间一致性每增加一个单位,睡眠质量评分预计会减少0.5801个单位。

下面将进行聚类分析,以识别数据中的自然分组,这有助于我们理解不同人群的睡眠和健康模式。

三:聚类分析

python">from sklearn.cluster import KMeans
import matplotlib.pyplot as pltwcss = []for i in range(1, 11):kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42)kmeans.fit(X)wcss.append(kmeans.inertia_)plt.figure(figsize=(10, 5))
plt.plot(range(1, 11), wcss, marker='o', linestyle='--')
plt.title('Elbow Method to Find Optimal Number of Clusters')
plt.xlabel('Number of Clusters')
plt.ylabel('Within-Cluster Sum of Squares (WCSS)')
plt.grid(True)
plt.show()

使用肘部法则(Elbow Method)来确定最佳的聚类数。从图中可以看出,随着聚类数量的增加,组内平方和(WCSS)逐渐减小。理想的聚类数通常是在WCSS下降速度开始减缓的点。根据这个图表,我们可以选择2或3个聚类作为最佳数量。

现在,我将使用KMeans算法进行聚类分析,选择3个聚类作为例子,并展示每个聚类中心的特点。

python">kmeans = KMeans(n_clusters=3, init='k-means++', random_state=42)
clusters = kmeans.fit_predict(X)cluster_centers = kmeans.cluster_centers_
cluster_centers_df = pd.DataFrame(cluster_centers, columns=X.columns)
cluster_centers_df['Cluster'] = ['Cluster 1', 'Cluster 2', 'Cluster 3']
cluster_centers_df = cluster_centers_df.set_index('Cluster')
cluster_centers_df.T  

聚类分析结果(KMeans,3个聚类):

每个聚类中心的特点如下:

  • Cluster 1

    • 心率变异性(Heart_Rate_Variability):70.395
    • 体温(Body_Temperature):36.520
    • 睡眠期间的运动(Movement_During_Sleep):1.973
    • 睡眠时长(Sleep_Duration_Hours):7.494
    • 咖啡因摄入量(Caffeine_Intake_mg):46.825
    • 压力水平(Stress_Level):4.903
    • 就寝时间一致性(Bedtime_Consistency):0.493
    • 光照暴露时间(Light_Exposure_hours):8.006
  • Cluster 2

    • 心率变异性(Heart_Rate_Variability):70.387
    • 体温(Body_Temperature):36.563
    • 睡眠期间的运动(Movement_During_Sleep):2.033
    • 睡眠时长(Sleep_Duration_Hours):7.582
    • 咖啡因摄入量(Caffeine_Intake_mg):277.643
    • 压力水平(Stress_Level):5.007
    • 就寝时间一致性(Bedtime_Consistency):0.508
    • 光照暴露时间(Light_Exposure_hours):8.146
  • Cluster 3

    • 心率变异性(Heart_Rate_Variability):70.380
    • 体温(Body_Temperature):36.532
    • 睡眠期间的运动(Movement_During_Sleep):2.017
    • 睡眠时长(Sleep_Duration_Hours):7.396
    • 咖啡因摄入量(Caffeine_Intake_mg):157.392
    • 压力水平(Stress_Level):4.935
    • 就寝时间一致性(Bedtime_Consistency):0.511
    • 光照暴露时间(Light_Exposure_hours):8.001

这些聚类展示了数据中的自然分组,每个聚类都有其独特的特征。例如,Cluster 2的咖啡因摄入量显著高于其他两个聚类,这可能表明这个聚类中的个体可能有更高的咖啡因依赖性,这可能会影响他们的睡眠质量。

四:构建预测睡眠质量线性回归模型

首先,我将进行数据预处理,包括处理缺失值、异常值,以及特征选择。然后,我将选择适当的模型来构建预测睡眠质量的模型。考虑到数据的性质,我会选择线性回归模型,因为它简单且易于解释。接着,我将使用训练数据集来训练模型。最后,我将使用测试数据集来评估模型的性能。

python">from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScalerX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)imputer = SimpleImputer(strategy='mean')
X_train_imputed = imputer.fit_transform(X_train)
X_test_imputed = imputer.transform(X_test)scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_imputed)
X_test_scaled = scaler.transform(X_test_imputed)

上述代码使用均值填充策略填充了训练集和测试集中的缺失值,并使用标准缩放方法对数据进行了标准化处理。下一步,我将选择线性回归模型来构建预测睡眠质量的模型,并使用训练数据集进行训练。

python">from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errormodel = LinearRegression()model.fit(X_train_scaled, y_train)y_pred = model.predict(X_test_scaled)mse = mean_squared_error(y_test, y_pred)mse

模型训练与评估结果:

已经使用线性回归模型训练了模型,并且模型已经拟合了训练数据。使用测试数据集评估模型的性能,得到的均方误差(MSE)为3.93。MSE是一个衡量模型预测准确性的指标,值越小表示模型预测越准确。总结来说,这个线性回归模型能够较好地预测睡眠质量。

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。


http://www.ppmy.cn/news/1530198.html

相关文章

选择租用徐州服务器机柜的作用有哪些?

企业为了线上网络业务,通常都会选择租用服务器来确保网络的稳定性,企业选择服务器租用和托管业务后,同时也需要租用服务器机柜来进行放置所使用的服务器,对于机柜企业可以选择租用徐州机柜,下面就来聊一下选择租用徐州…

linux atomic 原子变量操作

原子操作是指指令以原子的方式操作,执行过程不会被打断。linux内核提供了atomic_t类型的原子变量,它的实现依赖于不同的体系结构。 include/linux/types.h typedef struct { int counter; } atomic_t; #ifdef CONFIG_64BIT typedef struct { long counter; } atomic64_…

fastadmin本地安装插件提示”请从官网渠道下载插件压缩包(code:2)(code:1)“

这个问题主要是在fastadmin中为了保证安全性,不让你进行本地的一个安装(离线安装) 解决办法就是去把相应的代码注释掉,把相应的权限开启。 具体步骤 1.在后台的application\config.php文件下; 将这个unknownsources的…

uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用

首先自定义一个加载中组件 ccloading.vue <template><view class"request-loading-view" v-if"loadingShow"><view class"loading-view"><image class"loading-img" :src"loading" mode"aspectF…

自然语言处理实战项目:从理论到实现

一、引言 自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能和语言学交叉的领域&#xff0c;旨在让计算机能够理解、处理和生成人类语言。随着互联网的飞速发展&#xff0c;大量的文本数据被产生&#xff0c;这为自然语言处理技术的发展提供了丰富的素材&#xf…

node js版本低导致冲突WARN EBADENGINE package: required: { node: ‘>=18‘ }

重新安装依赖包 1、删除旧的 node_modules 目录和 package-lock.json 文件&#xff1a; rm -rf node_modules rm package-lock.json2、升级node版本 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bashexport NVM_DIR"$([ -z "${…

关于 Goroutines 和并发控制的 Golang 难题

下面是一道关于 Goroutines 和并发控制的 Golang 难题&#xff0c;它涉及到 Go 的并发编程模型、Goroutines、通道&#xff08;Channels&#xff09;以及 sync.WaitGroup 的使用&#xff1a; 问题描述&#xff1a; 你有一个需要并发执行的任务&#xff0c;其中有 100 个 URL …

【赵渝强老师】K8s中的Deployment控制器

K8s的Deployment将Pod部署成无状态的应用程序&#xff0c;它只关心Pod的数量、Pod更新方式、使用的镜像和资源限制等。由于是无状态的管理方式&#xff0c;因此Deployment中没有角色和顺序的概念&#xff0c;换句话说&#xff1a;Deployment中没有状态。   通过使用Deploymen…