人工智能学习

AI预测:冠状病毒什么时候可以得到抑制(我们可以从非典SARS学到什么??)

本文主要是介绍AI预测:冠状病毒什么时候可以得到抑制(我们可以从非典SARS学到什么??),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近冠状病毒肆虐,国家调动一切资源抑制疫情。突然想建立一个模型,对确诊人数进行预测。

试想,如果你能够提前预判患者增速什么时候下降,是不是可以帮助自己做一些决策?什么时候返回工作岗位、是否适合进行金融投资增加仓位或减仓降低风险?😀

So~~ let’s start!

​实现预测,首先要思考,应该建立一个怎么样的模型?人数预测,属于回归问题,我们可以考虑线性回归、多项式回归、逻辑回归、mlp等等。

There is a big problem~~历史数据很少》》很难确定合适的模型结构

针对训练数据少的情况,一个有效的解决办法就是,建立迁移模型!透过历史数据建立一个合适的模型,然后针对新数据进行二次训练。我首先想到了2003年的SARS。

1、寻找SARS数据:baidu、google、历史文献等等。

找到了这张图:图片描述
接着上wiki确认一下(https://en.wikipedia.org/wiki/Severe_acute_respiratory_syndrome)eventual 8,098 cases。再对比其他数据源,发现这个图的数据是比较靠谱的(可能会有一些出入,但不会太大)。

需要把图片中的患者数量提取出来,how???
给大家推荐一款软件:getdata graph digitizer,加载图片并提取数据后是这样的:
图片描述
数据提取到本地保存为csv
day 2 3 5 7 8 10 12 13 14 17 20 22 24 27 30 33 35 36 39
num 149 209 299 390 509 629 927 1315 1554 1853 2241 2510 2720 2900 3139 3378 3617 3826 4155
day 40 42 43 44 46 47 48 51 53 55 57 59 62 64 66 71 72 75 78
num 4364 4722 4991 5349 5707 5976 6274 6454 6812 7051 7260 7470 7709 7888 7979 8249 8368 8399 8460
day 81 83 87 89 91 93 96
num 8490 8491 8492 8493 8494 8554 8525

观察数据,发现人数趋势与sigmoid函数趋势比较接近,考虑建立mlp模型,采用relu+sigmoid+linear的层级结构。结构代码:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(units=50, input_dim = 1, activation=‘relu’))
model.add(Dense(units=50,activation=‘relu’))
model.add(Dense(units=1, activation = ‘sigmoid’))
model.add(Dense(units=1, activation = ‘linear’))
model.compile(optimizer=‘adam’,loss=‘mean_squared_error’)
model.summary()

图片描述

keep in mind: 没有最好的结构,核心在于数据、思路、尝试!

考虑到目前2月6号为止,冠状病毒患者数量接近30000,远高于SARS患者数量,而sigmoid函数有极大值,如果对sars数据直接归一化处理,最终预测结果最大值<9000,无法实现对冠状病毒患者数据的准确预测,计划把所有数据除以100000,加快模型迭代收敛。
y_sars_norm = y_sars/100000

model.fit(X_sars,y_sars_norm,epochs=1000)
y_sars_predict = model.predict(X_sars)
y_sars_predict = y_sars_predict*100000
fig1 = plt.figure(figsize=(7,5))
plt.scatter(X_sars,y_sars,label=‘实际人数’)
plt.plot(X_sars,y_sars_predict,label=‘预测结果’)
plt.title(‘SARS患者数量 VS 天数’)
plt.xlabel(‘第几天’)
plt.ylabel(‘确诊患者总数’)
plt.legend()
plt.show()
图片描述
看书去拟合效果还不错~勉强满意

加载冠状病毒患者数据,对模型二次训练(记得进行数据预处理)
model.fit(X_new,y_new_norm,epochs=1000)
图片描述

预测1-100日的患者数量,生成一个1-100的list,输入给模型,结果如下:
图片描述

图片描述

What we can learn from the result??

  1. 新增人数增加峰值预测在2月2日出现,当日新增人数4200人。实际:2月4日,当日新增人数3886人(截至2月7日);
  2. 最终患者数量预计在41200,达到总数的95%的日期在2月15日

建议:

出行时间安排在2月中旬以后,如果疫情确实得到控制,那出行更为安全;
如果2月2日之前金融市场过于恐慌导致大量资产抛售,或许是加仓的机会

风险:

春运是一个很大的意外因素,春节后的返工期,人流巨大,如果控制不好,可能导致疫情的第二波爆发,因此要重点关注返工期后的一周的人数变化
模型预测数据仅供参考,欢迎有兴趣的小伙伴共同探讨。

finally:flare老师的实战课程“零基础入门人工智能:系统学习+实战”课程已经上线,欢迎小伙伴们订阅,和flare老师一起学习AI,掌握AI工具,解决实际问题。

点击查看更多内容
这篇关于AI预测:冠状病毒什么时候可以得到抑制(我们可以从非典SARS学到什么??)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!