axit matlab,吳恩達機器學習課程筆記——第二周

1. 多變量線性回歸(Linear Regression with Multiple Variables)

也稱為多元線性回歸,一元就是一個變量,多元就是多個變量,在這里也可以叫做多個特征

1.1 多維特征(Multiple Features)

之前,我們討論過單變量/特征的回歸模型,但是單變量並不足以精確地預測房價,因此,我們需要對房價模型增加更多的特征,例如房間數樓層等,構成一個含有多個變量的模型。

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUE0JTlBJUU3JTg5JUI5JUU1JUJFJTgxJUU2JTk1JUIwJUU2JThEJUFFLnBuZw==

現在需要引入新的注釋來建立和解釋新的模型↓

符號

意義

i

特征矩陣中的第 i 行

j

特征矩陣中第 i 行的第 j 個特征

m

訓練樣本的數量

n

特征的數量

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JTk2JUIwJUU2JUE4JUExJUU1JTlFJThCJUU3JTlBJTg0JUU2JUIzJUE4JUU5JTg3JThBMS5wbmc=

在我們引入了新的特征之后,原來的那一條公式失去了作用,取而代之的是一條新的公式

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUE0JTlBJUU3JTg5JUI5JUU1JUJFJTgxJUU1JTg1JUFDJUU1JUJDJThGLnBuZw==

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUE0JTlBJUU1JTg1JTgzJUU3JUJBJUJGJUU2JTgwJUE3JUU1JTlCJTlFJUU1JUJEJTkyJUU1JTg1JUFDJUU1JUJDJThGJUU4JUExJUE4JUU4JUJFJUJFMi5wbmc=

多變量線性回歸方程:

hθ(x)=θ0+θ1x1+θ2x2+...+θnxn

2. 多變量梯度下降(Gradient Descent for Multiple Variables)

2.1 代價函數

J(θ0,θ1...θn)=12m∑i=1m(hθ(x(i))−y(i))2

2.2 批量梯度下降算法

原公式:

θj:=θj−α∂∂θjJ(θ0,θ1)

經過修改,得到現在的公式:

θj:=θj−α∂∂θjJ(θ0,θ1...θn)

代入多變量回歸公式,得:

θj:=θj−α∂∂θj12m∑i=1m(hθ(x(i))−y(i))2

求導后得到批量梯度下降算法:

θj:=θj−α1m∑i=1m((hθ(x(i))−y(i))x(i)j

2.3 梯度下降法實踐 1-特征縮放(Feature Scaling)

在我們面對多維特征問題的時候,我們要保證這些特征都具有相近的尺度,這將幫助梯度下降算法更快地收斂。

在以下圖像中,我們就可以發現,圖片非常地橢圓,這種橢圓使得我們在梯度下降的時候需要非常多次的迭代才能收斂。

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU4JUJGJUFEJUU0JUJCJUEzJUU1JTlCJUJFJUU1JTgzJThGLnBuZw==

因此我們需要特征縮放去解決這個問題,它將所有的特征尺度都盡量==縮放到-1到1之間==,太大或者太小都不好,如下圖

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU3JTg5JUI5JUU1JUJFJTgxJUU3JUJDJUE5JUU2JTk0JUJFLnBuZw==

2.3.1 特征均值歸一化(mean normalization):

xi=xi−μisi

符號

含義

計算方法

python(matlab)函數

參數解釋

x_i

特征

μ_i

平均值

同一個x_n相加求再除以同一個x_n的數量

python:mean(x,axis=0) matlab:mean(x)

x:數據集,axit:軸,為0計算每一列,為1計算每一行

s_i

標准差

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUEwJTg3JUU1JTg3JTg2JUU1JUI3JUFFJUU1JTg1JUFDJUU1JUJDJThGLnBuZw==,也可以簡單的使用最大值減去最小值

std(x)

方法同上

2.4 梯度下降法實踐 2-設置梯度下降法迭代次數(Debugging)

代價函數會隨着迭代次數的下降而收斂,不同的迭代算法需要不同的迭代次數,有的可能需要30次,而有的可能則需要300萬次

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUEyJUFGJUU1JUJBJUE2JUU0JUI4JThCJUU5JTk5JThEJUU2JUIzJTk1JUU4JUJGJUFEJUU0JUJCJUEzJUU2JUFDJUExJUU2JTk1JUIwLnBuZw==

我們要判斷代價函數是否收斂有兩個方法

1. 看代價函數的曲線變化

2. 自動收斂測試

當下降幅度少於一個θ值的時候(θ值自己取),則可以看作代價函數收斂

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU4JTg3JUFBJUU1JThBJUE4JUU2JTk0JUI2JUU2JTk1JTlCJUU2JUI1JThCJUU4JUFGJTk1LnBuZw==

但是一般而言,θ值是比較難確定的,最好還是自己通過圖像去判斷是否達到了收斂的程度

2.5 梯度下降法實踐 3-學習率(Learning Rate)

2.5.1 學習率α過大

通常,隨着迭代次數的增加,代價函數應該是逐步下降的,但是當你看到代價函數的值增加的時候,很可能學習率過大所導致的,學習率過大使得函數錯過了最低點

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUFEJUE2JUU0JUI5JUEwJUU3JThFJTg3JUU4JUJGJTg3JUU1JUE0JUE3JUU1JTlCJUJFJUU3JUE0JUJBMS5wbmc=

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUFEJUE2JUU0JUI5JUEwJUU3JThFJTg3JUU4JUJGJTg3JUU1JUE0JUE3JUU1JTlCJUJFJUU3JUE0JUJBMi5wbmc=

2.5.2 學習率α過小

學習率過大會有問題,那么過小了,也會造成問題,如下圖的藍色畫筆所畫,當學習率過小,學習速度就會很慢,需要更多的迭代次數才能迭代到最低點

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUFEJUE2JUU0JUI5JUEwJUU3JThFJTg3JUU4JUJGJTg3JUU1JUIwJThGJUU1JTlCJUJFJUU3JUE0JUJBLnBuZw==

2.5.3 如何選取學習率

在選取學習率的時候,我們通常都需要設置多個學習率進行測試,學習率之間的倍數通常是3倍和10倍,通過測試,我們就可以找到最好的那一個學習率

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUFEJUE2JUU0JUI5JUEwJUU3JThFJTg3JUU5JTgwJTg5JUU1JThGJTk2LnBuZw==

3. 特征與多項式回歸(Features and Polynomial Regression)

首先我們來舉一個例子:房價預測

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JTg4JUJGJUU0JUJCJUI3JUU5JUEyJTg0JUU2JUI1JThCLnBuZw==

符號

含義

x1

frontage(臨街寬度)

x2

depth(縱向寬度)

x

area(面積)

由此,我們可以建立一個初步的模型

hθ(x)=θ0+θ1x

但是這個線性回歸並不能很好的擬合我們的數據,因此我們需要一些改變(曲線)更好地擬合數據,比如一個二次方模型

hθ(x)=θ0+θ1x+θ2x2

如下圖

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU0JUJBJThDJUU2JUFDJUExJUU2JTk2JUI5JUU2JUE4JUExJUU1JTlFJThCLnBuZw==

但是我們發現,二次方模型依然不能很好地擬合數據,因為它會隨着Size的增加而下降,房價可不會因為房子面積的增加而下降,因此,我們需要一個三次方模型:

hθ(x)=θ0+θ1x+θ2x2+θ3x3

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU0JUI4JTg5JUU2JUFDJUExJUU2JTk2JUI5JUU2JUE4JUExJUU1JTlFJThCLnBuZw==

這樣子,就可以比較好地擬合我們的數據

接下來,我們通過以下方法,將多項式回歸轉變為多元線性回歸方程

hθ(x)=θ0+θ1(size)+θ2(size)2+θ3(size)3

x1=(size)

x2=(size)2

x3=(size)3

=θ0+θ1x1+θ2x2+θ3x3

這樣子,就可以得到我們的多元線性回歸方程

hθ(x)=θ0+θ1x1+θ2x2+θ3x3

由此我們就可以得到3個特征,在讀者看來,這可能是更好地標記特征,size和size的平方不是同一樣東西

接下來還沒完,我們發現特征與特征之間相差非常大

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU3JTg5JUI5JUU1JUJFJTgxJUU1JUI3JUFFJUU1JUJDJTgyLnBuZw==

這就可能出現之前說過的迭代問題,因此,我們需要對特征進行縮放,從而使得方程能得到更好更快地迭代

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU3JTg5JUI5JUU1JUJFJTgxJUU3JUJDJUE5JUU2JTk0JUJFLnBuZw==

當然,條條大路通羅馬,除了三次方模型外,我們還可以采用其他模型使得曲線更加擬合數據,比如平方根模型(紫色線)

hθ(x)=θ0+θ1(size)+θ2(size)−−−−−√

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUI5JUIzJUU2JTk2JUI5JUU2JUEwJUI5JUU2JUE4JUExJUU1JTlFJThCLnBuZw==

因此,我們需要深入了解數據和數據的本質,從而才能找到更好的模型去擬合數據

4. 正規方程(Normal Equation)

到目前為止,我們都在使用梯度下降算法求解最小值

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUEyJUFGJUU1JUJBJUE2JUU0JUI4JThCJUU5JTk5JThEJUU2JUIxJTgyJUU4JUE3JUEzJUU0JUJCJUEzJUU0JUJCJUI3JUU1JTg3JUJEJUU2JTk1JUIwJUU2JTlDJTgwJUU1JUIwJThGJUU1JTgwJUJDLnBuZw==

但在某些問題上,用正規方程可以更快求解出最優值,通過正規方程可以一次性求到這一個值,那么什么是正規方程呢?

就拿上圖的J(θ)函數來說,要求最優解,根據我們學過的微積分知識,對它進行一個直接求導就可以

∂∂θjJ(θ)=0

回到之前說的平方代價函數,對於這么一個函數,我們需要對它每一個變量都進行求偏導,得出每一個θ的值

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU1JUE0JTlBJUU3JTg5JUI5JUU1JUJFJTgxJUU2JUIxJTgyJUU1JUFGJUJDLnBuZw==

因此,我們選擇使用線性代數的方法進行批量求導,使用以下正規方程就能解出向量θ

θ=(XTX)−1XTy

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCJUU3JUFDJUE2JUU1JThGJUI3JUU4JUE3JUEzJUU5JTg3JThBLnBuZw==

完整推導過程:

先來理解一下這個方程

首先,假設樣本數為m,每個樣本的期望值與實際值y相等

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCJUU1JTgxJTg3JUU4JUFFJUJFJUU1JTg3JUJEJUU2JTk1JUIwLnBuZw==

轉化成向量表達的形式

Y=X∗θ

注:*符號是矩陣叉乘的意思

由於X不一定是方陣,所以X乘上X的逆不一定等於E(單位矩陣,就是對角線是1,其他為0的矩陣,單位矩陣肯定是一個方陣),因此X需要先乘上X的轉置,使它變成一個方陣,由於一個方陣的逆乘一個方陣等於I(單位矩陣),所以就消去了,最后得到結果:

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCLnBuZw==

下面用數據來舉一個例子

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCJUU0JUI4JUJFJUU0JUJFJThCLnBuZw==

得到以下兩個矩陣

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCJUU3JTlGJUE5JUU5JTk4JUI1LnBuZw==

運用正規方程方法求解,得

aHR0cDovL29wcHRwMmp4Ny5ia3QuY2xvdWRkbi5jb20vJUU2JUFEJUEzJUU4JUE3JTg0JUU2JTk2JUI5JUU3JUE4JThCJUU2JUIxJTgyJUU4JUE3JUEzJUU4JUJGJTg3JUU3JUE4JThCLnBuZw==

梯度下降與正規方程的比較:

梯度下降

正規方程

需要選擇學習率 α

不需要

需要多次迭代

不需要迭代

當特征數量 n 大時也能較好適用

如果特征數量 n 較大則運算代價大,因為矩陣逆的計算時間復雜度為 O(n3),通常 來說當 n 小於 10000 時還是可以接受的

適用於各種類型的模型

只適用於線性模型,不適合邏輯回歸模型等其他模型

總結一下,只要特征變量的數目並不大,正規方程是一個很好的計算參數 θ 的替代方法。具體地說,只要特征變量數量小於一萬,我們通常使用標准方程法,而不使用梯度下降法。隨着我們要講的學習算法越來越復雜,例如,當我們講到分類算法,像邏輯回歸算法,我們會看到,實際上對於那些算法,並不能使用正規方程方法。

4.1 設計矩陣(design matrix)

統計學和機器學習中,設計矩陣是一組觀測結果中的所有解釋變量的值構成的矩陣,常用X表示。設計矩陣常用於一些統計模型,如一般線性模型,方差分析中。

4.2 矩陣X’X是奇異矩陣

原因有兩個:

1. 有兩個成一定比例的特征值,使得矩陣不可逆

2. 當訓練樣本比參數少很多的時候,可能會導致矩陣結果不可逆

解決方案:

1. 查看特征里面是否有些重復或者多余的特征,比如呈線性相關的特征,刪除重復兩個重復特征中的其中一個

2. 看特征值中是否有多余的特征,直到刪到不再多余為止,如果實在太多,需要考慮使用正則化方法

如果矩陣 XTX 是不可逆的,(通常來說,不會出現這種情況),如果在 Octave 里,可以用偽逆函數pinv()來實現。這種使用不同的線性代數庫的方法被稱為偽逆。即使X’X的結果是不可逆的,但算法執行的流程是正確的。總之,出現不可逆矩陣的情況極少發生,所以 在大多數實現線性回歸中,出現不可逆的問題不應該過的關注 XTX 是不可逆的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值