李宏毅机器学习2022

用神经网络做回归预测新冠病例数
参考链接

# Numerical Operations
import math
import numpy as np# Reading/Writing Data
import pandas as pd
import os
import csv# For Progress Bar
from tqdm import tqdm# Pytorch
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader, random_split# For plotting learning curve
from torch.utils.tensorboard import SummaryWriter
device = "cuda" if torch.cuda.is_available() else "cpu"

数据集

covid.train.csv 没有y
random_split划分训练集和验证集
对标注数据做x,y
convid19dataset(重写DataSet)封装
DataLoader迭代


import pandas as pd
train=pd.read_csv("covid.train.csv").values
train.shape
test_data=pd.read_csv("covid.test.csv").values
test_data.shapedef train_valid_split(data,valid_ratio):valid_len=int(valid_ratio*len(data))print(valid_len)train_len=len(data)-valid_lentrain_data,valid_data= random_split(data,[train_len,valid_len], generator=torch.Generator().manual_seed(0))print((train_data))return np.array(train_data),np.array(valid_data)
def select_feat(train_data,valid_data,test_data,select_all=True):y_train,y_valid = train_data[:,-1],valid_data[:,-1]raw_train_data,raw_valid_data,raw_test_data=train_data[:,:-1],valid_data[:,:-1],test_data[:,:]if select_all==True:fea_idx=list(range(raw_train_data.shape[1]))else:fea_idx=[0,1,2,3,4]return raw_train_data[:,fea_idx],raw_valid_data[:,fea_idx],raw_test_data[:,fea_idx],y_train,y_valid
train_data,valid_data=train_valid_split(train,0.2)
## 最后train_data.shape 没有值是因为传入的dataset 是dataframe --> subset--> narray
raw_train_data,raw_valid_data,raw_test_data,y_train,y_valid=select_feat(train_data,valid_data,test_data)
# class self
class covid19dataset(Dataset):def __init__(self,x,y=None):if y is not None:self.x=torch.FloatTensor(x)self.y=torch.FloatTensor(y)else:self.x=torch.FloatTensor(x)def __getitem__(self,idx):if self.y is not None:return self.x[idx],self.y[idx]else :return self.x[idx]def __len__(self):return len(self.x)
train_data=covid19dataset(raw_train_data,y_train)# train_datar 遍历unpack
valid_data=covid19dataset(raw_valid_data,y_valid)
test_data=covid19dataset(raw_test_data)
train_loader=DataLoader(train_data,batch_size=256,shuffle=True)
valid_loader=DataLoader(valid_data,batch_size=256,shuffle=True)
test_loader=DataLoader(test_data,batch_size=256,shuffle=False)
 ## 定义模型class MyModel(nn.Module):def __init__(self,input_dim):super(MyModel,self).__init__()self.layers=nn.Sequential(nn.Linear(input_dim,16),nn.ReLU(),nn.Linear(16,8),nn.ReLU(),nn.Linear(8,1),nn.ReLU())def forward(self,x):y = self.layers(x)return y.squeeze(1)

训练模型

模型
决策:均方损失函数 dim=1
算法:adam 梯度优化、在valid上做选择

GPU:
model.to(device)
X,Yto(device)

输入到模型的变量:FloatTensor()
与模型相关的变量取值要detach()
取值item()


len(raw_train_data)
raw_train_data.shape[1]
model=MyModel(raw_train_data.shape[1])
model.to(device)
def trainer(train_loader,valid_loader,model,epochs=3000):criteron=torch.nn.MSELoss(reduction='mean')optim=torch.optim.SGD(model.parameters(),lr=1e-5)step=0# 训练过程可视化器writer = SummaryWriter()  # Writer of tensoboard.if os.path.isdir('.\\model'):passelse:os.mkdir(".\\model")for epoch in range(epochs):  model.train()loss_record=[]train_pbar=tqdm(train_loader,position=0)for x,y in train_pbar:x=x.to(device)y=y.to(device)optim.zero_grad()preds=model(x)# y dim = 1loss=criteron(preds,y)loss_record.append(loss.detach().item())loss.backward()optim.step()step+=1train_pbar.set_description(f'Epoch [{epoch+1}/{epochs}]')train_pbar.set_postfix({'loss': loss.detach().item()})mean_train_loss=sum(loss_record)/len(loss_record)writer.add_scalar('losstrain',mean_train_loss,step)model.eval()loss_record=[]for x,y in valid_loader:x=x.to(device)y=y.to(device)with torch.no_grad():preds=model(x)loss=criteron(preds,y)loss_record.append(loss.item())mean_valid_loss=sum(loss_record)/len(loss_record)writer.add_scalar('lossvalid',mean_valid_loss,epoch) print(f'Epoch [{epoch + 1}/{epochs}]: Train loss: {mean_train_loss:.4f}, Valid loss: {mean_valid_loss:.4f}')best_loss = math.infif mean_valid_loss<best_loss:best_loss=mean_valid_losstorch.save(model.state_dict(),'./models/model.ckpt')print(f"new model{best_loss}")early_stop_count = 0else:early_stop_count += 1if early_stop_count >= 20:print('\nModel is not improving, so we halt the training session.')return
trainer(train_loader,valid_loader,model)

