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

赛题地址: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 plttrain_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]] = ioffset += 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 pltplt.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.01decay_step = 10if epoch % decay_step == 0 and epoch:return lr * decay_ratereturn 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.mzph.cn/bicheng/36822.shtml

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

相关文章

一个多智能体AI搜索工具

brainstorm.cool 是最近刚留意到的一个小工具,因为好奇去体验了一把,简单写一下使用体验。 初体验 界面比较清爽,检索结果包括Status、多Agent回答、Relates和右侧的Sources。从Status可以大致了解检索过程:Web Search - Decisio…

pythons工具——裁剪labelme的json不规则多边形标签保存成矩形图像

原图labelme标注 使用以下程序,裁剪labelme的json不规则多边形标签保存成矩形图像 import os import cv2 import math import json import numpy as np from PIL import Image, ImageDrawdef calculate_bounding_box(points):"""计算多边形的最小外…

二次封装 el-dialog 实现 全屏和最小化 功能

效果 封装后的组件 <template><el-dialog v-model"dialogVisible" :show-close"false" :fullscreen"fullscreen" draggable overflow><template #header"{ close }"><div><span style"font-weight: b…

图像增强及运算篇之图像掩膜直方图和HS直方图

一.图像掩膜直方图 如果要统计图像的某一部分直方图&#xff0c;就需要使用掩码&#xff08;蒙板&#xff09;来进行计算。假设将要统计的部分设置为白色&#xff0c;其余部分设置为黑色&#xff0c;然后使用该掩膜进行直方图绘制&#xff0c;其完整代码如下所示。 # -*- codi…

OurBMC运营委员会2024年上半年度例会顺利召开

6 月 27 日&#xff0c;OurBMC 社区运营委员会 2024 年上半年度例会顺利召开。本次会议采用线上线下结合的方式&#xff0c;各委员在会上听取了 2024 年上半年社区运营委员会的工作总结汇报&#xff0c;并规划了下半年运营重点工作&#xff0c;同时针对社区活动改进、运营规划开…

C语言一些逆置算法

目录 整数逆置 数组逆置 矩阵转置 整数逆置 如7234变为4327 int Reversed(int n){int x,reversed_n0;while(n!0){xn%10; reversed_nreversed_n*10x;nn/10;}return reversed_n; }数组逆置 将数组{1,2,3,4,5,6}逆置为{6,5,4,3,2,1} void Reverse(int a[],int l,int r){w…

【OpenSSH】关于操作系统中的自带的SSH你知道怎么用吗

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、如何开启SSH服务2.1 什么是OpenSSH2.2 对于Windows 10, Windows 11系统2.2.1 如…

车载测试工程师在行业中有哪些挑战需要面对?

车载测试工程师在行业中面临着多方面的挑战&#xff0c;这些挑战涵盖了技术、安全、法规以及市场环境等多个层面。 1. 技术挑战&#xff1a; 复杂性与集成性&#xff1a;现代汽车系统由众多模块和子系统组成&#xff0c;包括发动机控制、安全系统、娱乐系统、导航系统等。这些系…

二、golang基础之常量

文章目录 一、常量&#xff08;一&#xff09;含义&#xff08;二&#xff09;定义&#xff08;1&#xff09;显式类型定义&#xff1a;&#xff08;2&#xff09;显式类型定义&#xff1a;&#xff08;3&#xff09;例子 &#xff08;三&#xff09;内置函数 二、优雅的常量 i…

【已发布】可视化旅游推荐系统的设计与实现+代码

可视化旅游推荐系统的设计与实现 摘要&#xff1a;随着旅游业的蓬勃发展和人们对个性化旅游体验的追求&#xff0c;旅游推荐系统逐渐成为帮助游客规划行程、发现有趣景点的重要工具。本论文旨在设计并实现一个基于可视化技术的旅游推荐系统&#xff0c;通过整合多源数据、运用…

【C++】————类和对象(上)

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月21日 一、类与对象的初步认识 1、类其实就是对对象的抽象&#xff0c;而对象就是对类的具体实例 类不占用内存&#xff0c;而对象占用内存。 2、面向对象与面向过程 C语言是面…

无人机行业市场发展现状及前景

无人机行业市场发展现状及前景分析如下&#xff1a; 一、无人机行业市场发展现状 企业数量与规模&#xff1a; 截至2024年03月&#xff0c;全国无人机相关企业数量达到8628家&#xff0c;显示出无人机行业的蓬勃发展态势。全国实名注册的民用无人机已达104.9万架&#xff0c;…

【03】从0到1构建AI生成思维导图应用 -- Agent 搭建

【03】从0到1构建AI生成思维导图应用 – Agent 搭建 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;https…

Redis--注册中心集群 Cluster 集群-单服务器

与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…

將IP地址改成自動獲取的詳細步驟

IP地址是設備在網路中的唯一標識&#xff0c;就像你家的門牌號一樣。每個連接到互聯網的設備都需要一個IP地址&#xff0c;以便進行數據通信。自動獲取IP地址&#xff0c;通常是指通過DHCP伺服器自動分配IP地址。這樣做的好處是&#xff0c;用戶無需手動配置IP地址&#xff0c;…

备忘录标签怎么弄 备忘录标签设置方法

在繁忙的生活中&#xff0c;我们常常需要记录各种琐事、工作任务和灵感闪现。备忘录成了我们不可或缺的助手&#xff0c;但随着时间的推移&#xff0c;备忘录里的内容越来越多&#xff0c;如何高效地管理和查找这些信息成了一个大问题。这时&#xff0c;备忘录的标签功能就显得…

蜘蛛池规矩采集优化与运用技巧 什么是蜘蛛池/SEO蜘蛛池怎么养?(蜘蛛池新手入门虚良SEO)

作为一名网络内容修改&#xff0c;我常常需求从各种网站上收集文章并转载到咱们的网站上。而在这个过程中&#xff0c;我深深感受到了蜘蛛池对我的帮助。今日&#xff0c;我就来共享一下我对蜘蛛池收集规矩的亲自感受。 归纳 本文将分9个方面具体介绍蜘蛛池收集规矩的长处和运…

vxe-vxeTable使用vxe-colgroup分组合并表头,基础上合并

1.例 vxe-colgroup分组完成&#xff0c;需要实现两个合并合并成一行 基础合并完成 2.实现思路 由于表头字段固定&#xff0c;在进行vxe-colgroup分组合并&#xff0c;实现基础的表头合并&#xff1b;组件库官网对于表头合并并没有方法&#xff1b; 1.官网API知可以给对应的表…

Linux内核 -- ARMv7 与 ARMv8 中的 asmlinkage 作用及使用

ARMv7 与 ARMv8 中的 asmlinkage 作用及使用 asmlinkage 是一个宏&#xff0c;通常在内核代码中使用&#xff0c;用于定义调用约定&#xff0c;特别是指定函数的参数是通过栈传递而不是通过寄存器。它主要用于内核与汇编之间的接口函数&#xff0c;使得参数传递更加一致和明确…

新能源电燃灶:变革与优势

在当今社会&#xff0c;能源问题日益凸显&#xff0c;能源危机成为了全球关注的焦点。而在厨房领域&#xff0c;一种名为新能源电燃灶的产品正逐渐走进人们的视野&#xff0c;以华火电燃灶为例&#xff0c;它展现出了令人瞩目的特点和潜力。 随着传统能源的逐渐枯竭和环境压力的…