2024年6月京东睡眠呼吸暂停和低通气事件检测赛题-baseline

news2024/11/24 10:59:16

赛题地址:DC竞赛-大数据竞赛平台 (datacastle.cn)

一、数据集介绍

train_x训练数据集特征描述,其样本分布不均匀,0样本29808,1样本3221,2样本4520,共计37549条样本
第一维度:60 位受试样本数总和
第二维度:(血氧和心率)
第三维度:180 秒时序特征

train_y训练数据标签描述:
标签值:0-无事件,1-呼吸暂停,2-低通气事件

测试数据集描述:
第一维度:20 位受试者的总样本数
第二维度:(血氧和心率)
第三维度:180 秒时序特征

二、数据集样本分布查看

import numpy as np
import matplotlib.pyplot as plt

train_y = np.load('训练集/train_y.npy')

# 计算每个标签的数量
labels, counts = np.unique(train_y, return_counts=True)

# 创建一个颜色列表,为每个标签分配一个不同的颜色
colors = ['red', 'green', 'blue']  

# 创建柱状图
plt.bar(labels, counts, color=colors)

# 在每个柱状图上标注数目
for i, count in enumerate(counts):
    plt.text(labels[i], count + 1, str(count), ha='center', va='bottom')

# 设置图表标题和坐标轴标签
plt.title('标签分布')
plt.xlabel('标签')
plt.ylabel('数量')

# 显示图表
plt.show()

image-20240628124422718

三、样本均衡处理

import numpy as np

# 加载数据集
train_x = np.load('训练集/train_x.npy')
train_y = np.load('训练集/train_y.npy')

# 统计每个类别的样本数量
unique, counts = np.unique(train_y, return_counts=True)
counts_dict = dict(zip(unique, counts))

# 根据要求抽取样本
sample_counts = {0: 3221, 1: 3221, 2: 3221}
new_train_x = np.empty((3*3221, 2, 180))
new_train_y = np.empty(3*3221)

indices = {i: np.where(train_y == i)[0] for i in sample_counts}
new_indices = {i: np.random.choice(indices[i], sample_counts[i], replace=False) for i in sample_counts}

offset = 0
for i in sample_counts:
    new_train_x[offset:offset+sample_counts[i]] = train_x[new_indices[i]]
    new_train_y[offset:offset+sample_counts[i]] = i
    offset += sample_counts[i]

# 检查新数据集的分布
new_unique, new_counts = np.unique(new_train_y, return_counts=True)
new_counts_dict = dict(zip(new_unique, new_counts))

new_counts_dict, counts_dict

image-20240628124457863

四、单个样本查看

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置默认字体
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号

# 加载数据集
train_x = np.load('训练集/train_x.npy')
train_y = np.load('训练集/train_y.npy')

# 选择一个样本进行绘图
sample_index = 0  # 可以选择任意的样本索引
sample = train_x[sample_index]
label = train_y[sample_index]

# 血氧和心率数据
oxygens = sample[0]  # 第一维度是血氧
heartrates = sample[1]  # 第二维度是心率

# 时间轴(对应于第三维度,即180秒)
time = np.arange(0, 180)

# 绘图
plt.figure(figsize=(12, 6))

# 绘制血氧时序图
plt.subplot(2, 1, 1)
plt.plot(time, oxygens, label='血氧')
plt.title(f'样本 {sample_index} 的时序特征 (标签: {label})')
plt.ylabel('血氧饱和度 (%)')
plt.legend()

# 绘制心率时序图
plt.subplot(2, 1, 2)
plt.plot(time, heartrates, label='心率', color='orange')
plt.xlabel('时间 (秒)')
plt.ylabel('心率 (bpm)')
plt.legend()

# 显示图表
plt.tight_layout()
plt.show()

image-20240628124341679

五、模型推理及预测

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Bidirectional, LSTM, Dense, Flatten, TimeDistributed, Dropout
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.callbacks import EarlyStopping, LearningRateScheduler
from tensorflow.keras.regularizers import l1_l2

# 加载数据集
train_x = np.load('训练集/new_train_x.npy')
train_y = np.load('训练集/new_train_y.npy')
test_x_A = np.load('测试集A/test_x_A.npy')

# 检查数据集是否有None值
assert not np.any(np.isnan(train_x))
assert not np.any(np.isnan(test_x_A))

# 预处理 - 标准化特征
mean = np.mean(train_x, axis=(0, 2), keepdims=True)
std = np.std(train_x, axis=(0, 2), keepdims=True)
train_x = (train_x - mean) / std
test_x_A = (test_x_A - mean) / std

