吳恩達機器學習:線性回歸

吳恩達機器學習:線性回歸

來自專欄機器學習筆記3 人贊了文章

首先說一些關於課程的題外話。對於 Ng 的這個課程,筆者沒有選擇在 Coursera 上學習課程,一來是因為 Coursera 有自己的課程周期,但這個周期不一定適合所有人。其次 Coursera 的課程作業是使用 Octave 語言,而筆者個人覺得不管是學習還是未來使用 Python 都會是更合適的語言。所以最筆者選擇了 課程視頻 + Python 實現作業 的形式。

點擊 課程視頻 你就能不間斷地學習 Ng 的課程,關於課程作業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 無法訪問 Github 的話可以點擊 Coding 查看 ),代碼中的錯誤和改進歡迎大家指出。

以下是 Ng 機器學習課程第一周的筆記。

機器學習

什麼是機器學習?Arthur Samuel 給出的一個非正式定義是:不通過明確地編程,使計算機擁有通過學習解決問題的能力。

機器學習的演算法包括 監督學習無監督學習強化學習推薦系統等。我們第一周學習的 線性回歸 屬於 監督學習

回歸問題

學習的目的是為了解決問題。回歸問題是非常常見的一類問題,目的是為了找尋變數之間的關係。比如要從數據中找尋房屋面積與價格的關係,年齡與身高的關係,氣體壓力和體積的關係等等。而機器學習要做的正是要讓機器自己來學習這些關係,並為對未知的情況做出預測。

監督學習的工作方式

首先要有一個訓練數據集( Training Set ),其中包含數據對應問題的正確結果。通過我們的學習演算法 ( Learning Algorithm ) 學習訓練數據集,最終獲得一個函數 ( Hypothesis ),這個函數就是我們需要的 預測函數,能夠對 訓練集的數據 與 其它數據輸入 做出比較準確的預測。

對於 線性回歸,我們的 Hypothesis 就是:

h_	heta(x)=	heta_0+	heta_1x_1+	heta_2x_2+dots+	heta_nx_n=	heta^Tx

其中的 	heta_i 就是學習演算法需要學習的參數,而 x_i 是我們對於問題所選取的特徵。

代價函數

那麼如何學習 預測函數 中的 	heta_i 呢?我們需要引入 代價函數 的概念,它的作用是評估真實與預測值之間的差異。一旦有了這個函數,學習演算法的目標就是找到 	heta_i 使得這個函數的值儘可能的小。對於 線性回歸,我們使用的 代價函數 是:

J(	heta)=frac{1}{2m}sumlimits_{i=1}^{m}(h_	heta(x^{(i)})-y^{(i)})^2

其中 m 是樣本數, y 是訓練數據集已知答案,上標 i 表示第幾組訓練數據,代價函數 J(	heta) 是關於 	heta 的函數。當然為了是表達更簡潔、編寫的程序更加清晰,我們通常會使用它的矩陣表達:

J(	heta)=frac{1}{2m}(X	heta-y)^T(X	heta-y)

式中 X 為所有訓練特徵數據組成的矩陣, y 為訓練數據集已知答案的列向量:

X= egin {bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & cdots & x_n^{(1)} \ 1 & x_1^{(2)} & x_2^{(2)} & cdots & x_n^{(2)} \ vdots & vdots& vdots & ddots & vdots \ 1 & x_1^{(m)} & x_2^{(m)} & cdots & x_n^{(m)} end {bmatrix}       y=egin{bmatrix} y^{(1)} \ y^{(2)} \ vdots \ y^{(m)} \ end{bmatrix}

最後為了承上啟下,我們來看看當特徵只有一個的時候,代價函數 J(	heta) 的樣子。

右圖是 J(	heta) 的等高圖,每一條線表示 代價函數 的值相同,紅 X 表示 代價函數 的最低點。

梯度下降演算法

接著剛剛看的單個特徵所對應的 代價函數 圖像加上之前所說的 「學習演算法的目標就是找到 	heta_i 使得 代價函數 儘可能的小」 。一個很直觀的想法就是,在坡上任意取一點,然後沿著下坡方向走最後到達最低點。這也正是梯度下降演算法的思路,我們沿著梯度的反向更新 	heta_i 的值( 沿著最陡的方向下坡 ),直到 代價函數 收斂到最小值。梯度下降演算法更新 	heta_i 的方式為:

	heta_i := 	heta_i-alphafrac{partial}{partial	heta_i}J(	heta)

其中 alpha 為學習率, := 表示使用右式的值替換 	heta_i 原有的值。對於 線性回歸,我們更新 	heta_i 的方式為:

	heta := 	heta - alphafrac{1}{m}X^T(X	heta-y)

到這裡我們就能夠完成整個 線性回歸 的機器學習演算法了。設定 	heta_i 的初始值,使用梯度下降演算法迭代更新 	heta_i 的值,直到 J(	heta) 收斂。至於為什使用梯度的反向可以看 這篇文章,作者從數學角度解釋了原因。

正規方程

對於 線性回歸,我們完全可以使用數學方法來得到 J(	heta) 取最小值時 	heta_i 的值。這涉及一些導數和線性代數的知識,有興趣的同學可以詳細看課程視頻中的推導過程。這裡直接給出求解 	heta 的公式:

	heta=(X^TX)^{-1}X^Ty

在使用時 正規方程 有一定的限制,比如 X^TX 矩陣需要是可逆的。那麼有了直接求解問題的方法,為什麼我們還需要梯度下降的概念呢?因為梯度下降方法更具有廣泛性,可以用於很多 問題的求解,比如非線性的 代價函數

特徵標準化

在實際的運用中我們選取的特徵,比如長度,重量,面積等等,通常單位和範圍都不同,這會導致梯度下降演算法變慢。所以我們要將特徵縮放到相對統一的範圍內。通常的方法有 StandardizationNormalizationStandardization 是把數據變成符合標準正態分布,即使原來是些奇奇怪怪的分布,由 中心極限定理 可知,數據量夠大,一樣變成正態,更新公式為:

x_i := frac{x_i-mu}{delta}

Normalization 對於梯度下降演算法友好,可能可以讓演算法最終收斂並且提高訓練速度和精度,更新公式為:

x_i := frac{x_i-min(x_i)}{max(x_i)-min(x_i)}

多項式回歸

有時候線性的 Hypothesis 不一定合適我們需要擬合的數據,我們會選擇多項式擬合例如:

h_	heta(x)=	heta_0+	heta_1x_1+	heta_2x_2+	heta_3x_1x_2+	heta_4x_1^2+	heta_5x_2^2

這時候我們可以將它轉化為 線性回歸 問題,只要令新的特徵 x_3=x_1x_2x_4=x_1^2x_5=x_2^2 就可以了。

So~,第一周的內容就是這些了,謝謝大家耐心閱讀。


推薦閱讀:

如何用excel快速求線性回歸方程?
spass線性回歸
excel線性回歸實例介紹
線性回歸原理和實現基本認識
超詳細SPSS操作:多重線性回歸(完整版)

TAG:機器學習 | 線性回歸 |