Sumber: DeepHub IMBA
Artikel ini adalah tentang 2400 kata , Dianjurkan untuk membaca 9 menit
Artikel ini akan menggunakan Python untuk menunjukkan analisis matematis sederhana dari pertumbuhan infeksi dan dua model untuk lebih memahami evolusi infeksi.
Label: Pembelajaran Mesin
Dunia saat ini sedang melawan musuh baru, dan itu adalah virus Covid-19.
Sejak kemunculannya, virus telah menyebar dengan cepat ke seluruh dunia. Sayangnya, jumlah penularan Covid-19 di Italia merupakan yang tertinggi di Eropa, yaitu 115.242 (per 3 April 2020). Kami adalah negara pertama di dunia Barat yang menghadapi musuh baru ini, dan kami memerangi dampak ekonomi dan sosial dari virus ini setiap hari.
Pada artikel ini, saya akan menggunakan Python untuk menunjukkan kepada Anda analisis matematis sederhana dari pertumbuhan infeksi dan dua model untuk lebih memahami evolusi infeksi.
Pengumpulan data
Departemen Pertahanan Sipil Italia memperbarui data kumulatif orang yang terinfeksi setiap hari. Data ini diungkapkan sebagai data terbuka di GitHub di sini:
https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv
Tujuan saya adalah membuat model rangkaian waktu dari jumlah orang yang terinfeksi sejauh ini (yaitu, jumlah sebenarnya orang yang terinfeksi ditambah jumlah orang yang sudah terinfeksi). Model-model ini memiliki parameter yang akan diestimasi dengan penyesuaian kurva.
Kami melakukannya dengan Python.
Pertama, mari impor beberapa perpustakaan.
impor panda sebagai pdimport numpy sebagai npdari datetime import datetime, timedeltafrom sklearn.metrics import mean_squared_errorfrom scipy.optimize import curve_fitfrom scipy.optimize import fsolveimport matplotlib.pyplot as plt% matplotlib inlineSekarang mari kita lihat data aslinya.
url = https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csvdf = pd.read_csv (url)Kolom yang kita butuhkan is'totale_casi ', yang berisi jumlah kumulatif infeksi sejauh ini.
Ini adalah data aslinya. Sekarang, mari kita siapkan analisisnya.
Persiapan data
Pertama, kita perlu mengubah tanggal menjadi angka. Kami akan mulai menghitung mulai 1 Januari.
df = df.locFMT = '% Y-% m-% d% H:% M:% S'date = dfdf = date.map (lambda x: (datetime.strptime (x, FMT) -datetime.strptime (" 2020-01-0100:00:00 ", FMT)). Hari)Sekarang kita dapat menganalisis dua model yang akan diuji yaitu fungsi logistik dan fungsi eksponensial.
Setiap model memiliki tiga parameter yang akan diestimasi dengan perhitungan pencocokan kurva pada data historis.
Model logistik
Model logistik banyak digunakan untuk menggambarkan pertumbuhan penduduk. Infeksi dapat digambarkan sebagai peningkatan jumlah patogen, sehingga masuk akal untuk menggunakan model logistik.
Rumus ini sangat terkenal di kalangan ilmuwan data karena digunakan dalam pengklasifikasi regresi logistik dan merupakan fungsi aktivasi jaringan saraf.
Ekspresi paling umum dari fungsi logistik adalah:
Dalam rumus ini, kami memiliki variabel x (sekarang) dan tiga parameter: a, b, c.
- a adalah tingkat infeksi;
- b adalah hari dimana infeksi paling sering terjadi;
- c adalah jumlah total orang yang terinfeksi yang tercatat pada akhir infeksi.
Pada nilai waktu yang tinggi, jumlah orang yang terinfeksi semakin mendekati nilai c, yang merupakan titik waktu kita mengatakan bahwa infeksi telah berakhir. Fungsi ini juga memiliki titik belok di titik b, yang merupakan titik di mana turunan pertama mulai menurun (yaitu, puncak di mana infeksi mulai melemah dan berkurang).
Mari tentukan modelnya dengan Python:
def logistic_model (x, a, b, c): return c / (1 + np.exp (- (x-b) / a))Kita dapat menggunakan fungsi curve_fit di pustaka scipy untuk memperkirakan nilai parameter dan kesalahan dari data asli.
x = daftar (df.iloc) y = daftar (df.iloc) fit = kurva_fit (model_logistik, x, y, p0 =)Berikut beberapa nilai:
a = 3.54b = 68.00c = 15968,38Fungsi ini juga mengembalikan matriks kovarians, yang nilai diagonalnya adalah varian dari parameter. Mengambil akar kuadratnya, kita dapat menghitung kesalahan standar. kesalahan =
· Kesalahan standar a: 0,24 · Kesalahan standar b: 1,53 · Kesalahan standar c: 4174.69Angka-angka ini memberi kita banyak wawasan yang berguna.
Perkiraan jumlah infeksi pada akhir infeksi adalah 15968 +/- 4174.
Puncak infeksi diperkirakan sekitar 9 Maret 2020.
Tanggal akhir infeksi yang diharapkan dapat dihitung sebagai hari ketika jumlah kumulatif orang yang terinfeksi dibulatkan ke parameter c bilangan bulat terdekat.
Kita dapat menggunakan fungsi fsolve scipy untuk menghitung akar persamaan yang menentukan akhir infeksi.
sol = int (fsolve (lambda x: logistic_model (x, a, b, c) -int (c), b))Waktu penyelesaiannya adalah 15 April 2020.
Model eksponensial
Model logistik menggambarkan pertumbuhan infeksi yang akan berhenti di masa depan, sedangkan model eksponensial menggambarkan pertumbuhan infeksi yang tidak dapat dihentikan. Misalnya, jika seorang pasien menginfeksi 2 pasien setiap hari, maka kita akan mengalami 2 infeksi setelah 1 hari, 4 setelah 2 hari, 8 setelah 3 hari, dan seterusnya.
Fungsi eksponensial yang paling umum adalah:
Variabel x adalah waktu, kita masih memiliki parameter a, b, c, tetapi artinya berbeda dengan parameter fungsi logistik.
Mari kita definisikan fungsi ini dengan Python dan lakukan proses penyesuaian kurva yang sama dengan pertumbuhan logistik.
def exponential_model (x, a, b, c): return a * np.exp (b * (x-c)) exp_fit = curve_fit (exponential_model, x, y, p0 =)Parameter dan deviasi standarnya adalah:
· A: 0,0019 +/- 64,6796 · b: 0,2278 +/- 0,0073 · c: 0,50 +/- 144254,77Gambar
Kami sekarang memiliki semua data yang diperlukan untuk memvisualisasikan hasil kami.
pred_x = list (range (max (x), sol)) plt.rcParams = plt.rc ('font', size = 14) ## Realdataplt.scatter (x, y, label = "Real data", color = " red ") # Curveplt.plot logistik yang diprediksi (x + pred_x ,, label =" Logistic model ") #Prediksi curveplt.plot eksponensial (x + pred_x ,, label =" Model eksponensial ") plt.legend () plt.xlabel ( "Hari sejak 1 Januari 2020") plt.ylabel ("Jumlah total orang yang terinfeksi") plt.ylim ((min (y) * 0,9, c * 1,1)) plt.show ()Kedua kurva teoritis ini tampaknya sangat dekat dengan tren eksperimental. Mana yang lebih baik? Mari kita lihat residu.
Analisis sisa
Sisa adalah perbedaan antara setiap titik percobaan dan titik teoritis yang sesuai. Kami dapat memverifikasi kurva kecocokan terbaik dengan menganalisis residual dari kedua model. Dalam pendekatan pertama, semakin kecil mean square error dari data teoritis dan eksperimental, semakin baik kesesuaiannya.
y_pred_logistic = y_pred_exp = mean_squared_error (y, y_pred_logistic) mean_squared_error (y, y_pred_exp)Model logistik MSE (mean square error): 251977,62
Model indeks MSE: 2873584.27
Manakah model yang benar?
Analisis sisa tampaknya mengarah pada model logis. Mungkin karena infeksi akan berakhir suatu hari nanti; bahkan jika semua orang akan terinfeksi, mereka akan mengembangkan tindakan pertahanan kekebalan yang tepat untuk menghindari infeksi ulang. Selama virus tidak terlalu banyak bermutasi (misalnya virus influenza), ini adalah model yang benar.
Editor: Huang Jiyan
Proofreading: Hong Shuyue
-Selesai-
Ikuti platform publik WeChat resmi dari Institut Ilmu Data Tsinghua-Qingdao " Pai Data AI "Dan nomor saudara perempuan" Data Pie THU "Dapatkan lebih banyak manfaat kuliah dan konten berkualitas.
- Penerapan model negatif sampling berdasarkan grafik pengetahuan dalam sistem rekomendasi (open source)
- Ajari Anda untuk menggunakan jaringan saraf untuk menyelesaikan persamaan matematika tingkat lanjut!
- Google Terjemahan dihancurkan! Mesin terjemahan pertama di dunia, DeepL, telah kembali, dan "detail gila" telah selesai
- University of Science and Technology of China × MSRA | Catatan Kuliah Dr. Zhou Ming: Pemrosesan Bahasa Alami Membuat Hidup Lebih Baik
- Tonggak sejarah yang "menyeramkan": AI ilmuwan China menerjemahkan gelombang otak dengan akurasi 97%
- Di mana menemukan data penelitian mahkota baru? Tempat yang harus dilihat untuk pekerja penelitian ilmiah (dengan tautan)
- Menggunakan gerbang logika protein untuk mengubah sel menjadi komputer, cendekiawan muda Tiongkok belajar tentang Sains