# 预处理 - 转换标签为独热编码
train_y = to_categorical(train_y, num_classes=3)

# 定义学习率调度器函数
def lr_time_based_decay(epoch, lr):
    decay_rate = 0.01
    decay_step = 10
    if epoch % decay_step == 0 and epoch:
        return lr * decay_rate
    return lr

# 创建LearningRateScheduler回调实例
lr_scheduler = LearningRateScheduler(lr_time_based_decay)

# 构建模型
model = Sequential()
# 使用Bidirectional层包装LSTM层来创建双向LSTM
model.add(Bidirectional(LSTM(64, return_sequences=True), input_shape=(train_x.shape[1], train_x.shape[2])))
model.add(Bidirectional(LSTM(64, return_sequences=False)))
model.add(Dropout(0.5))  # 添加dropout层
model.add(Dense(32, activation='relu', kernel_regularizer=l1_l2(l1=0.001, l2=0.001)))
model.add(Flatten())
model.add(Dense(3, activation='softmax'))

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 设置早停法
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)

# 训练模型时使用callbacks
model.fit(train_x, train_y, epochs=100, batch_size=32, validation_split=0.1, callbacks=[early_stopping, lr_scheduler])

# 进行预测
predictions = model.predict(test_x_A)
predicted_labels = np.argmax(predictions, axis=1)
# 创建一个包含预测结果的 DataFrame
df_submit = pd.DataFrame({'id': np.arange(len(test_x_A)), 'label': predicted_labels})
# 保存 DataFrame 到 CSV 文件
df_submit.to_csv(f'submit.csv', index=False)

六、讨论区

不定期收录评论区好的想法或思路

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSL证书在网站访问中的核心作用及快速申请指南

在当今的互联网时代,数据安全与用户隐私保护成为了网站运营不可或缺的一部分。SSL证书作为一种重要的网络安全协议,它在网站访问中扮演着至关重要的角色,主要体现在以下几个方面: 一、加密通信内容:SSL证书通过建立安…

2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年G1工业锅炉司炉考试为正在备考G1工业锅炉司炉操作证的学员准备的理论考试专题,每个月更新的G1工业锅炉司炉考试题库祝您顺利通过G1工业锅炉司炉考试。 1、【多选题】TSGG0001-2012《锅炉安全技术监察…

MySQL实训

项目名称与项目简介 股票交易系统是一个综合性的金融服务平台,它提供了股票买卖、交易查询、用户管理、股票信息管理以及资金账户管理等功能。系统旨在为用户提供一个安全、高效、便捷的股票交易环境,让用户能够实时掌握市场动态,做出合理的…

golang项目基于gorm框架从postgre数据库迁移到达梦数据库的实践

一、安装达梦数据库 1、登录达梦数据库官网,下载对应系统版本的安装包。 2、下载地址为:https://www.dameng.com/list_103.html 3、达梦数据库对大小写敏感,在安装初始化数据库实例时建议忽略大小写;具体安装教程可参考以下博客: …

知不知行不行?

老树新芽, 结合最近几个观点,再拓展: Prompt & “Prompt—生成—选择” 事前提要求,事后决定满意不满意,中间尽量少干涉——老板对员工不也是这样吗?甲方对乙方不也是这样吗?都是后者在生…

VMware虚拟机移植保姆级教程

文章目录 前言:一、打包与备份二、VMware移植1. 文件介绍2. 移植过程总结:前言: 前几日对电脑做了一个大的更新升级,不仅将硬件进行了升级,还对电脑的软件进行了升级也就是我从Win10今家庭版升级到Win11专业版啦,之前没有升级是因为数据量很多,怕升级后找不到自己需要的…

vue-cli搭建过程

1.vue-cli 概述 vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板,预先定义好的目录结构及基础代码 举个例子吧! 比如之前学过的Maven,在创建 Maven 项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架&#x…

goLang小案例-打印99乘法表

goLang小案例-打印99乘法表 1. 打印99乘法表 func Print99multiplication1() {//横向9排for i : 1; i < 9; i {//竖向9列//第一批第一个 和第一列比较 如果大于排就结束//假设第三排i3 最走有三列 1*3 2*3 3*3//j3打印完 j 当j4就要结束 以此类推for j : 1; j < i; j …

东兴市金顺心贸易有限公司联合越南名厨研发的阿吉贡河粉灵魂汤底料

东兴市金顺心贸易有限公司联合越南名厨研发的阿吉贡河粉灵魂汤底料&#xff0c;一包汤底料竟然就能撑起一家店的灵魂&#xff01;&#x1f372; 简单的食材&#xff0c;却散发出不平凡的美味&#xff0c;仿佛带我穿越千里之外。每一口都是满满的幸福与满足&#xff0c;真心推荐…

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)​编辑转到底部 In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterprise Edition Oracle Database Cloud Schema Service - Version N/A and lat…

