文章目錄
- 梯度下降
- 多元梯度下降法
- 梯度下降運算(特征放縮法)
- 多元梯度下降學習率的選擇
- 多項式回歸
- 多元梯度下降代碼
- 正規方程
- 正規方程代碼
- 梯度下降與正規方程的選擇
梯度下降
對于代價函式 J ( θ 0 , θ 1 ) J(θ_0,θ_1) J(θ0?,θ1?),或者我們可以推廣到更一般的代價函式(系數更多),如 J ( θ 0 , θ 1 , θ 2 , . . . , θ n ) J(θ_0,θ_1,θ_2,...,θ_n) J(θ0?,θ1?,θ2?,...,θn?),如果要最小化代價函式 m i n min min J ( θ 0 , θ 1 , θ 2 , . . . , θ n ) J(θ_0,θ_1,θ_2,...,θ_n) J(θ0?,θ1?,θ2?,...,θn?),那么我們可以用梯度下降法來解決,下面會以兩個引數的代價函式為例對梯度下降法進行介紹:
- 給 J ( θ 0 , θ 1 ) J(θ_0,θ_1) J(θ0?,θ1?)的兩個引數 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?賦兩個初始值,這個值可以隨意,但通常會選擇將 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?均設為0,
- 不停地一點點改變 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?,使代價函式 J ( θ 0 , θ 1 ) J(θ_0,θ_1) J(θ0?,θ1?)越來越小,直到找到最小值,
以下圖為例,我們初始設定的 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?對應圖中的某個點,我們將這個點記為起點1,現在從起點1出發,沿路徑1收斂于區域的最低點,也就是區域最優解,如果我們的起點往右偏移一點得到起點2,那么第二個區域最優解應該是沿路徑2收斂的最小值,同理,如果起點1往右偏移一點,也會得到不同的最優解,

下面我們來看看梯度下降演算法的數學原理:
重復下面這行演算法,不斷更新引數 θ j θ_j θj?,直到收斂于最小值,其中 : = := :=表示賦值, α α α表示學習率(learning rate),這里表示梯度下降的快慢, ? ? θ j J ( θ 0 , θ 1 ) \frac{?}{?θ_j}J(θ_0,θ_1) ?θj???J(θ0?,θ1?)是導數項,先不用管,之后會進行詳細解釋
θ j : = θ j ? α ? ? θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) θ_j:=θ_j-α\frac{?}{?θ_j}J(θ_0,θ_1) \quad(for \ j=0\ and\ j=1) θj?:=θj??α?θj???J(θ0?,θ1?)(for j=0 and j=1)
上面我們說到了要不斷改變 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?的值,那么如何改變呢,也是利用上面這一行演算法,并且改變 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?的值是同步進行的,在每次回圈中,我們只要保存 θ j ? α ? ? θ j J ( θ 0 , θ 1 ) θ_j-α\frac{?}{?θ_j}J(θ_0,θ_1) θj??α?θj???J(θ0?,θ1?)的值,賦值給 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?即可,如下:
t e m p 0 : = θ 0 ? α ? ? θ 0 J ( θ 0 , θ 1 ) temp0:=θ_0-α\frac{?}{?θ_0}J(θ_0,θ_1) temp0:=θ0??α?θ0???J(θ0?,θ1?)
t e m p 1 : = θ 1 ? α ? ? θ 1 J ( θ 0 , θ 1 ) temp1:=θ_1-α\frac{?}{?θ_1}J(θ_0,θ_1) temp1:=θ1??α?θ1???J(θ0?,θ1?)
θ 0 : = t e m p 0 θ_0:=temp0 θ0?:=temp0
θ 1 : = t e m p 1 θ_1:=temp1 θ1?:=temp1
好了,現在我們來解釋一下導數項 ? ? θ j J ( θ 0 , θ 1 ) \frac{?}{?θ_j}J(θ_0,θ_1) ?θj???J(θ0?,θ1?)的含義,假如下圖所示是 J ( θ 0 ) J(θ_0) J(θ0?)和 J ( θ 0 ) J(θ_0) J(θ0?)的影像,我們先看看 J ( θ 0 ) J(θ_0) J(θ0?),假設 θ 0 θ_0 θ0?位于圖中所示位置,對應點的正切值為正,那么 θ 0 θ_0 θ0?將不斷減小,逐漸收斂于區域最低點,當正切為0時, θ 0 θ_0 θ0?不再改變,此時找到了區域最優解,
同理我們看看 J ( θ 1 ) J(θ_1) J(θ1?)的影像,假設 θ 1 θ_1 θ1?位于圖中所示位置,對應點的正切值為負,那么 θ 1 θ_1 θ1?將不斷增大,逐漸收斂于區域最低點,當正切為0時, θ 1 θ_1 θ1?不再改變,此時找到了區域最優解,