可视化

get_ipython().run_line_magic('reload_ext', 'tensorboard')
get_ipython().run_line_magic('tensorboard', '--logdir=./runs/')

预测

def predict(x,model)model.eval()y_record=[]for x in test_loader:x.to(device)with torch.no_grad():y=model(x)y_record.append(y)return y_record=torch.cat(y_record,dim=0)

covid19病例预测相关推荐

  1. 独家 | 可预测COVID-19病例峰值的新算法

    作者:Esther Shein 翻译:王晓颖 校对:吴金笛 本文长度为3900字,建议阅读10分钟 本文介绍了新的COVID-19病例峰值预测算法. 标签:COVID-19 预警系统的模型使用的数据是 ...

  2. 【深度学习】在PyTorch中使用 LSTM 进行新冠病例预测

    时间序列数据,顾名思义是一种随时间变化的数据.例如,24 小时时间段内的温度,一个月内各种产品的价格,特定公司一年内的股票价格.长短期记忆网络(LSTM)等高级深度学习模型能够捕捉时间序列数据中的模式 ...

  3. 肯尼亚第三方支付_肯尼亚的COVID-19病例正在Swift增加,我们不知道为什么。

    肯尼亚第三方支付 COVID-19 cases in Kenya are accelerating rapidly. New cases have increased 300% month-over- ...

  4. 【中国图形图像学报】面向COVID-19疫情预测的图卷积神经网络时空数据学习——CCF B、CSCD

    [中国图形图像学报]面向COVID-19疫情预测的图卷积神经网络时空数据学习 摘 要 当前的疾病传播研究主要集中于时序数据和传染病模型,缺乏运用空间信息提升预测精度的探索和解释.在处理时空数据时需要分 ...

  5. 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...

  6. Covid-19病例监测公用数据集

    原文: Covid-19 Case Surveillance Public Use Dataset Discover Demographic Trends of COVID-19 cases in t ...

  7. 修正 SEIR传染病动力学模型应用于冠状病毒病( COVID-19) 疫情预测和评估

    修正 SEIR传染病动力学模型应用于冠状病毒病( COVID-19) 疫情预测和评估 传统的 SEIR 模型 ​ 在传统的 SEIR 模型中,研究对象被分成 S.E.I.R 等 4 种类型. (1)S ...

  8. 使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性

    作者|THILAKADIBOINA 编译|Flin 来源|analyticsvidhya 介绍 本文介绍了生成性对抗网络(Generative attersarial Networks,GAN)的使用 ...

  9. 基于SEIR模型对美国COVID-19疫情传播的预测和分析

    原文链接:易安的小窝 https://jingblog.tech/2022/09/22/mei-guo-xin-guan-yi-qing-yu-ce/ 1.思路 基于每日发布的COVID-19确诊感染 ...

最新文章

  1. 数据库分表时OR Mapping方法
  2. CSS--使用display:inline-block;存在间隙问题解决
  3. 常熟理工电气院永不言败
  4. HTML 資訊汲取(中篇) - Default namespace 問題
  5. HTML设计显示表格
  6. java算法 第七届 蓝桥杯B组(题+答案) 5.抽签
  7. python 按从小到大的顺序组合成一个字典_将Python字典排列组合成字典列表
  8. 设置ComboBox控件的小箭头颜色.
  9. 机载计算机结构,机载计算机
  10. 模拟——乒乓球(洛谷 P1042)
  11. json解析与序列化
  12. VBA InStr 函数
  13. 专注于开源数据科学软件的非营利基金会—— NumFOCUS 的来龙去脉(下)
  14. IDEA ideaIU点击无反应
  15. 抖音巨量百应怎么发福袋?四川鹰迪
  16. vsphere esxi原生下载方式
  17. 你摸透英语的16种时态了嘛
  18. English-旅游英语及情景对话
  19. 多线程任务超时的处理机制
  20. 【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo

热门文章

  1. 网页设计作业美食订餐网站设计——在线美食订餐网站(30页) HTML+CSS+JavaScript 实现一个静态页面(含源码)
  2. C语言入门系列之6.一维和二维数组
  3. AS3 ---- 万有引力(Gravity in Action)
  4. YQ11-25 作业
  5. 转译器-解释器-编译器
  6. Unexpected lexical declaration in case block.
  7. 微客云原生淘宝客APP小程序系统如何定制
  8. 带团队,强势真是好事么——转载
  9. 疯了!涨到60K*16 薪
  10. 专业名词(ADAS)