建立線性迴歸器

建立線性迴歸器

迴歸是估計輸入資料與連續值輸出資料之間關係的過程。資料通常是實數形式的,我們的目標是估計滿足輸入到輸出對映關係的基本函式。讓我值們從一個簡單的示例開始。考慮下面的輸入與輸出對映關係:

1→2

3→6

4。3→8。6

7。1→14。2

如果要你估計輸入與輸出的關聯關係,你可以透過模式匹配輕鬆地找到結果。我們發現輸出結果一直是輸入資料的兩倍,因此輸入與輸出的轉換公式就是這樣:

f(x)=2x

這是體現輸入值與輸出值關聯關係的一個簡單函式。但是,在真實世界中通常都不會這麼簡單,輸入與輸出的對映關係函式並不是一眼就可以看出來的。

線性迴歸用輸入變數的線性組合來估計基本函式。上面的示例就是一種單輸入單輸出變數的線性迴歸。

線性迴歸的目標是提取輸入變數與輸出變數的關聯線性模型,這就要求實際輸出與線性方程預測的輸出的殘差平方和最小化。這種方法被稱為普通最小二乘法。

我們可能覺得用一條曲線對這些點進行擬合效果會更好,但是線性迴歸不允許這樣做。線性迴歸的主要優點就是方程簡單。如果想用非線性迴歸,可能會得到更準確的型,但是擬合速度會慢很多。線性迴歸模型就像下圖顯示的,用一條直線近似資料點的趨勢。接下來看看如何用 Python建立線性迴歸模型。

建立線性迴歸器

我們先準備好一份資料檔案data_singlevar。txt,相關資料檔案可到

https://github。com/windform/Python-Machine-Learning-Cookbook/blob/master/Chapter01/data_singlevar。txt

這個地址下載。

檔案裡第一個欄位是輸入值,第二個欄位是與逗號前面的輸入值相對應的輸出值。

(1)我們先匯入載入資料

#載入、匯入資料

import sys

import numpy as np

filename = ‘data_singlevar。txt’

x = []

y = []

with open(filename, ‘r’) as f:

for line in f。readlines():

data = [float(i) for i in line。split(‘,’)]

xt, yt = data[:-1], data[-1]

X。append(xt)

y。append(yt)

把輸入資料載入到變數x和y,其中x是資料,y是標記。在程式碼的for迴圈體中,我們解析每行資料,用逗號分割欄位。然後,把欄位轉化為浮點數,並分別儲存到變數x和y中。

(2)建立機器學習模型時,需要用一種方法來驗證模型,檢查模型是否達到一定的滿意度。為了實現這個方法,把資料分成兩組:訓練資料集( training dataset)與測試資料集( testing dataset)。訓練資料集用來建立模型,測試資料集用來驗證模型對未知資料的學習效果。因此,

先把資料分成訓練資料集與測試資料集

num_training = int(0。8 * len(x))

num_test = len(x) - num_training

#訓練資料

x_train = np。array(x[:num_training])。reshape((num_training,1))

y_train = np。array(y[:num_training])

#測試資料

x_test = np。array(x[num_training:])。reshape((num_test,1))

y_test = np。array(y[num_training:])

這裡用8%的資料作為訓練資料集,其餘20%的資料作為測試資料集。

(3)現在已經準備好訓練模型。接下來建立一個迴歸器物件。

from sklearn import linear_model

#建立迴歸器物件

linear_regressor = linear_model。LinearRegression()

#用訓練資料集訓練模型

linear_regressor。fit(x_train,y_train)

(4)我們利用訓練資料集訓練了線性迴歸器,向fit方法提供輸入資料即可訓練模型,接下來是擬合數據模型:

#擬合

import matplotlib。pyplot as plt

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()

建立線性迴歸器

從上圖可以看出,模型訓練的效果很好,但這隻能體現模型對訓練資料的擬合效果。

(5)接下來用模型對測試資料集進行預測:

#資料預測

y_test_pred = linear_regressor。predict(x_test)

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()

建立線性迴歸器

相關閱讀:

《每天一點統計學——用最小二乘法求最佳擬合線》

《用R語言做資料分析——一元線性迴歸》