WEDCV155VD5RRV515DV |
本文通過sklearn實現新型肺炎累計確診病例的預測,主要算法包括線性回歸,邏輯回國,多項式回歸(二次曲線、三次曲線、四次曲線、五次曲線)等算法,具體到預測,主要包括算法的選擇,很多時候算法的選擇是通過數據的查全率查準率,訓練集、測試集、檢驗集等上的準確率綜合評估出來的,二是關於數據集的分拆,需要拆解為訓練集、測試集分別進行驗證。 總的來說,訓練集大概只有15條記錄,訓練集4條,還有預測的7條,從公開的圖表來看,出現了2次波動,所以本模型效果一般。 如下: import operator import matplotlib.pyplot as plt import numpy as np from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression,LogisticRegression import matplotlib.pyplot as plt def init_data: # 原始數據 countrydatahistorys=[{'date': '2020-02-10', 'confirmedNum': 42708, 'suspectedNum': 21675, 'curesNum': 3998, 'deathsNum': 1017, 'suspectedIncr': 3536}, {'date': '2020-02-09', 'confirmedNum': 40224, 'suspectedNum': 23589, 'curesNum': 3283, 'deathsNum': 909, 'suspectedIncr': 4008}, {'date': '2020-02-08', 'confirmedNum': 37162, 'suspectedNum': 28942, 'curesNum': 2651, 'deathsNum': 812, 'suspectedIncr': 3916}, {'date': '2020-02-07', 'confirmedNum': 34594, 'suspectedNum': 27657, 'curesNum': 2052, 'deathsNum': 723, 'suspectedIncr': 4214}, {'date': '2020-02-06', 'confirmedNum': 31197, 'suspectedNum': 26359, 'curesNum': 1542, 'deathsNum': 637, 'suspectedIncr': 4833}, {'date': '2020-02-05', 'confirmedNum': 28060, 'suspectedNum': 24702, 'curesNum': 1153, 'deathsNum': 564, 'suspectedIncr': 5328}, {'date': '2020-02-04', 'confirmedNum': 24363, 'suspectedNum': 23260, 'curesNum': 892, 'deathsNum': 491, 'suspectedIncr': 3971}, {'date': '2020-02-03', 'confirmedNum': 20471, 'suspectedNum': 23214, 'curesNum': 630, 'deathsNum': 425, 'suspectedIncr': 5072}, {'date': '2020-02-02', 'confirmedNum': 17238, 'suspectedNum': 21558, 'curesNum': 475, 'deathsNum': 361, 'suspectedIncr': 5173}, {'date': '2020-02-01', 'confirmedNum': 14411, 'suspectedNum': 19544, 'curesNum': 328, 'deathsNum': 304, 'suspectedIncr': 4562}, {'date': '2020-01-31', 'confirmedNum': 11821, 'suspectedNum': 17988, 'curesNum': 243, 'deathsNum': 259, 'suspectedIncr': 5019}, {'date': '2020-01-30', 'confirmedNum': 9720, 'suspectedNum': 15238, 'curesNum': 171, 'deathsNum': 213, 'suspectedIncr': 4812}, {'date': '2020-01-29', 'confirmedNum': 7736, 'suspectedNum': 12167, 'curesNum': 124, 'deathsNum': 170, 'suspectedIncr': 4148}, {'date': '2020-01-28', 'confirmedNum': 5997, 'suspectedNum': 9239, 'curesNum': 103, 'deathsNum': 132, 'suspectedIncr': 3248}, {'date': '2020-01-27', 'confirmedNum': 4535, 'suspectedNum': 6973, 'curesNum': 51, 'deathsNum': 106, 'suspectedIncr': 2077}, {'date': '2020-01-26', 'confirmedNum': 2761, 'suspectedNum': 5794, 'curesNum': 49, 'deathsNum': 80, 'suspectedIncr': 3806}, {'date': '2020-01-25', 'confirmedNum': 1985, 'suspectedNum': 2684, 'curesNum': 38, 'deathsNum': 56, 'suspectedIncr': 1309}, {'date': '2020-01-24', 'confirmedNum': 1297, 'suspectedNum': 1965, 'curesNum': 38, 'deathsNum': 41, 'suspectedIncr': 1118}, {'date': '2020-01-23', 'confirmedNum': 830, 'suspectedNum': 1072, 'curesNum': 34, 'deathsNum': 25, 'suspectedIncr': 680}] # 按照時間排序全國趨勢數據 countrydatahistorys=sorted(countrydatahistorys, key=operator.itemgetter('date')) # 結構化全國各省圖表所需數據 xdata=list(range(len(countrydatahistorys))) xlabel=list(row['date'] for row in countrydatahistorys) # 追加預測未來一周的自變量X xdata.extend(list(range(19, 26))) from datetime import date, datetime, timedelta start_date = date(2020, 2, 11) xlabel.extend(list(str(start_date + timedelta(i)) for i in range(7))) # 生成累計確診數據,即y值 confirmedNum=list(row['confirmedNum'] for row in suspectedNum=list(row['suspectedNum'] for row in #進行數據格式轉換,生成訓練集、測試集和預測集 Xlabel=np.array(xlabel).reshape(-1, 1) X=np.array(xdata).reshape(-1, 1) y=np.array(confirmedNum).reshape(-1, 1) X_train=X[:15] X_test=X[15:19] X_predict=X[19:] y_train=y[:15] y_test=y[15:19] return X_train,X_test,y_train,y_test,X_predict,X,y,xlabel X_train,X_test,y_train,y_test,X_predict,X,y,Xlabel=init_data lr=LinearRegression.fit(X_train,y_train) coef=lr.coef_ intercept=lr.intercept_ score_train=lr.score(X_train,y_train) score_test=lr.score(X_test,y_test) y_predict=lr.predict(X_test) # lg=LogisticRegression(C=0.2) lg.fit(X_train,y_train) y_lg_predict=lg.predict(X) print('y_lg_predict=',y_lg_predict) poly1 =PolynomialFeatures(degree=1) X_ploy =poly1.fit_transform(X_train) l1=LinearRegression l1.fit(X_ploy,y_train) poly2 =PolynomialFeatures(degree=2) X_ploy =poly2.fit_transform(X_train) l2=LinearRegression l2.fit(X_ploy,y_train) poly3 =PolynomialFeatures(degree=3) X_ploy =poly3.fit_transform(X_train) l3=LinearRegression l3.fit(X_ploy,y_train) poly4 =PolynomialFeatures(degree=4) X_ploy =poly4.fit_transform(X_train) l4=LinearRegression l4.fit(X_ploy,y_train) poly5 =PolynomialFeatures(degree=5) X_ploy =poly5.fit_transform(X_train) l5=LinearRegression l5.fit(X_ploy,y_train) poly6 =PolynomialFeatures(degree=6) X_ploy =poly6.fit_transform(X_train) l6=LinearRegression l6.fit(X_ploy,y_train) fig=plt.figure(figsize=(10,5.5)) plt.rcParams['font.sans-serif']=['SimHei'] # 畫出實際值,注意X和y不等,X訓練集加測試集和實際y值相等 plt.plot(np.vstack((X_train,X_test)),y,color='black',marker='o',linestyle='-',label='累計確診病例(官方統計)') plt.plot(X,y_lg_predict,color='cyan',marker='*',linestyle=':',label='邏輯回歸') plt.plot(X,intercept+X*coef,color='red',marker='*',linestyle=':',label='線性預測') plt.plot(X,l2.predict(poly2.fit_transform(X)),color='blue',marker='*',linestyle=':',label='2次多項式') plt.plot(X,l3.predict(poly3.fit_transform(X)),color='yellow',marker='*',linestyle=':',label='3次多項式') plt.plot(X,l4.predict(poly4.fit_transform(X)),color='green',marker='*',linestyle=':',label='4次多項式') # 設置x軸標籤及其字號 plt.xlabel('日期',fontsize=14) # 設置y軸標籤及其字號 plt.ylabel('累計確診病例數量',fontsize=14) # 設置X軸序列標籤值 plt.xticks(X-1,Xlabel,rotation=30,fontsize=10) # 添加訓練集、測試集、預測集分割垂直直線 plt.axvline(x=14.5,linestyle='--',c="green") plt.axvline(x=18.5,linestyle='--',c="green") # 添加測試集的預測結果數據標籤 # for x,y in zip(X_test.tolist, y_predict.tolist): # plt.text(x[0],y[0],'{:5.0f}'.format(y[0]), fontsize=8) # 顯示圖例 plt.legend plt.show 「追夢IT人」 QQ群號:763628645 QQ群二維碼如下, 添加請註明:姓名+地區+職位,否則不予通過 訂閱我的微信公眾號「楊建榮的學習筆記」,第一時間免費收到文章更新。別忘了
詳細資料
- ISBN:9571507555
- 規格:平裝 / 普通級 / 單色印刷 / 初版
- 出版地:台灣
- 本書分類:> >
文章來源取自於:
壹讀 https://read01.com/mznAggN.html
博客來 https://www.books.com.tw/exep/assp.php/888words/products/0010171660
如有侵權,請來信告知,我們會立刻下架。
DMCA:dmca(at)kubonews.com
聯絡我們:contact(at)kubonews.com
福興白天沒精神治療有效中醫診所北斗注意力不集中治療中醫福興心悸治療有效中醫診所
溪湖胃脹治療有效中醫診所 大葉大學附近推薦打嗝改善中醫診所 網路評比不錯的鹿港中醫診所,自律神經失調改善很多中寮白天賴床睏倦中醫推薦 集集血壓不穩定治療有效中醫診所 大家都推薦這間鹿港中醫診所,失眠睡不著改善很多大村昏眩看什麼科 永靖睡眠障礙門診改善中醫診所 ptt推薦的和美中醫診所,睡眠障礙改善很多名間鄉胸悶治療有效中醫診所 仁愛鄉頸部緊繃酸痛治療中醫 大家都推薦這間草屯中醫診所,失眠睡不著改善很多