1. 程式人生 > >Andrew Ng's Coursera Machine Leaning(ML) Notes Week 2

Andrew Ng's Coursera Machine Leaning(ML) Notes Week 2

Andrew Ng’s Coursera Machine Leaning(ML) Notes Week2

Author: Yu-Shih Chen
December 20, 2018 1:10AM

Intro:
本人目前是在加州上大學的大二生,對人工智慧和資料科學有濃厚的興趣所以在上學校的課的同時也喜歡上一些網課。主要目的是希望能夠通過在這個平臺上分享自己的筆記來達到自己更好的學習/複習效果所以notes可能會有點亂,有些我認為我自己不需要再複習的內容我也不會重複。當然,如果你也在上這門網課,然後剛好看到了我的notes,又剛好覺得我的notes可能對你有點用,那我也會很開心哈哈!有任何問題或建議OR單純的想交流OR單純想做朋友的話可以加我的微信:y802088

Week2

大綱:

  • Multiple Feature hypothesis h(x)(預測公式)
  • Gradient Descent for multiple variables
  • Feature Scaling and Mean Normalization
  • Alpha (learning rate)
  • Features and Polynomial Regression
  • Normal Equation

Multiple Feature Hypothesis h(x)(預測公式):

week1講的主要是1個feature的model,也就是隻有一個’x’的model。舉個栗子:h(x) = 3 + 5x, 也就是很簡單的一條線(這裡3是theta0,5是theta1)。但其實多加一點feature也不會改變公式太多。

先來註釋一下各種notation吧
在這裡插入圖片描述
如果用matrix來解釋,x(i)j就是i排的第j個元素。 其他的都比較straight forward沒什麼好講的。

Multivariate Linear Hypothesis h(x)(預測)的公式如下:
在這裡插入圖片描述
在這裡插入圖片描述
上面兩張圖是一樣的。第二張圖只是用matrix(矩陣)來表示出來而已。

Gradient Descent for Multiple Features

week1講到gradient descent是用來尋找最好的theta/parameters 搭配來達到最低的cost(誤差)。如果有多個’x’,gradient descent的公式如下:
在這裡插入圖片描述


是不是跟week1的沒什麼區別,因為的確沒什麼區別,只是從1個feature變成多個n個feature了而已。 思路還是一樣的,通過尋找根據theta的partial derivative找slope,然後慢慢地找到誤差最低點的theta。

Feature Scaling and Mean Normalization

這不是一個必須要做的,這是一個可以讓你的gradient descent更有效率的小技巧。 有些時候如果你的featurer的值很大,比如說你的feature 1是關於某個城市每天出入的人數什麼但是feature 2是關於平均每個人擁有的手機數量,那這兩個feature的數值差就很大吧?可想而知,如果你很多feature而且都差得很多,那雖然gradient descent能跑是能跑,但是越大的range就越慢找到理想的theta。
大概的想法就是我們想要讓每組的feature都在某個較小的數值的區間裡(如: -1<= x <= 1)有兩種做法:

  1. Feature Scaling - 把每個x都除以它dataset的range(最大減最小)
    舉個栗子:feature 1是某個城市每天出入人數然後我們有5組資料(1000,1500,1200,2000,1700)那這個的range就是2000-1000 = 1000 然後如果feature 2是平均每個人擁有的手機(1,2,2,3,1)range就是3-1 =2。也就是說把每一個x都除以它對應的range就行
  2. Mean Normalization - 在feature scaling的基礎上,讓x減去最小值(mu(i))
    公式為: 在這裡插入圖片描述
    這裡的s(i)可以是standard deviation也可以是我們剛剛講的range,結果會不一樣,但是達到目的是一樣的。
    再次宣告:這個小技巧不是必須的,但是可以提高gradient descent的執行速度。

Alpha (Learning Rate)

這個week1的時候好像就寫過了但我再寫一遍吧
對於alpha要注意的有幾點:

  1. alpha不能太大。 如果太大,會導致像蜘蛛俠一樣在graph上彈來彈去,而且是越彈越高,離我們的cost(誤差)的最小值越來越遠,這樣就本末倒置了。
  2. alpha不能太小。 如果太小,那執行的時間就需要更久,導致沒有效率。但是比起alpha太大,它還是能達到我們想要的目的的。

解決方法:

  • 如果發現implement gradient descent之後誤差反而越來越大,就降低我們的alpha值。
  • 相反,如果發現誤差在減小,但是速度太慢了,那就適當的提升一點alpha的值。

Features and Polynomial Regression

我們可以通過加入higher degree feature (比如:x^2)或者是其他feature的改動來更好的貼合我們的資料。
比如說如果我們的資料呈現的是個弧形,那我們可能可以考慮到平方(比如:y = theta0 + theta1*x + theta2 * x^2)能夠更好的貼合我們的資料。week2只是提到了有這麼一個idea而已,但是關於如何去選擇最好的模型要等到後面才會詳細講解。
需要注意的點是:如果說給feature加進了更高的degree或者是一些其他的mathematical adjustment
比如:
在這裡插入圖片描述

或者:在這裡插入圖片描述那上面說的feature scaling就會變得非常重要。因為你的資料的範圍可能會因此變得非常的大,也就導致你的gradient descent非常的沒有慢且沒有效率。

Normal Equation

除了通過gradient descent來找到理想的theta以外,我們還有個比較簡單粗暴的公式可以準確的直接手動計算找到我們想要的theta。
用matrix表示公式如下:
在這裡插入圖片描述
如圖中所示,用這個公式就可以直接找到我們最理想的theta,而且效率非常高。如果用這個公式,feature scaling是不必要的。
問題:那我們為什麼不直接用這個,多簡單多方便?因為如果我們的feature的數量很多的話,那用這個公式計算將會很“貴”。 什麼叫“貴”呢?就是說會非常非常沒有效率,計算機會需要做龐大的計算。在這個追求效率的社會,這是不好的。那到多少個n(feature的數量)可以允許我們使用這個“作弊捷徑”呢? Andrew Ng給的答案是在n=10000以下的時候可以用,但是如果超過這個數字了,最好還是通過gradient descent或是其他的algorithm來尋找theta。

以下的圖表為Gradient Descent跟Normal Equation的性質差:
在這裡插入圖片描述
簡單的說就是:
Gradient Descent

  • 需要選擇alpha(learning rate)
  • 需要很多次的運算
  • O(kn^2)的計算複雜度
  • n(feature數量)龐大的時候好用(當然不龐大的時候也好用只是Normal Equation可能是個更好的選擇)

Normal Equation

  • 不需要選擇alpha
  • 不需要多次運算(一次就算好)
  • O(n^3)的計算複雜度,因為要計算X’ * X
  • 如果n很龐大,會非常的慢而且“貴”

Week 2的程式設計作業我會分開在另外一個筆記裡寫。
Thanks for reading!