日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【机器学习实战】意大利Covid-19病毒感染数学模型及预测

發(fā)布時(shí)間:2025/3/8 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习实战】意大利Covid-19病毒感染数学模型及预测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:Gianluca Malato? ? ? ? ?deephub翻譯組:劉欣然

當(dāng)今世界正在與一個(gè)新的敵人作斗爭(zhēng),那就是Covid-19病毒。

該病毒自首次在中國(guó)出現(xiàn)以來(lái),在世界范圍內(nèi)迅速傳播。不幸的是,意大利的Covid-19感染人數(shù)是歐洲最高的,為19人。我們是西方世界第一個(gè)面對(duì)這個(gè)新敵人的國(guó)家,我們每天都在與這種病毒帶來(lái)的經(jīng)濟(jì)和社會(huì)影響作斗爭(zhēng)。

在本文中,我將用Python向您展示感染增長(zhǎng)的簡(jiǎn)單數(shù)學(xué)分析和兩個(gè)模型,以更好地理解感染的演變。

數(shù)據(jù)收集(Data collection)

意大利民防部門每天都會(huì)更新感染者的累積數(shù)據(jù)。這些數(shù)據(jù)在GitHub上作為開放數(shù)據(jù)公開在Github這里:

https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv
我的目標(biāo)是創(chuàng)建迄今為止受感染人數(shù)(即實(shí)際感染人數(shù)加上已感染人數(shù))的時(shí)間序列模型。這些模型具有參數(shù),這些參數(shù)將通過(guò)曲線擬合進(jìn)行估算。

我們用Python來(lái)做。

首先,讓我們導(dǎo)入一些庫(kù)。

import pandas as pd import numpy as np from datetime import datetime,timedelta from sklearn.metrics import mean_squared_error from scipy.optimize import curve_fit from scipy.optimize import fsolve import matplotlib.pyplot as plt %matplotlib inline

現(xiàn)在,讓我們看一下原始數(shù)據(jù)。

url = https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv df =pd.read_csv(url)

我們需要的列是' totale_casi ',它包含到目前為止的累計(jì)感染人數(shù)。

這是原始數(shù)據(jù)。現(xiàn)在,讓我們?yōu)榉治鲎鰷?zhǔn)備。

數(shù)據(jù)準(zhǔn)備(Data preparation)

首先,我們需要將日期改為數(shù)字。我們將從一月一日起開始算。

df =df.loc[:,['data','totale_casi']] FMT ='%Y-%m-%d %H:%M:%S' date =df['data'] df['data']= date.map(lambda x : (datetime.strptime(x, FMT) -datetime.strptime("2020-01-01 00:00:00", FMT)).days )

現(xiàn)在,我們可以分析要參加測(cè)試的兩個(gè)模型,分別是邏輯函數(shù)(logistic function)和指數(shù)函數(shù)(exponential function)。

每個(gè)模型都有三個(gè)參數(shù),這些參數(shù)將通過(guò)對(duì)歷史數(shù)據(jù)進(jìn)行曲線擬合計(jì)算來(lái)估計(jì)。

logistic模型(The logistic model)

logistic模型被廣泛用于描述人口的增長(zhǎng)。感染可以被描述為病原體數(shù)量的增長(zhǎng),因此使用logistic模型似乎是合理的。

這個(gè)公式在數(shù)據(jù)科學(xué)家中非常有名,因?yàn)樗挥糜谶壿嫽貧w分類器,并且是神經(jīng)網(wǎng)絡(luò)的一個(gè)激活函數(shù)。

logistic函數(shù)最一般的表達(dá)式為:

在這個(gè)公式中,我們有變量x(它是時(shí)間)和三個(gè)參數(shù):a,b,c。

?a為感染速度
?b為感染發(fā)生最多的一天
?c是在感染結(jié)束時(shí)記錄的感染者總數(shù)

在高時(shí)間值時(shí),被感染的人數(shù)越來(lái)越接近c(diǎn)值,也就是我們說(shuō)感染已經(jīng)結(jié)束的時(shí)間點(diǎn)。這個(gè)函數(shù)在b點(diǎn)也有一個(gè)拐點(diǎn),也就是一階導(dǎo)數(shù)開始下降的點(diǎn)(即感染開始減弱并下降的峰值)。

讓我們?cè)赑ython中定義模型:

def logistic_model(x,a,b,c):return c/(1+np.exp(-(x-b)/a))

我們可以使用scipy庫(kù)中的curve_fit函數(shù)從原始數(shù)據(jù)開始估計(jì)參數(shù)值和錯(cuò)誤。

x =list(df.iloc[:,0]) y =list(df.iloc[:,1]) fit = curve_fit(logistic_model,x,y,p0=[2,100,20000])

這里是一些值:

a= 3.54 b= 68.00 c= 15968.38