現在我們再來討論一下公式中的 α α α, α α α表示學習率,也叫步長,下面我們以 θ 1 θ_1 θ1?為例解釋,可能有的同學會覺得如果 α α α取值過小, θ 1 θ_1 θ1?變化的越慢,會影響效率,如圖1,但如果 α α α取值過大, θ 1 θ_1 θ1?每次變化的跨度很大,也可能很難找到區域最優,如圖2,其實這些都不用擔心,正確的梯度下降演算法運行方式應該如圖3,什么?越接近區域最優時步長 α α α變小了?難道還要不斷改變 α α α的大小嗎,其實不是 α α α變小了,而是導數項 ? ? θ j J ( θ 0 , θ 1 ) \frac{?}{?θ_j}J(θ_0,θ_1) ?θj???J(θ0?,θ1?)變小了,我們都知道在收斂于區域最優的程序中,正切值是不斷收斂于0的,因此 α ? ? θ 1 J ( θ 0 , θ 1 ) α\frac{?}{?θ_1}J(θ_0,θ_1) α?θ1???J(θ0?,θ1?)整體是減小的,所以越趨近于區域最優, θ 1 θ_1 θ1?的改變數自然會越來越小,并不用額外去改變 α α α的大小,

ok,現在我們知道了 θ j : = θ j ? α ? ? θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) θ_j:=θ_j-α\frac{?}{?θ_j}J(θ_0,θ_1) \quad(for\ j=0\ and\ j=1) θj?:=θj??α?θj???J(θ0?,θ1?)(for j=0 and j=1)這行演算法的含義,那么要寫出代碼,我們還需要求出導數項 ? ? θ j J ( θ 0 , θ 1 ) \frac{?}{?θ_j}J(θ_0,θ_1) ?θj???J(θ0?,θ1?),才可以實作最小化代價函式
已知代價函式:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h 0 ( x ( i ) ) ? y ( i ) ) 2 J(θ_0,θ_1)=\frac{1}{2m}\sum^{m}_{i=1}(h_0(x^{(i)})-y^{(i)})^2 J(θ0?,θ1?)=2m1?i=1∑m?(h0?(x(i))?y(i))2
對代價函式求偏導:
? ? θ j J ( θ 0 , θ 1 ) = ? ? θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 \frac{?}{?θ_j}J(θ_0,θ_1)=\frac{?}{?θ_j}\frac{1}{2m}\sum^{m}_{i=1}(h_θ(x^{(i)})-y^{(i)})^2 ?θj???J(θ0?,θ1?)=?θj???2m1?i=1∑m?(hθ?(x(i))?y(i))2
= ? ? θ j 1 2 m ∑ i = 1 m ( θ 0 ? θ 1 x ( i ) ? y ( i ) ) 2 =\frac{?}{?θ_j}\frac{1}{2m}\sum^{m}_{i=1}(θ_0-θ_1x^{(i)}-y^{(i)})^2 =?θj???2m1?i=1∑m?(θ0??θ1?x(i)?y(i))2
因此對于 j = 0 j=0 j=0和 j = 1 j=1 j=1分別有:
? ? θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h 0 ( x ( i ) ) ? y ( i ) ) \frac{?}{?θ_0}J(θ_0,θ_1)=\frac{1}{m}\sum^{m}_{i=1}(h_0(x^{(i)})-y^{(i)}) ?θ0???J(θ0?,θ1?)=m1?i=1∑m?(h0?(x(i))?y(i))
? ? θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h 0 ( x ( i ) ) ? y ( i ) ) x ( i ) \frac{?}{?θ_1}J(θ_0,θ_1)=\frac{1}{m}\sum^{m}_{i=1}(h_0(x^{(i)})-y^{(i)})x^{(i)} ?θ1???J(θ0?,θ1?)=m1?i=1∑m?(h0?(x(i))?y(i))x(i)
現在我們求得了偏導,將偏導代回原來的式子,得到如下演算法,不斷重復更新 θ 0 θ_0 θ0?和 θ 1 θ_1 θ1?,直到收斂即可:
θ 0 : = θ 0 ? α 1 m ∑ i = 1 m ( h 0 ( x ( i ) ) ? y ( i ) ) θ_0:=θ_0-α\frac{1}{m}\sum^{m}_{i=1}(h_0(x^{(i)})-y^{(i)}) θ0?:=θ0??αm1?i=1∑m?(h0?(x(i))?y(i))
θ 1 : = θ 1 ? α 1 m ∑ i = 1 m ( h 0 ( x ( i ) ) ? y ( i ) ) x ( i ) θ_1:=θ_1-α\frac{1}{m}\sum^{m}_{i=1}(h_0(x^{(i)})-y^{(i)})x^{(i)} θ1?:=θ1??αm1?i=1∑m?(h0?(x(i))?y(i))x(i)
多元梯度下降法
例題:分析住房價格與所給特征值 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1?,x2?,x3?,x4?的關系
| 面積(平方英尺) | 房間數 | 層數 | 住房年齡(年) | 價格($1000) |
|---|---|---|---|---|
| x 1 x_1 x1? | x 2 x_2 x2? | x 3 x_3 x3? | x 4 x_4 x4? | y y y |
| 2104 | 5 | 1 | 45 | 460 |
| 1416 | 3 | 2 | 40 | 232 |
| 1534 | 3 | 2 | 30 | 315 |
| 852 | 2 | 1 | 36 | 178 |
注:
- n表示特征值的個數,如這里的x有四個,故n=4
- m表示樣本數目,一行為一個樣本,m=4
- x ( i ) x^{(i)} x(i)表示第i個訓練樣本的輸入特征值,如:
x ( 2 ) = [ 1416 3 2 40 ] x^{(2)}=\left[ \begin{matrix} 1416 \\ 3 \\ 2 \\ 40 \end{matrix} \right] x(2)=?????14163240??????
- x j ( i ) x^{(i)}_j xj(i)?表示第i個訓練樣本中第j個特征量的值
在之前的回歸假設中,我們假設的函式 h θ ( x ) = θ 0 + θ 1 x h_θ(x)=θ_0+θ_1x hθ?(x)=θ0?+θ1?x只有一個元,在多元問題中,這個假設不再適用,由于有四個特征值,我們可以假設成 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 h_θ(x)=θ_0+θ_1x_1+θ_2x_2+θ_3x_3+θ_4x_4 hθ?(x)=θ0?+θ1?x1?+θ2?x2?+θ3?x3?+θ4?x4?
現在利用矩陣來簡化一下這個等式的表示方式,為了統一形式,
θ
0
θ_0
θ0?看成
θ
0
x
0
θ_0x_0
θ0?x0?,令
x
0
=
1
x_0=1
x0?=1即可,那么現在也就意味著第
i
i
i個都有一個向量
x
(
i
)
x^{(i)}
x(i),其中
x
0
(
i
)
=
1
x^{(i)}_0=1
x0(i)?=1,由于特征值x加多了一列,所以特征向量
x
x
x是一個從0開始的
n
+
1
n+1
n+1維向量
x
=
[
x
0
x
1
x
2
x
3
x
4
]
∈
R
n
+
1
θ
=
[
θ
0
θ
1
θ
2
θ
3
θ
4
]
∈
R
n
+
1
x=\left[ \begin{matrix} x_0 \\ x_1 \\ x_2 \\ x_3\\x_4 \end{matrix} \right] ∈R^{n+1}\\ θ=\left[ \begin{matrix} θ_0 \\ θ_1 \\ θ_2 \\ θ_3\\θ_4 \end{matrix} \right] ∈R^{n+1}
x=???????x0?x1?x2?x3?x4?????????∈Rn+1θ=???????θ0?θ1?θ2?θ3?θ4?????????∈Rn+1
有了上面這兩個矩陣,我們假設的函式就可以用矩陣進行表示了,如下:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 = θ T x h_θ(x)=θ_0x_0+θ_1x_1+θ_2x_2+θ_3x_3+θ_4x_4=θ^{T}x hθ?(x)=θ0?x0?+θ1?x1?+θ2?x2?+θ3?x3?+θ4?x4?=θTx
現在,我們來看看多元梯度下降演算法的運作形式:
首先,我們把引數看成 n + 1 n+1 n+1維向量,則代價函式 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 J(θ)=\frac{1}{2m}\sum^m_{i=1}(h_θ(x^{(i)})-y^{(i)})^2 J(θ)=2m1?∑i=1m?(hθ?(x(i))?y(i))2
然后重復以下這行演算法,直到收斂于區域最優解:
θ j : = θ j ? α ? ? θ j J ( θ ) ( f o r j = 0 , . . . , n ) θ_j:=θ_j-α\frac{?}{?θ_j}J(θ) \quad(for\ j=0,...,n) θj?:=θj??α?θj???J(θ)(for j=0,...,n)
這里的導數項 α ? ? θ j J ( θ ) = α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) α\frac{?}{?θ_j}J(θ)=α\frac{1}{m}\sum^m_{i=1}(h_θ(x^{(i)})-y^{(i)})x^{(i)}_j α?θj???J(θ)=αm1?∑i=1m?(hθ?(x(i))?y(i))xj(i)?,因此變成:
θ j : = θ j ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) ( f o r j = 0 , . . . , n ) θ_j:=θ_j-α\frac{1}{m}\sum^m_{i=1}(h_θ(x^{(i)})-y^{(i)})x^{(i)}_j\quad(for \ j=0,...,n) θj?:=θj??αm1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?(for j=0,...,n)
梯度下降運算(特征放縮法)
但一個問題含有多個特征值,如果能保證不同特征的取值在相近的范圍內,梯度下降法就能更快地收斂,還是以上面的例題為例, x 1 x_1 x1?表示面積,取值在02000平方英尺**之間,$x_2$表示房間數,**取值在05之間,現在特征值間的差距還是很大的,我們要盡量將特征值的范圍約束在 [ ? 1 , 1 ] [-1,1] [?1,1]的范圍內,只需進行如下標準化在操作:
x ′ = x ? x  ̄ σ x'=\frac{x-\overline{x}}{σ} x′=σx?x?
x  ̄ \overline{x} x是平均值, σ σ σ是標準差,
多元梯度下降學習率的選擇
對于學習率的選擇,我們可以先在梯度下降演算法運行時繪制出代價函式 J ( θ ) J(θ) J(θ)和迭代次數的圖來評估演算法的運行是否正常,若演算法運行正常,則影像呈現出來的是在每一步迭代之后 J ( θ ) J(θ) J(θ)都在下降,最終趨于穩定,也就是梯度下降演算法已經收斂,如下圖:

