1. 程式人生 > >新宇教你機器學習之 Linear Regression (Least Square Regression)

新宇教你機器學習之 Linear Regression (Least Square Regression)

http://blog.sina.com.cn/s/blog_a18c98e50101108a.html

部分資料和內容摘自斯坦福大學Andrew Ng教授的Machine Learning Online Class

監督學習(supervised learning)通常有下列步驟:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

首先通過某種學習演算法訓練已有的資料,得到function hH叫做hypothesis。給定x值,它可以預測對應的y值。舉個例子,x可以是住房的面積,y是房子的價格。當你給h輸入任意一個面積值,他就可以預測出這個房子價值多少錢。

當輸出Y的值是連續性的時候,這個問題叫做regression

當輸出Y的值是離散性的時候,這個問題叫做

classification

上面的例子大致符合線性的關係(房子價格大致和麵積成線性關係)。

Linear Regression就是一種可以解決如上問題的監督學習演算法。

假設有如下資料,x軸是房子面積,y軸是房子價格。假設我們用Least square的方法,實際上就是求一條直線,它可以讓每個點資料到直線距離的平方的和最小。

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果是上面的例子,是一維的(房子面積),那麼H可以寫成:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果房子價格不僅僅依據房子面積,同時也依據房子的房間數,那麼H可以被寫成:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果假設x0等於 1,那麼這個式子就可以寫成:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

H(x)是預測的值,y是真實的值,我們就是要找到一個

Ө,使兩者差的平方最小

寫成公式的話,Cost Function可以定義成:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

我們的目標就是計算出一個Ө值,使J最小。

下列方法可以解決這個問題:

Gradient Descent

這個演算法理解起來很簡單,首先初始化一個Ө值。之後望向四面八方,看那條路可以接近正確的值就向那個方向邁一步。更新Ө值,再重複上面過程,直到J的值不怎麼變化為止。數學表達為:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

當然上述演算法有可能得到的只是local minimum。所以重複幾次上面的過程,用不同的初始值,如果得到相同的結果,那麼就可以認為當前的Ө值可以讓J最小。

Stochastic Gradient Descent (Incremental gradient descent)

前面的方法,需要處理完所有的訓練資料之後才會每次更新一次Ө,如果訓練資料很多的話,就會變得很慢。Stochastic Gradient Descent每處理完一個訓練資料,就會立即更新Ө。在某種程度上,這可以提高程式的效率。

The Normal Equation

這種方法不需要經過任何迴圈,也不需要假設初始值。雖然推導本身有點複雜,但是結果一步到位,簡單又效率。非常牛逼的方法啊。

我剛看完這個推導之後,不得不佩服那些數學家,居然可以如此簡單的算出上述需要迴圈才能得到的複雜的結果。唉,感嘆一下數學之美。

準備工作:

定義function f(A)Mapping from M-by-n matrices to the real numbers

定義f(A)的微分為:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

定義trace operator。對於一個n by nmatrix A the trace of A is:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

Trace有如下特性:

如果a是一個real number 那麼tr a = a

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)
新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

矩陣微分有如下特性:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

開始推導:

首先,設計一個mn列的(實際上是n+1列,應為我們假設x0 =1 )矩陣X,他的每一行都是一個training sample,每列都是一個特徵。

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

設計y成為一個m列的目標值(輸出值)向量,也就是房子的價格在我們例子中。

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因為:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

所以:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因為對於一個向量z來說:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression) 所以:
新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

最後我們用之前提到的矩陣微分特性的第二和第三條:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

所以:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因為我們要讓J最小,所以J的微分必須等於0

所以:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

這就是最後的結果了。非常簡單明瞭也很容易實現出來。

需要注意的是,當你實現的時候,記得把資料X最右邊加上全部是“1”的一列,因為我們前面的時候假設

X0 = 1。

下圖是Matlab的結果:

新宇教你機器學習之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

"x"是原始資料,藍線是用Matlab的polyfit()方法算出來的linear regression。紅圈就是用normal method計算出來的預測值,可以看到他們全部都完美的對齊在藍線上。

不記得在哪裡看到的了,有人說,當資料量過大的時候normal equation method會變得不穩定。QR Factorization是一種更好的方法。我還沒研究過,以後懂了再更新吧。