呼吸机压力预测——方案复现(连载中)

比赛是来自于Google Brain - Ventilator Pressure Prediction

引言

在部分章节中,我可能不会说得很详细,毕竟我的毕业论文还没发表,待发表过后会择期填补完整。

需要注意的是,本人并没有参加这个比赛,而是对这个比赛的某个金牌获胜者的方案进行一次复现。进而应用在本人的毕业设计中去,但请放心本人的毕业论文中已经对该作者进行了引用。

在方案的选择上,首先需要刨除那些数据泄露的方案,这些方案虽然有可取之处但对于实际应用并没有什么意义。其次需要去找那些有提供GitHub网址的方案,毕竟根据思路进行方案的复现略微困难。

最后是对方案进行改进或者是使它更加适用于自己的生产应用。

方案介绍

我所选择的方案是JUN KODA金牌方案PyTorch LSTM with TensorFlow-like initialization。该方案使用的是Pytorch框架和LSTM算法。

数据观察

字段含义备注
id整个文件中的全局唯一时间步长标识符整体数据的计数
breath_id全局唯一的呼吸时间步长周期呼吸的计数
R气道阻力(cmH2O/L/S)指单位压力改变时所引起的肺容积的改变,它代表了胸腔压力改变对肺容积的影响
C肺顺应性(mL/cmH2O)物理上,这是每一次压力变化的体积变化。直觉上,人们可以想象同样的气球例子。我们可以通过改变气球胶乳的厚度来改变C,更高的C有更薄的胶乳,更容易吹
time_step实际的时间戳
u_in吸气电磁阀的控制输入范围从0到100,类似于一个滑动变阻器
u_out探测电磁阀的控制输入0或1,0是吸气,1是呼气
Pressure呼吸回路中测得的气道压力单位为cmH2O

。。。(择期填补)

特征工程

。。。(择期填补)

网络搭建

。。。(择期填补)

损失值定义

。。。(择期填补)

开始训练

。。。(择期填补)

改进

在平常的模型训练上,我们一般都是将数据一次性准备齐全,然后丢到网络中去训练。同理,在数据预测上,我们同样是将数据一次性准备齐全,然后丢到模型中去预测。如以下代码所示:

test = pd.read_csv(di + 'test.csv', nrows=n)
features = create_features(test)
features = rs.transform(features)

X_test = features.reshape(-1, 80, features.shape[-1])
y_test = np.zeros(len(features)).reshape(-1, 80)
w_test = 1 - test.u_out.values.reshape(-1, 80)

dataset_test = Dataset(X_test, y_test, w_test)
loader_test = torch.utils.data.DataLoader(dataset_test, batch_size=batch_size)

y_pred_folds = np.zeros((len(test), 5), dtype=np.float32)
for ifold in range(5):
    model = Model(input_size)
    model.to(device)
    filename = '/kaggle/input/pytorchlstmwithtensorflowlikeinitialization/' \
               'model%d.pth' % ifold
    model.load_state_dict(torch.load(filename, map_location=device))
    model.eval()
    
    y_preds = []
    for x, y, _ in loader_test:
        x = x.to(device)
        with torch.no_grad():
            y_pred = model(x).squeeze()

        y_preds.append(y_pred.cpu().numpy())
    
    y_preds = np.concatenate(y_preds, axis=0)
    y_pred_folds[:, ifold] = y_preds.flatten()

submit.pressure = np.mean(y_pred_folds, axis=1)
submit.to_csv('submission.csv', index=False)
print('submission.csv written')

可以看到,代码将无数周期的呼吸数据丢到了模型中去,这显然不合理,呼吸机的使用场景是实时的。所以我们要将这代码修改一下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
临床预测模型,需要以下步骤: 1. 数据收集和预处理:收集数据集,并对数据进行预处理,包括数据清洗、数据转换和数据缺失值处理。 2. 特征选择:选择与预测目标相关的特征变量,可以使用一些统计和器学习方法进行特征选择。 3. 模型训练:选择合适的器学习算法来训练模型,如逻辑回归、决策树、随森林等。 4. 模型评估:使用交叉验证、ROC曲线等方法来评估模型的性能,选择合适的评估指标。 5. 模型优化:根据模型评估结果,对模型进行优化,如调整模型参数、改变特征选择方法等。 在R语言,可以使用一些开源的器学习库和工具,如caret、MLR、randomForest等,来进行临床预测模型的。以下是一个简单的R语言示例代码: ```R library(caret) library(randomForest) # 读取数据集 data <- read.csv("clinical_data.csv") # 数据预处理 data <- data[complete.cases(data),] # 去除缺失数据 data <- data[,c("age", "sex", "BMI", "smoking", "diabetes", "hypertension", "cholesterol", "outcome")] data$sex <- as.factor(data$sex) data$smoking <- as.factor(data$smoking) data$diabetes <- as.factor(data$diabetes) data$hypertension <- as.factor(data$hypertension) data$outcome <- as.factor(data$outcome) # 特征选择 set.seed(123) ctrl <- trainControl(method = "repeatedcv", repeats = 3, summaryFunction = twoClassSummary, classProbs = TRUE) model <- train(outcome ~ ., data = data, method = "rf", trControl = ctrl, metric = "ROC") varImp(model) # 模型训练和评估 set.seed(123) ctrl <- trainControl(method = "repeatedcv", repeats = 3, summaryFunction = twoClassSummary, classProbs = TRUE) model <- train(outcome ~ ., data = data, method = "rf", trControl = ctrl, metric = "ROC") # 模型预测 test_data <- data.frame(age = 65, sex = "M", BMI = 28, smoking = "N", diabetes = "Y", hypertension = "Y", cholesterol = 200) predict(model, test_data) ``` 需要注意的是,在实践,临床预测模型的可能会遇到各种各样的问题,如数据质量问题、特征选择和模型选择问题等。因此,建议在实践根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值