如果學習率過大,會出現下圖代價函式不收斂反而發散的情況,這時候需要減小學習率

其實只要學習率足夠小,那么每次迭代之后代價函式 J ( θ ) J(θ) J(θ)都會下降,所以如果出現的曲線不是下降的,一般都認為是學習率過大,但學習率過小,收斂速率會很低,
所以在演算法運行時,我們會嘗試不同的學習率,比如 0.001 , 0.01 , 0.1 , 1 , . . . 0.001,0.01,0.1,1,... 0.001,0.01,0.1,1,...然后對于這些不同的 α α α值繪制 J ( θ ) J(θ) J(θ)隨迭代步數變化的曲線,然后選擇使得 J ( θ ) J(θ) J(θ)快速下降的一個 α α α值,
多項式回歸
有時候,我們要擬合的不是簡單的直線,也可能是曲線,這時候就要選擇多項式模型進行擬合,如下圖表示房價與面積的關系,我們根據散點圖的特征可選擇一個三次函式去進行擬合,如 θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 θ_0+θ_1x+θ_2x^2+θ_3x^3 θ0?+θ1?x+θ2?x2+θ3?x3,大致如圖中紅線所示,這里只是舉個例子,還有很多其他多項式擬合模型也是適用的:

好了,現在擬合模型有了,接下來要做的就是將模型與我們的資料進行擬合,按照之前線性擬合的假設形式,我們可以寫成:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_θ(x)=θ_0+θ_1x_1+θ_2x_2+θ_3x_3 hθ?(x)=θ0?+θ1?x1?+θ2?x2?+θ3?x3?
= θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) 2 + θ 3 ( s i z e ) 3 =θ_0+θ_1(size)+θ_2(size)^2+θ_3(size)^3 =θ0?+θ1?(size)+θ2?(size)2+θ3?(size)3
特征值設定為:
x
1
=
(
s
i
z
e
)
x
1
∈
[
1
,
1
0
3
]
x_1=(size) \quad x_1∈[1,10^3]
x1?=(size)x1?∈[1,103]
x
2
=
(
s
i
z
e
)
2
x
2
∈
[
1
,
1
0
6
]
x_2=(size)^2 \quad x_2∈[1,10^6]
x2?=(size)2x2?∈[1,106]
x
3
=
(
s
i
z
e
)
3
x
3
∈
[
1
,
1
0
9
]
x_3=(size)^3 \quad x_3∈[1,10^9]
x3?=(size)3x3?∈[1,109]
通過上面一些簡單的改變,我們就可以把多項式回歸轉換為了我們熟悉的線性回歸,進行特征值放縮后再用梯度下降演算法求解即可,
多元梯度下降代碼
import numpy as np
from numpy import genfromtxt
import pandas as pd
import matplotlib.pyplot as plt
#讀取資料(用的是例題資料)
data = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\room.csv')