該函數(shù)也返回協(xié)方差矩陣,其對(duì)角值是參數(shù)的方差。取它們的平方根,我們就能計(jì)算出標(biāo)準(zhǔn)誤差。

errors= [np.sqrt(fit[1][i][i]) for i in [0,1,2]]· a的標(biāo)準(zhǔn)誤差:0.24 · b的標(biāo)準(zhǔn)誤差:1.53 · c的標(biāo)準(zhǔn)誤差:4174.69

這些數(shù)字給了我們?cè)S多有用的見解。

預(yù)計(jì)感染人數(shù)在感染結(jié)束時(shí)為15968+/-4174。

感染高峰預(yù)計(jì)在2020年3月9日左右。

預(yù)期的感染結(jié)束日期可以計(jì)算為受感染者累計(jì)計(jì)數(shù)四舍五入約等于到最接近整數(shù)的c參數(shù)的那一天。

我們可以使用scipy的fsolve函數(shù)來(lái)計(jì)算出定義感染結(jié)束日的方程的根。

sol =int(fsolve(lambda x : logistic_model(x,a,b,c) - int(c),b))

求解出來(lái)時(shí)間是2020年4月15日。

指數(shù)模型(Exponential model)

logistic模型描述了未來(lái)將會(huì)停止的感染增長(zhǎng),而指數(shù)模型描述了不可阻擋的感染增長(zhǎng)。例如,如果一個(gè)病人每天感染2個(gè)病人,1天后我們會(huì)有2個(gè)感染,2天后4個(gè),3天后8個(gè),等等。

最通用的指數(shù)函數(shù)是:

變量x是時(shí)間,我們?nèi)匀挥袇?shù)a, b, c,但是它的意義不同于logistic函數(shù)參數(shù)。

讓我們?cè)赑ython中定義這個(gè)函數(shù),并執(zhí)行與logistic增長(zhǎng)相同的曲線擬合過(guò)程。

def exponential_model(x,a,b,c):return a*np.exp(b*(x-c)) exp_fit =curve_fit(exponential_model,x,y,p0=[1,1,1])

參數(shù)及其標(biāo)準(zhǔn)差為:

· a: 0.0019 +/- 64.6796 · b: 0.2278 +/- 0.0073 · c: 0.50 +/- 144254.77

畫圖

我們現(xiàn)在有了所有必要的數(shù)據(jù)來(lái)可視化我們的結(jié)果。

pred_x= list(range(max(x),sol)) plt.rcParams['figure.figsize']= [7, 7] plt.rc('font',size=14)## Realdata plt.scatter(x,y,label="Real data",color="red") #Predicted logistic curve plt.plot(x+pred_x,[logistic_model(i,fit[0][0],fit[0][1],fit[0][2]) for i in x+pred_x], label="Logistic model" ) #Predicted exponential curve plt.plot(x+pred_x,[exponential_model(i,exp_fit[0][0],exp_fit[0][1],exp_fit[0][2])for i in x+pred_x], label="Exponential model" ) plt.legend() plt.xlabel("Days since 1 January 2020") plt.ylabel("Total number of infected people") plt.ylim((min(y)*0.9,c*1.1)) plt.show()

這兩條理論曲線似乎都很接近實(shí)驗(yàn)趨勢(shì)。哪一個(gè)更好?讓我們看一下殘差(residuals.)。

殘差分析

殘差是指各實(shí)驗(yàn)點(diǎn)與相應(yīng)理論點(diǎn)的差值。我們可以通過(guò)分析兩種模型的殘差來(lái)驗(yàn)證最佳擬合曲線。在第一次近似中,理論和實(shí)驗(yàn)數(shù)據(jù)的均方誤差越小,擬合越好。

y_pred_logistic=[logistic_model(i,fit[0][0],fit[0][1],fit[0][2]) for i in x] y_pred_exp = [exponential_model(i,exp_fit[0][0], exp_fit[0][1], exp_fit[0][2]) for i in x] mean_squared_error(y,y_pred_logistic) mean_squared_error(y,y_pred_exp)

Logistic模型MSE(均方誤差):

251977.62

指數(shù)模型MSE:

2873584.27

哪個(gè)是正確的模型?

殘差分析似乎指向邏輯模型。很可能是因?yàn)楦腥緫?yīng)該會(huì)在將來(lái)的某一天結(jié)束;即使每個(gè)人都會(huì)被感染,他們也會(huì)適當(dāng)?shù)匕l(fā)展出免疫防御措施以避免再次感染。只要病毒沒有發(fā)生太多變異(例如,流感病毒),這就是正確的模型。

本文作者:

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(pdf更新到25集)本站qq群1003271085,加入微信群請(qǐng)回復(fù)“加群”獲取一折本站知識(shí)星球優(yōu)惠券,請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看

總結(jié)

以上是生活随笔為你收集整理的【机器学习实战】意大利Covid-19病毒感染数学模型及预测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。