Stateflow快速入门系列(五): 通过广播事件同步并行状态

局部事件允许一个状态触发同一个 Stateflow图中另一个状态的转移或动作&#xff0c;从而使您能够协调并行状态。要将事件从一个状态广播到另一个状态&#xff0c;请使用 send 运算符以及事件的名称和激活状态的名称&#xff1a; send(eventName,stateName) 当您广播事件时&am…

2024年【建筑电工(建筑特殊工种)】模拟试题及建筑电工(建筑特殊工种)作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年建筑电工(建筑特殊工种)模拟试题为正在备考建筑电工(建筑特殊工种)操作证的学员准备的理论考试专题&#xff0c;每个月更新的建筑电工(建筑特殊工种)作业考试题库祝您顺利通过建筑电工(建筑特殊工种)考试。 1、…

FastGPT 手动部署错误:MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo

在运行 FastGPT 时&#xff0c;mongodb 报如下错误&#xff1a; MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo 这是因为 mongo 没有解析出来&#xff0c;在 hosts 文件中添加如下信息&#xff1a; 127.0.0.1 mongo 重新运行 FastGPT 即可。 参考链接&#xff…

庆祝东兴市金顺心贸易有限公司代理越南三原竹系列产品五周年

&#x1f389;庆祝金顺心贸易代理越南三原竹系列产品五周年&#xff01;这五年&#xff0c;我们共同成长&#xff0c;每一份产品都承载着越南的美味与匠心。感恩有你们&#xff0c;未来的路&#xff0c;我们继续携手前行&#xff0c;品味更多美好&#xff01;&#x1f962;&…

“骑友应小心“杀猪盘”,骑行圈也是小社会”

在数字时代&#xff0c;自媒体平台上的信息传播迅速而广泛&#xff0c;人们的社交活动也愈加多元化。骑行圈&#xff0c;作为一个集体育、休闲与社交于一体的圈子&#xff0c;其独特的魅力吸引着无数热爱生活、享受自然的人们。然而&#xff0c;在享受共同的爱好与乐趣之时&…

Dom4j的基本使用 , XML解析方式和解析器 ,Dom4J结合XPath解析XML

第二章 Dom4j 1 XML解析 1.1 解析概述 ​ 当将数据存储在XML后&#xff0c;我们就希望通过程序获取XML的内容。我们使用Java基础所学的IO知识是可以完成的&#xff0c;不过需要非常繁琐的操作才可以完成&#xff0c;且开发中会遇到不同问题&#xff08;只读、读写&#xff0…

社交App广告优化新篇章:Xinstall引领用户体验升级,助力买量效果提升

随着移动互联网的快速发展&#xff0c;社交App已经成为人们生活中不可或缺的一部分。然而&#xff0c;在竞争激烈的市场环境下&#xff0c;如何有效地进行广告投放&#xff0c;吸引并留住用户&#xff0c;成为了每个社交App运营者面临的重大挑战。今天&#xff0c;我们就来谈谈…

乐观锁和悲观锁(MySQL和Java)

乐观锁和悲观锁(MySQL和Java) 在并发编程中&#xff0c;为了确保数据的一致性和完整性&#xff0c;我们通常需要使用锁机制来控制对共享资源的访问。锁主要分为两种&#xff1a;乐观锁和悲观锁。本文将详细介绍这两种锁的概念、工作原理以及它们的优缺点。 悲观锁 悲观锁(Pe…

字节码编程ASM之插桩方法执行耗时

写在前面 源码 。 本文看下如何对已有类进行插装。以最经典的方法执行耗时作为例子。 1&#xff1a;编码 假定有如下的代码&#xff1a; public class MyMethod {public String queryUserInfo(String uid) {System.out.println("xxxx");System.out.println("…

visual studio2022配置和使用protobuf

上图证明&#xff0c;我真的测了好多遍&#xff0c;测了好多版本的protobuf&#xff0c;花了很多时间。不过好在最后在vs2022上测通了。 下载protobuf 这里是protobuf下载的地址。 Releases protocolbuffers/protobuf GitHub 个人使用的3.21.9这个版本才跑通的。 1、首先…