#特征值放縮
data = (data - data.mean()) / data.std()
# 增加一列1
data.insert(0, 'Ones', 1)

#資料處理
x_data = np.array(data.iloc[:, 0:-1]) #取不包含最后一列的所有資料,并轉化為陣列,不然不能進行下面的運算
y_data = np.array(data.iloc[:,-1]).reshape(4,1) #取最后一列資料
theta = np.array([0,0,0,0,0]).reshape(5,1) #θ引數初始化為0
#引數設定
alpha = 0.003#學習率
iternum = 1000 #最大迭代次數
m = 4 #樣本數
#代價函式
def cost_function(theta,x_data,y_data):
inner = np.power((dot(x_data , theta) - y_data),2)#這里看成矩陣運算
return np.sum(inner) / (2 * m) #對陣列求和除以2和樣本數就是代價函式
#代價函式的偏導
def gradient_function(theta,x_data,y_data,m):
return (1/m) * dot(x_data.transpose(), (dot(x_data , theta) - y_data))#這是對代價函式求偏導后的結果
#核心演算法,梯度下降
def gradient_desent(x_data, y_data, theta, alpha, m):
gradient = gradient_function(theta,x_data,y_data ,m)
cost = np.zeros(iternum)#保存下來用于繪制學習曲線
i = 0
while not all(abs(gradient) <= 0.0001): #若偏導小于0.0001,這時相當于0,也就是正切為零,找到區域最優解
if(i >=iternum): #到達最大迭代次數,也終止迭代
break
theta = theta - alpha * gradient #更新引數的值
cost[i] = cost_function(theta,x_data,y_data) #記錄每次迭代后最小化代價函式的值
i = i+1 #記錄迭代次數
gradient = gradient_function(theta,x_data,y_data ,m) #更新偏導
return theta,cost
theta_end1,cost = gradient_desent(x_data, y_data, theta, alpha, m)#呼叫函式,求解引數
#畫出代價函式與迭代次數的學習曲線,看看梯度下降是否正常運行,選擇合適的學習率
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iternum), cost, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()

