線性回歸 最小二乘法實現

2022-06-24 20:48:09 字數 3409 閱讀 3196

目錄

一、線性回歸

給定由n個屬性描述的樣本x=(x0, x1, x2, ... , xn),線性模型嘗試學習乙個合適的樣本屬性的線性組合來進行**任務,如:f(x) = w1x1 + w2x2 + ... + wnxn + b = w.t @ x + b。通過一定方法學得向量w和常數b後,模型便可以確定下來。

而對於給定資料集d=,xm=(x1, x2, ..., xn),線性回歸則嘗試學得乙個線性模型來盡可能準確地**樣本的真實輸出標記。

線性模型嘗試學得**f(x)=wx + b**,使f(x)盡可能逼近樣本x對應的真實標記y,而這個所謂的逼近程度則可以使用**均方誤差**(***mean square error***,**mse**)來進行衡量:

$$e=\sum^_

$$e越小,則模型對真實標記的擬合程度越好,所以線性回歸的引數w,b的求解便可以轉化為求解以下函式:

\[(w^*, b^*)=\arg\min e

\]二、最小二乘法

前面已經提到過了,線性回歸模型建立的關鍵就是求解:

\[(w^*, b^*)=\arg\min e

\]求解w,b使e最小化的過程,稱為線性回歸模型的最小二乘「引數估計」(parameter estimation)。我們將e分別對w和b求偏導:

\[\frac=2(w\sum^_-\sum^_)

\]\[\frac=2(mb-\sum^_)

\]然後令上述兩個式子為0則可以求得w和b最優解的閉式解:

\[w=\frac_}_-\frac(\sum^_)^2}

\]\[b=\frac\sum^_

\]上述閉式解的推導過程如下:

通過上述推導出的閉式解求解出引數w和b便可以確定最終的線性回歸模型。

三、最小二乘法(向量表示)

在機器學習中常常以向量和矩陣的形式來進行計算從而提高模型的效率,所以這裡再講講最小二乘法的向量表示。為了便於推導,這裡將b合併進入w,並在x中新增了常數列。此時,均方誤差的表示變成了:

\[e=(y-xw)^t(y-xw)

\]求解:

\[w=\arg\min e

\]這裡涉及矩陣求導,所以先介紹兩個常用的矩陣求導公式:

\[\frac=a\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\frac=2x

\]現在將e對w求導:

\[\frac=\frac\frac=2(y-xw)(-x^t)=2x^t(xw-y)

\]令上述導數為0便可以求出w最優解的閉式解。但是需要注意的是,此處涉及了矩陣求逆的運算,所以需要進行簡單的討論。

1)若\(x^tx\)為滿秩矩陣或者正定矩陣,則可以求得:

\[w=(x^tx)^-x^ty

\]2)若\(x^tx\)不是滿秩矩陣,例如特徵數量大於樣本數量時,便可以解出多個w,此時便需要從中選擇出乙個解來作為模型的引數。

四、python實現

import numpy as np

class linearregression(object):

def __init__(self):

self.w = none

def _linear_func(self, x):

return x @ self.w[1:] + self.w[0] # z = w0 + w1 * x1 + w2 * x2... = w.t @ x

def _least_square(self, x, y):

x0 = np.ones((x.shape[0], 1))

x = np.hstack([x0, x])

self.w = np.linalg.inv(x.t @ x) @ x.t @ y # w = (x.t @ x)^-1 @ x.t @ y

def fit(self, x, y):

self._least_square(x, y)

return self

def predict(self, x):

return self._linear_func(x)

匯入波士頓房價資料集進行測試:

if __name__ == "__main__":

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import minmaxscaler

from sklearn.metrics import mean_squared_error

boston = datasets.load_boston()

x = boston.data

y = boston.target

scaler = minmaxscaler().fit(x)

x = scaler.transform(x)

x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, test_size=0.3)

lr = linearregression().fit(x_train, y_train)

y_pred = lr.predict(x_test)

print(mean_squared_error(y_test, y_pred))

plt.figure()

plt.plot(range(len(y_test)), y_test)

plt.plot(range(len(y_pred)), y_pred)

plt.legend(["test", "pred"])

plt.show()

均方誤差:

擬合曲線:

線性回歸,最小二乘法

回歸的定義 對於乙個點集,使用乙個函式去擬合該點集,使點集與擬合函式間的誤差最小,如果這個函式曲線是一條直線,則是線性回歸,如果曲線是二次曲線,則是二次回歸。廣義線性回歸 廣義線性模型是線性模型的擴充套件,其特點是不強行改變資料的自然度量,資料可以具有非線性和非恆定方差結構 59 主要是通過聯結函式...

線性回歸 最小二乘法(二)

上篇文章中介紹了單變數線性回歸,為什麼說時單變數呢,因為它只有單個特徵,其實在很多場景中只有單各特徵時遠遠不夠的,當存在多個特徵時,我們再使用之前的方法來求特徵係數時是非常麻煩的,需要乙個特徵係數乙個偏導式,而卻最要命的時特性的增長時及其迅猛的,幾 十 幾百 幾千 單變數線性回歸 多變數線性回歸 所...

線性回歸之最小二乘法

線性回歸是很常見的一種回歸,線性回歸可以用來 或者分類,主要解決線性問題。線性回歸過程主要解決的就是如何通過樣本來獲取最佳的擬合線。最常用的方法便是最小二乘法,它是一種數學優化技術,它通過最小化誤差的平方和尋找資料的最佳函式匹配。假設擬合直線為y ax b 對任意樣本點 x i,yi 誤差為e yi...