文章目錄
- 前言
- 一、線性回歸的基本概念
- 二、損失函數
- 三、最小二乘法
前言
通過今天的學習,我掌握了機器學習中的線性回歸的相關基本概念,包括損失函數的概念,最小二乘法的理論與算法實現。
一、線性回歸的基本概念
要理解什么是線性回歸,就要先理解什么是回歸。
回歸是通過訓練帶標簽的樣本數據得到模型參數,對連續型數據進行預測。
像這樣的式子: y = w x + b y=wx+b y=wx+b就是一個線性回歸模型,在實際的應用場景中往往不能找到某一個方程滿足所有特征,這時我們就需要使用計算機根據實際的數據求解得到最優(也就是最接近真實值)的方程式作為模型完成預測任務。
例如,如果我們將數據描繪在坐標軸上:
線性回歸的任務就是找到一條最佳直線擬合所有點。
二、損失函數
我們想通過線性回歸,找到一條最優的直線擬合所有數據,有許多方式確定這條最優直線,這里我們使用損失函數進行評估。
對于線性回歸而言,我們使用均方誤差作為損失函數,即實際數據點數據到擬合直線的豎直距離的平方再求和。用公式可以表達為:
e ˉ = 1 n ∑ i = 1 n ( y i ? w x i ? b ) 2 \bar e = \frac{1}{n} \textstyle\sum_{i=1}^{n}(y_{i}-w x_{i} - b)^{2} eˉ=n1?∑i=1n?(yi??wxi??b)2
其中,每一個w值都會對應一個loss,我們要求的即是使得loss最小時的w值。
如果只有單個特征參數w,我們可以使用以前學習過的數學方法,如韋達定理,求導等直接解出;但如果有多個w值,我們就需要使用最小二乘法和梯度下降的思想進行求解了。
要推導接下來的最小二乘法和梯度下降,需要結合矩陣求導和矩陣除法的公式:
三、最小二乘法
假設一共有多個特征,即組成損失函數的是一個多元二次方程,即:
h ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 + w 6 x 6 + w 7 x 7 + w 8 x 8 + w 0 x 0 h(x)=w_1x_1+w_2x_2+w_3x_3+w_4x_4+w_5x_5+w_6x_6+w_7x_7+w_8x_8+w_0x_0 h(x)=w1?x1?+w2?x2?+w3?x3?+w4?x4?+w5?x5?+w6?x6?+w7?x7?+w8?x8?+w0?x0?
l o s s = [ ( h 1 ( x ) ? y 1 ) 2 + ( h 2 ( x ) ? y 2 ) 2 + . . . ( h n ( x ) ? y n ) 2 ] / n = 1 n ∑ i = 1 n ( h ( x i ) ? y i ) 2 = 1 n ∣ ∣ ( X W ? y ) ∣ ∣ 2 = 1 2 ∣ ∣ ( X W ? y ) ∣ ∣ 2 這就是最小二乘法公式 ∣ ∣ A ∣ ∣ 2 是歐幾里得范數的平方 也就是每個元素的平方相加 loss=[(h_1(x)-y_1)^2+(h_2(x)-y_2)^2+...(h_n(x)-y_n)^2]/n\\=\frac{1}{n} \textstyle\sum_{i=1}^{n}(h(x_{i})-y_{i})^{2}\\=\frac{1}{n}||(XW-y)||^2\\=\frac{1}{2}||(XW-y)||^2 這就是最小二乘法公式 \\ ||A||^2 是歐幾里得范數的平方\,也就是每個元素的平方相加 loss=[(h1?(x)?y1?)2+(h2?(x)?y2?)2+...(hn?(x)?yn?)2]/n=n1?∑i=1n?(h(xi?)?yi?)2=n1?∣∣(XW?y)∣∣2=21?∣∣(XW?y)∣∣2這就是最小二乘法公式∣∣A∣∣2是歐幾里得范數的平方也就是每個元素的平方相加
由于我們是研究使得loss最小時的w值而非關心loss具體的值,所以我們將n改為2,這可以便于后續求導運算。
接下來,我們對loss的矩陣形式進行化簡和求導(此處不再贅述),最終可以得到最后可以得到w值組成的矩陣W:
W = ( X T X ) ? 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)?1XTy
通過以上的式子,我們可以精確地求出每一個w值,我們將這種方法稱為最小二乘法。
API用法:sklearn.linear_model.LinearRegression()
- 該函數返回模型的參數和偏置項,即coef_,intercept_
# 線性回歸(最小二乘法)
from sklearn.linear_model import LinearRegression
import numpy as np
data=np.array([[0,14,8,0,5,-2,9,-3,399],[-4,10,6,4,-14,-2,-14,8,-144],[-1,-6,5,-12,3,-3,2,-2,30],[5,-2,3,10,5,11,4,-8,126],[-15,-15,-8,-15,7,-4,-12,2,-395],[11,-10,-2,4,3,-9,-6,7,-87],[-14,0,4,-3,5,10,13,7,422],[-3,-7,-2,-8,0,-6,-5,-9,-309]])
x,y = data[:,:-1],data[:,-1]model = LinearRegression(fit_intercept=True) # 可指定偏置項
model.fit(x,y)x_new=[[0,14,8,0,5,-2,9,-3]]
w = model.coef_
b = model.intercept_
# y_pred = model.predict(x_new)
# y_pred = w@x_new.T + b
y_pred = np.sum(w*x_new) + b
print(y_pred)
tips:由于該模型使用最小二乘法,需要進行逆矩陣的計算,在計算機中逆矩陣的運算會消耗大量的算力和內存空間,所以在實際應用中我們使用接下來介紹的梯度下降來求解參數。
THE END