正規方程
正規方程也叫最小二乘法,其實就是通過求導來確定代價函式的極小值,
我們假設一個代價函式 J ( θ ) = a θ 2 + b θ + c J(θ)=aθ^2+bθ+c J(θ)=aθ2+bθ+c,函式影像如下圖:

我們只需要對代價函式求導并令其等于0,就能解出使得 J ( θ ) J(θ) J(θ)取最小值的 θ θ θ值
同樣的,當 θ θ θ是一個 n + 1 n+1 n+1維的引數向量時,對所有引數逐一求導即可:
J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 J(θ_0,θ_1,...,θ_n)=\frac{1}{2m}\sum^m_{i=1}(h_θ(x^{(i)})-y^{(i)})^2 J(θ0?,θ1?,...,θn?)=2m1?i=1∑m?(hθ?(x(i))?y(i))2
? ? θ j J ( θ ) = . . . = 0 ( 對 所 有 參 數 逐 一 求 導 ) \frac{?}{?θ_j}J(θ)=...=0\qquad(對所有引數逐一求導) ?θj???J(θ)=...=0(對所有參數逐一求導)
求 解 出 對 應 的 θ 0 , θ 1 , . . . , θ n 求解出對應的θ_0,θ_1,...,θ_n 求解出對應的θ0?,θ1?,...,θn?
但如果引數太多,這樣遍歷求解會很耗費時間,下面再看看其他方法,還是用上面的例子做引入
| 面積(平方英尺) | 房間數 | 層數 | 住房年齡(年) | 價格($1000) |
|---|---|---|---|---|
| x 1 x_1 x1? | x 2 x_2 x2? | x 3 x_3 x3? | x 4 x_4 x4? | y y y |
| 2104 | 5 | 1 | 45 | 460 |
| 1416 | 3 | 2 | 40 | 232 |
| 1534 | 3 | 2 | 30 | 315 |
| 852 | 2 | 1 | 36 | 178 |
現在我們在資料集中額外加入 x 0 x_0 x0?,并令其等于1
| 面積(平方英尺) | 房間數 | 層數 | 住房年齡(年) | 價格($1000) | |
|---|---|---|---|---|---|
| x 0 x_0 x0? | x 1 x_1 x1? | x 2 x_2 x2? | x 3 x_3 x3? | x 4 x_4 x4? | y y y |
| 1 | 2104 | 5 | 1 | 45 | 460 |
| 1 | 1416 | 3 | 2 | 40 | 232 |
| 1 | 1534 | 3 | 2 | 30 | 315 |
| 1 | 852 | 2 | 1 | 36 | 178 |
現在我們構建一個m×(n+1)的矩陣
X
X
X,和一個m維向量
y
y
y:
X
=
[
1
2104
5
1
45
1
1416
3
2
40
1
1534
3
2
30
1
852
2
1
36
]
y
=
[
460
232
315
178
]
X=\left[ \begin{matrix} 1&2104&5&1&45 \\ 1&1416&3&2&40 \\ 1&1534&3&2&30 \\ 1&852&2&1&36 \end{matrix} \right]\\ y=\left[ \begin{matrix} 460 \\ 232 \\ 315 \\ 178 \end{matrix} \right]
X=?????1111?210414161534852?5332?1221?45403036??????y=?????460232315178??????
因此有
Y = X θ Y=Xθ Y=Xθ
但 X X X不是方陣,沒有逆矩陣,不能直接求 θ θ θ,所以我們可以兩邊同時左乘 X T X^{T} XT,變成:
X T Y = X T X θ X^{T}Y=X^{T}Xθ XTY=XTXθ
現在 X T X X^{T}X XTX是方陣了,也是可逆的,那么就可以求得 θ θ θ
θ = ( X T X ) ? 1 X T Y θ=(X^{T}X)^{-1}X^{T}Y θ=(XTX)?1XTY
正規方程代碼
資料的前期處理和梯度下降一樣,這里就不重復寫了
#正規方程
def normalEqn(x_data,y_data):
#核心演算法
theta = np.linalg.inv(np.transpose(x_data)@x_data)@np.transpose(x_data)@y_data
return theta
final_end2 = normalEqn(x_data, y_data)
梯度下降與正規方程的選擇
假設有m個訓練樣本和n個特征值
| 梯度下降 | 正規方程 | |
|---|---|---|
| 缺點 | 需要選擇學習率、需要多次迭代 | 若n很大,高維矩陣求逆會花費大量時間 |
所以當n較小時(例如以10000為界限),可選擇正規方程,較大時可選擇梯度下降
參考資料:
吳恩達機器學習系列課程
機器學習筆記
機器學習之多元線性回歸模型梯度下降法的python實作
梯度下降演算法原理講解——機器學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416159.html
標籤:AI
