Ng機器學習第二課複習

   從小學到高中,在學校學習老師過一段時間都會帶領我們複習前一段學過的知識,而且現在隨着自己年齡越來越大記憶力也越來越差,並且自己也不是什麼天才,所以經常複習學過的東西覺得越來越有必要了。個人認爲學習有個牛人老師帶領並且能有幾個一起討論並學習的夥伴纔是最佳的學習環境,但是苦在自己並不是學計算機出身,就談不上會有個牛導和一羣學計算機的小夥伴,所以希望能和有緣的網友一起學習和進步,更希望如果自己有錯誤能被及時的指出,這是我們普通人進步的重要方法。

看到在網易公開課裏還有人問課程講義在哪裏下載,這個是網站:http://cs229.stanford.edu/materials.html    裏面有講義和各種資料,講義裏的內容寫的比較詳細,幾乎是老師上課說過的原話。

第二課  線性迴歸的梯度下降(第一課只是介紹了機器學習的大概2008年的,幾乎沒什麼乾貨)。
這節課講的內容是在監督學下的算法(supervised learning)。好吧,什麼是監

督學習,我看了一下資料:每個數據點被標記或者與一個類別或者感興趣的值相關聯。拿本節課預測房價的例子來說,房價與被標記的數據點也就是特徵(臥室數目等)相關聯了起來,所以這就是個監督學習。我的理解就是你的特徵值就是數據點有標籤並且相互之間有個確定的結構關係,各個標籤數據通過這個特定的結構關係得到一個你所感興趣的值(比如房價),這就是監督學習。
1、線性迴歸(linear regression)。
(1)什麼是線性迴歸?
到目前爲止我學到了第7課,基本上是圍繞兩個問題解決的,迴歸問題和分類爲題(regression and classification)。那麼什麼是迴歸問題,從輸出結果來看,你得到的是你感興趣的數字,這就是迴歸,從字面上來理解也就是當你用大量的數據訓練你的模型之後,最後你的模型會回到一個預測誤差比較小的你所感興趣的值,這幾是迴歸。
好了本課的一個式子就來了, 預測房價。(這裏先不討論分類問題,這節課還沒講)
設定預測房價爲這裏寫圖片描述
其中h(x)就是房價的預測價格(hypothesis),就是最後通過訓練之後,迴歸後你得到的可靠的預測值。theta0,theta1,theta2是參數,x1,x2分別代表房間面積和臥室數目(就是你感興趣的標籤值)。這個式子還是比較好理解的。但是其中有個問題不知道大家想沒想過,爲什麼各個theta乘以的是各個x的一次冪二部是x的兩次冪,三次冪、六次冪等等。對了這裏插一句,Ng在課上講的theta還有個別名叫weights,就是權重,根據這個意思理解公式就好理解多了,預測房價和各個特徵值(面積,臥室數目)之間的關係,如果房價和麪積關係大不就是面積乘以的那個參數也就是theta1就大點,反之就小點唄,因此各個參數theta也叫做權重。好了回到剛纔的問題爲什麼各個權重(theta)乘以的只是x的一次冪?其實這個問題在後面的課程(過擬合,欠擬合)會講到,這裏只是爲了理解簡單所以假設各個權重theta乘以的是x的一次冪,但是實際情況可能並非如此。下面用房價和麪積(不考慮其他特徵值)的圖表示一下(只是假設,用的是講義裏的圖):
這裏寫圖片描述 這裏寫圖片描述這裏寫圖片描述
如果大部分實際的數據如上左圖(其中的小藍點)所示,那麼你用一個直線模型(右側圖形,也就是參數乘以x的一次冪)去預測房價誤差當然會有點大。當然如果x次冪過高的話就會出現過擬合的情況(overfitting,也就是說你不是在預測房價,而是去查找房價,誤差雖然小,但是並不是我們想要的預測誤差小,如第三個圖所示)。以上就是關於第一個式子的理解和看法。
(2)梯度下降
第二個式子爲這裏寫圖片描述
這個式子大家應該都不陌生,打眼一看理解起來就是誤差函數。那麼問題又來了,我們用他來幹嘛?也就是這個式子在我們的線性迴歸中有個怎麼樣的應用呢?好了,既然上面的式子是誤差函數,那麼當然我們希望的是誤差越小越好了,要不然怎麼用來進行預測呢?對了,順便說一句,x和y的上標是第幾組數據,舉個例子x上標1(120,3),y上標1(200),x1中第一個元素是居住面積,第二個元素是房間個數,y1中對應的是價格(實際的,真實樣本,這裏不是假設的)。好了,回到剛纔的問題,既然我們希望誤差越小越好,最好是零,當然這不太可能,那麼關鍵問題就來了,怎麼通過真實的樣本數據,來訓練我們的假設模型(也就是參數theta0、1、2),來使得誤差函數最小呢?這就引出這節課一個比較重要的算法:梯度下降法(gradient descent).來看看這個式子是怎麼定義的:
這裏寫圖片描述
好了,這個式子該怎麼理解呢?第一個theta j代表的是本次thetaj應該得到的值,也就是說用後面的式子來代替(訓練)我們應該得到的thetaj參數。大家導數的定義還沒忘吧,用中學的理解來說就是斜率,那麼這個式子就是用得到的thetaj 減去a(阿拉法)乘以那個導數(theta你需要初始化一些值,a代表的是步長,當你越來越接近j的最小值是a應該越來越小,要不然你會跳過收斂區域,從而反覆在最小值左右徘徊)。這麼說好像還不是那麼清晰,我用一個網上找來的圖片展示一下(盜的圖啊,不是自己畫的):
這裏寫圖片描述

這個圖簡單明瞭多了吧,theta1是你的初始值,這有點類似於牛頓法(後面幾節課裏的)。

好了,然後Ng又說爲了方便起見給出這麼幾個Notation(表達式):這裏寫圖片描述
,然後J的偏導數就有了個新的寫法了唄:這裏寫圖片描述
向量中每一個元素都對應一個偏導。然後他又介紹了矩陣的跡(trace,就是個矩陣各個對角元素的和)和其與偏導數之間的一些關係式(挺好證明的,並且挺有用的,都是在講義裏面直接截得公式):
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏注意一個式子(講義裏的)這裏寫圖片描述
這個式子在你用matlab畫圖時候特別有用。

根據上面矩陣跡的性質和上面的式子然後我們來求這裏寫圖片描述,(直接用講義裏的過程貼出來):
這裏寫圖片描述
(最好自己證一遍,不難)然後把最後一個結果設置爲0向量。求出theta:這裏寫圖片描述
。上面過程都不難,但是這裏有個小問題,爲什麼把結果設置爲0向量?高書中大家求最值的方法還記得吧,求一階導數(可導的情況下哈)爲0的變量值,就是最值。所以這裏就設置爲零向量。但是事實都是這樣嗎?其實並不是,這裏我們用梯度算法求最小值得時候,我們是有另外一個條件的,所有數據是屬於一個凸集,如果你得訓練數據屬於一個凹集,你用梯度下降法所求得的最小值有可能只是個局部最小值(也就是極小值),並不是最小值,那麼凸集是個啥?這也是我才搞明白的,這個問題也要寫好久,將在複習第七課的時候再談。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章