1. 多變量線性回歸(Linear Regression with Multiple Variables)
也稱為多元線性回歸,一元就是一個變量,多元就是多個變量,在這里也可以叫做多個特征
1.1 多維特征(Multiple Features)
之前,我們討論過單變量/特征的回歸模型,但是單變量并不足以精確地預測房價,因此,我們需要對房價模型增加更多的特征,例如房間數(shù)樓層等,構成一個含有多個變量的模型。
現(xiàn)在需要引入新的注釋來建立和解釋新的模型↓
符號 | 意義 |
---|---|
i | 特征矩陣中的第 i 行 |
j | 特征矩陣中第 i 行的第 j 個特征 |
m | 訓練樣本的數(shù)量 |
n | 特征的數(shù)量 |
在我們引入了新的特征之后,原來的那一條公式失去了作用,取而代之的是一條新的公式
多變量線性回歸方程:
2. 多變量梯度下降(Gradient Descent for Multiple Variables)
2.1 代價函數(shù)
2.2 批量梯度下降算法
原公式:
經(jīng)過修改,得到現(xiàn)在的公式:
代入多變量回歸公式,得:
求導后得到批量梯度下降算法:
2.3 梯度下降法實踐 1-特征縮放(Feature Scaling)
在我們面對多維特征問題的時候,我們要保證這些特征都具有相近的尺度,這將幫助梯度下降算法更快地收斂。
在以下圖像中,我們就可以發(fā)現(xiàn),圖片非常地橢圓,這種橢圓使得我們在梯度下降的時候需要非常多次的迭代才能收斂。
因此我們需要特征縮放去解決這個問題,它將所有的特征尺度都盡量==縮放到-1到1之間==,太大或者太小都不好,如下圖
2.3.1 特征均值標準化(mean normalization):
符號 | 含義 | 計算方法 | python(matlab)函數(shù) | 參數(shù)解釋 |
---|---|---|---|---|
x_i | 特征 | |||
μ_i | 平均值 | 同一個x_n相加求再除以同一個x_n的數(shù)量 | python:mean(x,axis=0) matlab:mean(x) | x:數(shù)據(jù)集,axit:軸,為0計算每一列,為1計算每一行 |
s_i | 標準差 |
標準差公式
|
std(x) | 方法同上 |
2.4 梯度下降法實踐 2-設置梯度下降法迭代次數(shù)(Debugging)
代價函數(shù)會隨著迭代次數(shù)的下降而收斂,不同的迭代算法需要不同的迭代次數(shù),有的可能需要30次,而有的可能則需要300萬次
我們要判斷代價函數(shù)是否收斂有兩個方法
- 看代價函數(shù)的曲線變化
- 自動收斂測試
當下降幅度少于一個θ值的時候(θ值自己取),則可以看作代價函數(shù)收斂
但是一般而言,θ值是比較難確定的,最好還是自己通過圖像去判斷是否達到了收斂的程度
2.5 梯度下降法實踐 3-學習率(Learning Rate)
2.5.1 學習率α過大
通常,隨著迭代次數(shù)的增加,代價函數(shù)應該是逐步下降的,但是當你看到代價函數(shù)的值增加的時候,很可能學習率過大所導致的,學習率過大使得函數(shù)錯過了最低點
2.5.2 學習率α過小
學習率過大會有問題,那么過小了,也會造成問題,如下圖的藍色畫筆所畫,當學習率過小,學習速度就會很慢,需要更多的迭代次數(shù)才能迭代到最低點
2.5.3 如何選取學習率
在選取學習率的時候,我們通常都需要設置多個學習率進行測試,學習率之間的倍數(shù)通常是3倍和10倍,通過測試,我們就可以找到最好的那一個學習率
3. 特征與多項式回歸(Features and Polynomial Regression)
首先我們來舉一個例子:房價預測
符號 | 含義 |
---|---|
x1 | frontage(臨街寬度) |
x2 | depth(縱向寬度) |
x | area(面積) |
由此,我們可以建立一個初步的模型
但是這個線性回歸并不能很好的擬合我們的數(shù)據(jù),因此我們需要一些改變(曲線)更好地擬合數(shù)據(jù),比如一個二次方模型
如下圖
但是我們發(fā)現(xiàn),二次方模型依然不能很好地擬合數(shù)據(jù),因為它會隨著Size的增加而下降,房價可不會因為房子面積的增加而下降,因此,我們需要一個三次方模型:
這樣子,就可以比較好地擬合我們的數(shù)據(jù)
接下來,我們通過以下方法,將多項式回歸轉變?yōu)槎嘣€性回歸方程
這樣子,就可以得到我們的多元線性回歸方程
由此我們就可以得到3個特征,在讀者看來,這可能是更好地標記特征,size和size的平方不是同一樣東西
接下來還沒完,我們發(fā)現(xiàn)特征與特征之間相差非常大
這就可能出現(xiàn)之前說過的迭代問題,因此,我們需要對特征進行縮放,從而使得方程能得到更好更快地迭代
當然,條條大路通羅馬,除了三次方模型外,我們還可以采用其他模型使得曲線更加擬合數(shù)據(jù),比如平方根模型(紫色線)
因此,我們需要深入了解數(shù)據(jù)和數(shù)據(jù)的本質,從而才能找到更好的模型去擬合數(shù)據(jù)
4. 正規(guī)方程(Normal Equation)
到目前為止,我們都在使用梯度下降算法求解最小值
但在某些問題上,用正規(guī)方程可以更快求解出最優(yōu)值,通過正規(guī)方程可以一次性求到這一個值,那么什么是正規(guī)方程呢?
就拿上圖的J(θ)函數(shù)來說,要求最優(yōu)解,根據(jù)我們學過的微積分知識,對它進行一個直接求導就可以
回到之前說的平方代價函數(shù),對于這么一個函數(shù),我們需要對它每一個變量都進行求偏導,得出每一個θ的值
因此,我們選擇使用線性代數(shù)的方法進行批量求導,使用以下正規(guī)方程就能解出向量θ
完整推導過程:
http://blog.xiangjiang.live/derivations-of-the-normal-equation/
https://zhuanlan.zhihu.com/p/22757336
先來理解一下這個方程
首先,假設樣本數(shù)為m,每個樣本的期望值與實際值y相等
轉化成向量表達的形式
注:*符號是矩陣叉乘的意思
由于X不一定是方陣,所以X乘上X的逆不一定等于E(單位矩陣,就是對角線是1,其他為0的矩陣,單位矩陣肯定是一個方陣),因此X需要先乘上X的轉置,使它變成一個方陣,由于一個方陣的逆乘一個方陣等于I(單位矩陣),所以就消去了,最后得到結果:
下面用數(shù)據(jù)來舉一個例子
得到以下兩個矩陣
運用正規(guī)方程方法求解,得
梯度下降與正規(guī)方程的比較:
梯度下降 | 正規(guī)方程 |
---|---|
需要選擇學習率 α | 不需要 |
需要多次迭代 | 不需要迭代 |
當特征數(shù)量 n 大時也能較好適用 | 如果特征數(shù)量 n 較大則運算代價大,因為矩陣逆的計算時間復雜度為 O(n3),通常 來說當 n 小于 10000 時還是可以接受的 |
適用于各種類型的模型 | 只適用于線性模型,不適合邏輯回歸模型等其他模型 |
總結一下,只要特征變量的數(shù)目并不大,正規(guī)方程是一個很好的計算參數(shù) θ 的替代方法。具體地說,只要特征變量數(shù)量小于一萬,我們通常使用標準方程法,而不使用梯度下降法。隨著我們要講的學習算法越來越復雜,例如,當我們講到分類算法,像邏輯回歸算法,我們會看到,實際上對于那些算法,并不能使用正規(guī)方程方法。
4.1 設計矩陣(design matrix)
統(tǒng)計學和機器學習中,設計矩陣是一組觀測結果中的所有解釋變量的值構成的矩陣,常用X表示。設計矩陣常用于一些統(tǒng)計模型,如一般線性模型,方差分析中。
4.2 矩陣X'X是奇異矩陣
原因有兩個:
- 有兩個成一定比例的特征值,使得矩陣不可逆
- 當訓練樣本比參數(shù)少很多的時候,可能會導致矩陣結果不可逆
解決方案:
- 查看特征里面是否有些重復或者多余的特征,比如呈線性相關的特征,刪除重復兩個重復特征中的其中一個
- 看特征值中是否有多余的特征,直到刪到不再多余為止,如果實在太多,需要考慮使用正則化方法
如果矩陣 X' X是不可逆的,(通常來說,不會出現(xiàn)這種情況),如果在 Octave 里,可以用偽逆函數(shù)pinv()來實現(xiàn)。這種使用不同的線性代數(shù)庫的方法被稱為偽逆。即使X'X的結果是不可逆的,但算法執(zhí)行的流程是正確的。總之,出現(xiàn)不可逆矩陣的情況極少發(fā)生,所以 在大多數(shù)實現(xiàn)線性回歸中,出現(xiàn)不可逆的問題不應該過的關注 X' X 是不可逆的。