1. 多變量線性回歸(Linear Regression with Multiple Variables)
也稱為多元線性回歸,一元就是一個變量,多元就是多個變量,在這里也可以叫做多個特征
1.1 多維特征(Multiple Features)
之前,我們討論過單變量/特征的回歸模型,但是單變量並不足以精確地預測房價,因此,我們需要對房價模型增加更多的特征,例如房間數樓層等,構成一個含有多個變量的模型。
現在需要引入新的注釋來建立和解釋新的模型↓
符號
意義
i
特征矩陣中的第 i 行
j
特征矩陣中第 i 行的第 j 個特征
m
訓練樣本的數量
n
特征的數量
在我們引入了新的特征之后,原來的那一條公式失去了作用,取而代之的是一條新的公式
多變量線性回歸方程:
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)
在我們面對多維特征問題的時候,我們要保證這些特征都具有相近的尺度,這將幫助梯度下降算法更快地收斂。
在以下圖像中,我們就可以發現,圖片非常地橢圓,這種橢圓使得我們在梯度下降的時候需要非常多次的迭代才能收斂。
因此我們需要特征縮放去解決這個問題,它將所有的特征尺度都盡量==縮放到-1到1之間==,太大或者太小都不好,如下圖
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
標准差
,也可以簡單的使用最大值減去最小值
std(x)
方法同上
2.4 梯度下降法實踐 2-設置梯度下降法迭代次數(Debugging)
代價函數會隨着迭代次數的下降而收斂,不同的迭代算法需要不同的迭代次數,有的可能需要30次,而有的可能則需要300萬次
我們要判斷代價函數是否收斂有兩個方法
1. 看代價函數的曲線變化
2. 自動收斂測試
當下降幅度少於一個θ值的時候(θ值自己取),則可以看作代價函數收斂
但是一般而言,θ值是比較難確定的,最好還是自己通過圖像去判斷是否達到了收斂的程度
2.5 梯度下降法實踐 3-學習率(Learning Rate)
2.5.1 學習率α過大
通常,隨着迭代次數的增加,代價函數應該是逐步下降的,但是當你看到代價函數的值增加的時候,很可能學習率過大所導致的,學習率過大使得函數錯過了最低點
2.5.2 學習率α過小
學習率過大會有問題,那么過小了,也會造成問題,如下圖的藍色畫筆所畫,當學習率過小,學習速度就會很慢,需要更多的迭代次數才能迭代到最低點
2.5.3 如何選取學習率
在選取學習率的時候,我們通常都需要設置多個學習率進行測試,學習率之間的倍數通常是3倍和10倍,通過測試,我們就可以找到最好的那一個學習率
3. 特征與多項式回歸(Features and Polynomial Regression)
首先我們來舉一個例子:房價預測
符號
含義
x1
frontage(臨街寬度)
x2
depth(縱向寬度)
x
area(面積)
由此,我們可以建立一個初步的模型
hθ(x)=θ0+θ1x
但是這個線性回歸並不能很好的擬合我們的數據,因此我們需要一些改變(曲線)更好地擬合數據,比如一個二次方模型
hθ(x)=θ0+θ1x+θ2x2
如下圖
但是我們發現,二次方模型依然不能很好地擬合數據,因為它會隨着Size的增加而下降,房價可不會因為房子面積的增加而下降,因此,我們需要一個三次方模型:
hθ(x)=θ0+θ1x+θ2x2+θ3x3
這樣子,就可以比較好地擬合我們的數據
接下來,我們通過以下方法,將多項式回歸轉變為多元線性回歸方程
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的平方不是同一樣東西
接下來還沒完,我們發現特征與特征之間相差非常大
這就可能出現之前說過的迭代問題,因此,我們需要對特征進行縮放,從而使得方程能得到更好更快地迭代
當然,條條大路通羅馬,除了三次方模型外,我們還可以采用其他模型使得曲線更加擬合數據,比如平方根模型(紫色線)
hθ(x)=θ0+θ1(size)+θ2(size)−−−−−√
因此,我們需要深入了解數據和數據的本質,從而才能找到更好的模型去擬合數據
4. 正規方程(Normal Equation)
到目前為止,我們都在使用梯度下降算法求解最小值
但在某些問題上,用正規方程可以更快求解出最優值,通過正規方程可以一次性求到這一個值,那么什么是正規方程呢?
就拿上圖的J(θ)函數來說,要求最優解,根據我們學過的微積分知識,對它進行一個直接求導就可以
∂∂θjJ(θ)=0
回到之前說的平方代價函數,對於這么一個函數,我們需要對它每一個變量都進行求偏導,得出每一個θ的值
因此,我們選擇使用線性代數的方法進行批量求導,使用以下正規方程就能解出向量θ
θ=(XTX)−1XTy
完整推導過程:
先來理解一下這個方程
首先,假設樣本數為m,每個樣本的期望值與實際值y相等
轉化成向量表達的形式
Y=X∗θ
注:*符號是矩陣叉乘的意思
由於X不一定是方陣,所以X乘上X的逆不一定等於E(單位矩陣,就是對角線是1,其他為0的矩陣,單位矩陣肯定是一個方陣),因此X需要先乘上X的轉置,使它變成一個方陣,由於一個方陣的逆乘一個方陣等於I(單位矩陣),所以就消去了,最后得到結果:
下面用數據來舉一個例子
得到以下兩個矩陣
運用正規方程方法求解,得
梯度下降與正規方程的比較:
梯度下降
正規方程
需要選擇學習率 α
不需要
需要多次迭代
不需要迭代
當特征數量 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 是不可逆的。