<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
本文介紹如何構建簡單線性迴歸模型及計算其準確率,最後介紹如何持久化模型。
線性迴歸表示發現函數使用線性組合表示輸入變數。簡單線性迴歸很容易理解,使用了基本的迴歸技術,一旦理解了這些基本概念,可以更好地學習其他型別的迴歸模型。
迴歸用於發現輸入變數和輸出變數之間的關係,一般變數為實數。我們的目標是估計對映從輸入到輸出的對映核函數。
下面從一個簡單範例開始:
1 --> 2 3 --> 6 4.3 --> 8.6 1.1 --> 14.2
看到上面資料,估計你已經看出它們之間的關係:f(x) = 2x
但是現實資料不會這麼直接。下面範例資料來自Vehicles.txt檔案。每行資料使用逗號分割,第一個資料為輸入資料,第二個為輸出資料,我們的目標是發現線性迴歸關係:基於汽車登記量估計省份人口數量。
範例資料如下:
145263, 127329
204477, 312027
361034, 573694
616716, 891181
885665, 1059114
773600, 1221218
850513, 1326513
996733, 1543752
827967, 1571053
1011436,1658138
1222738,1970521
2404651,3744398
2259795,4077166
2844588,4404246
2774071,4448146
3011089,4915123
3169307,5074261
3346791,5850850
3702114,5888472
5923476,10008349
import numpy as np from sklearn import linear_model import matplotlib.pyplot as plt import sklearn.metrics as sm import pickle filename = "data/vehicles.txt" x = [] y = [] with open(filename, 'r') as lines: for line in lines: xt, yt = [float(i) for i in line.split(',')] x.append(xt) y.append(yt)
上面程式碼載入檔案至x,y變數中,x是自變數,y是響應變數。在迴圈內讀取每一行,然後基於逗號分裂為兩個變數並轉為浮點型。
構建機器學習模型,需要劃分訓練集和測試集,訓練集用於構建模型,測試集用於驗證模型並檢查模型是否滿足要求。
num_training = int(0.8 * len(x)) num_test = len(x) - num_training # 訓練資料佔80% x_train = np.array(x[: num_training]).reshape((num_training, 1)) y_train = np.array(y[: num_training]) # 測試資料佔20% x_test = np.array(x[num_training:]).reshape((num_test, 1)) y_test = np.array(y[num_training:])
首先取80%資料作為訓練集,剩餘的作為測試集。這時我們構造了四個陣列:x_train,x_test,y_train,y_test。
現在準備訓練模型,需要使用regressor物件。
# Create linear regression object linear_regressor = linear_model.LinearRegression() # Train the model using the training sets linear_regressor.fit(x_train, y_train)
首先從sklearn庫中匯入linear_model方法,用於實現線性迴歸,裡面包括目標值:輸入變數的線性組合。然後使用LinearRegression() 函數執行最小二乘法執行線性迴歸。最後fit函數用於擬合線性模型,需要傳入兩個引數:x_train,y_train。
上面基於訓練集擬合線性模型,使用fit方法接收訓練資料訓練模型。為了檢視擬合程度,我們可以使用訓練資料進行預測:
y_train_pred = linear_regressor.predict(X_train)
plt.figure() plt.scatter(x_train, y_train, color='green') plt.plot(x_train, y_train_pred, color='black', linewidth=4) plt.title('Training data') plt.show()
生成圖示如下:
前面使用訓練模型預測訓練資料。對於未知資料不能確定模型效能,我們需要基於測試資料進行測試。
下面基於測試資料進行預測並畫圖展示:
y_test_pred = linear_regressor.predict(x_test) plt.figure() plt.scatter(x_test, y_test, color='green') plt.plot(x_test, y_test_pred, color='black', linewidth=4) plt.title('Test data') plt.show()
與我們預想的一致,省人口與汽車註冊量成正相關。
上面構建了迴歸模型,但我們需要評估模型的質量。這裡我們定義錯誤為實際值與預測值之間的差異,下面我們看如何計算迴歸模型的精度。
print("MAE =", round(sm.mean_absolute_error(y_test, y_test_pred), 2)) print("MSE =", round(sm.mean_squared_error(y_test, y_test_pred), 2)) print("Median absolute error =", round(sm.median_absolute_error(y_test, y_test_pred), 2)) print("Explain variance score =", round(sm.explained_variance_score(y_test, y_test_pred), 2)) print("R2 score =", round(sm.r2_score(y_test, y_test_pred), 2))
輸出結果:
MAE = 241907.27
MSE = 81974851872.13
Median absolute error = 240861.94
Explain variance score = 0.98
R2 score = 0.98
R2得分接近1表示模型預測效果非常好。計算每個指標會很麻煩,一般選擇一兩個指標來評估模型。一個好的做法是MSE較低,解釋方差得分較高。
訓練完模型,可以儲存至檔案中,下次需要模型預測可直接從檔案載入。
下面看如何持久化模型。需要使用pickle模組,實現儲存Python物件,它是Python標準庫的一部分。
# 寫入檔案 output_model_file = "3_model_linear_regr.pkl" with open(output_model_file, ' wb') as f: pickle.dump(linear_regressor, f) # 載入使用 with open(output_model_file, ' rb') as f: model_linregr = pickle.load(f) y_test_pred_new = model_linregr.predict(x_test) print("New mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred_new), 2))
輸出結果:
New mean absolute error = 241907.27
這裡從檔案載入資料至model_linregr變數,預測結果與上面一致。
到此這篇關於Python構建簡單線性迴歸模型的文章就介紹到這了,更多相關Python線性迴歸內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45