【比赛记录】2020国际大数据竞赛:高传染性传染病的传播趋势预测(二)建模和训练

【比赛记录】2020国际大数据竞赛:高传染性传染病的传播趋势预测(二)建模和训练

  • 一、比赛地址:
  • 二、比赛简介:
    • 竞赛背景:
    • 任务描述:
  • 三、数据提取:
  • 四、训练模型:
  • 关注我的公众号:

一、比赛地址:

2020第六届百度&西安交大大数据竞赛暨IKCEST第二届“一带一路”国际大数据竞赛

二、比赛简介:

竞赛背景:

本届大数据竞赛在中国工程院、教育部高等学校大学计算机课程教学指导委员会及丝绸之路大学联盟的指导下,由联合国教科文组织国际工程科技知识中心(IKCEST)、中国工程科技知识中心(CKCEST)、百度公司及西安交通大学共同主办,旨在放眼“一带一路”倡议沿线国家,通过竞赛方式挖掘全球大数据人工智能尖端人才,实现政府—产业—高校合力推动大数据产业研究、应用、发展的目标,进一步夯实赛事的理论基础与实践基础,加快拔尖AI创新人才培养。

传染病(Contagious Diseases)的有效防治是全人类面临的共同挑战,如何通过大数据,特别是数据的时空关联特性,来精准预测传染病的传播趋势和速度,将极大有助于人类社会控制传染病,保障社会公共卫生安全。希望借助此次竞赛,充分发挥全球选手的聪明才智,运用大数据技术助力传染病的传播预测和控制,增强人类社会合作抗风险的意识和能力。

任务描述:

针对赛题所构造的若干虚拟城市,构造传染病群体传播预测模型,根据该地区传染病的历史每日新增感染人数、城市间迁徙指数、网格人流量指数、网格联系强度和天气等数据,预测群体未来一段时间每日新增感染人数。

赛题共涉及11个虚拟城市90天的感染情况,每个城市有若干重点区域。初赛要求针对所提供的5个城市,利用每个城市各区域前45天的样本数据进行训练,预测每个城市各区域后30天每天的新增感染人数。复赛要求针对包含初赛城市在内的11个城市,利用每个城市各区域前60天的样本数据进行训练,预测每个城市各区域后30天每天的新增感染人数。

三、数据提取:

这里暂时先只提取了每个地区每天的新增感染数:
在这里插入图片描述

读取数据:

import pandas as pddata = pd.read_csv('./data.csv', header=0, index_col=0)
headers = list(data.columns.values)city = ['city_id_'+v for v in ['A', 'B', 'C', 'D', 'E']]
print(city)
raw_datas = []drop = ['region_id', 'date']city_region_list = []
for c in city:city_data = data[data[c] == 1]ids = list(city_data['region_id'].values)max_num = max(ids)for i in range(max_num+1):new = city_data[city_data['region_id'] == i]new = new.drop(drop, axis=1)raw_datas.append(new.values)city_region_list.append((c.split('_')[-1], i))train_data = []
train_lbls = []
test_data = []for value in raw_datas:lbls = value[:, 0]x = value[:15]y = lbls[15:45]train_data.append(x)train_lbls.append(y)

四、训练模型:

使用LSTM:

import matplotlib.pyplot as plt
from keras.models import Sequential
from keras import layers
from keras import regularizers
import os
import kerasimport keras.backend as Kimport numpy as npfrom keras.callbacks import LearningRateSchedulerdata = train_data
target = train_lblsprint(len(data), data[0].shape)
print(len(target), target[0].shape)dims = data[0].shape[2]model = Sequential()
model.add(layers.LSTM(64, input_shape=(15, 1))
model.add(layers.Dense(30))
model.summary()save_path = './model.h5'# if os.path.isfile(save_path):
#     model.load_weights(save_path)
#     print('reloaded.')adam = keras.optimizers.adam(0.002)model.compile(optimizer=adam,loss="mean_squared_logarithmic_error")
# 计算学习率def lr_scheduler(epoch):# 每隔100个epoch,学习率减小为原来的0.5if epoch % 100 == 0 and epoch != 0:lr = K.get_value(model.optimizer.lr)K.set_value(model.optimizer.lr, lr * 0.5)print("lr changed to {}".format(lr * 0.5))return K.get_value(model.optimizer.lr)lrate = LearningRateScheduler(lr_scheduler)history = model.fit(np.array(data), np.array(target), epochs=200,batch_size=64, validation_split=0.1,verbose=1, callbacks=[lrate], shuffle=True)

训练结果:
在这里插入图片描述

关注我的公众号:

感兴趣的同学关注我的公众号——可达鸭的深度学习教程:
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部