斯坦福大學機器學習課程(介紹和線性回歸)

講師:Andrew Ng

網易公開課鏈接:點擊鏈接

課件講義下載:點擊下載

感謝斯坦福大學給全世界的學生和工作者們提供的有關機器學習的免費公開課程,讓我們這一刻處於了同一數量級的知識起跑線上。

這門課程比較老,是2003年的。它從機器學習最基本的概念開始講起,為我們講解了生成學習演算法,樸素貝葉斯演算法等等演算法的原理和作用,通過直觀的數據圖,解釋數據分布。作為一個剛剛入門的新人,我想學習完這門課程,然後記錄筆記,並且做完作業和練習,修復一些不合時宜的代碼。如果有理解錯誤的地方,歡迎指出。

課程主要包括以下

  • supervised learning (監督學習)
  • Learning Theory (學習理論)
  • unsupervised learning (無監督學習)
  • reinforcement learning (強化學習)

監督學習

我們給我們的演算法提供了一組"標準答案",希望我們的演算法可以找到輸入參數和標準答案之間的聯繫,從而在我們給予其他輸入參數的時候可以預測較為精準的答案。

無監督學習

不提供標準答案,讓演算法尋找數據結構的特點,匯聚計算機認為差不多的數據,常見用處:計算機視覺,經典的雞尾酒會問題(聲音的分離),機器人控制等方面。

supervised learning(監督學習)

下面是一組關於房子面積(feet)和價格(price)的數據

房子面積和價格的數據

房子面積和價格的圖

我們要做的就是根據房屋面積預測房屋的價格。

為此我們定義了一些符號

x(i): input variables (living area in this example) 也叫 輸入特徵(input features)

y(i): output variable (price) 用來表示 預測結果 (predict result)

(x(i),y(i)):training example 用來表示 一個訓練樣本

{x(i),y(i);i = 1,.....,m} : training 用來表示 訓練集

h(x): hypothesis 用來表示 假設函數

整個過程就好比這樣:

監督訓練過程

如果我們是通過房子的面積來預測它的價格,我們把這樣的問題叫做回歸(regression)問題,如果我們希望通過房子的面積來區分它是一個住宅或者一個公寓,那麼這個問題就是一個分類(classification)問題

part 1

Linear Regression(線性回歸)

為了使我們的住房實例更加有趣,我們加入了房間數:

增加房間數後的數據結構

在訓練這組數據之前,我們必須決定如何表示這個假設函數h,作為一個最初的選擇,我們決定將 y想像為 x 的線性函數。即:

h_	heta(x) = 	heta_0 + 	heta_1x_1 + 	heta_2x_2

註: θ 一般代表參數,在這裡表示的是學習演算法的參數,就是演算法最後要得出的參數,也叫做權重(也會用 w表示)。

我們一般定義 x(0) = 1 化簡公式:

h(x) = sum_{i=0}^n	heta_ix_i = 	heta^Tx

這裡我們將x、θ看做向量, n 看做是輸入的數量。現在,給定了一個訓練集,我們要如何計算我們的參數 θ 呢? 一個做法就是使得我們的假設函數h(x)接近我們設定的 y 。所以我們要定義一個損失函數(cost function):

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

如果是對線性回歸比較熟悉的同學可能已經發現了,這是一個普通最小二乘法的回歸模型。

接下來我們要做的就是找到一個 minimize J(θ)

這是一個搜索演算法。我們通過設置初始的 θ ,然後不停的改變我們的 θ,直到得到J(θ)的最小值。就好比,你在一座山上,環顧四周,每走一步你就問你自己 "如果我只走一步,哪一條路可以讓我下山最快" ,這個最陡峭的"下山的方向"就是這個函數導數的方向,這就是 Gradient Descent(梯度下降)演算法的工作原理:

梯度下降

我們來回顧一下,如何求導數。首先,導數反映的是函數沿坐標軸正方向的變化。因此我們需要減去導數,向反方向下降。

	heta_j: = 	heta_j - alphafrac{?}{?	heta_j} J(	heta)

註::= 代表右邊的值將左邊的值覆蓋掉, α 代表 learning rate(學習率)你可以理解為每一步走的步長

假如我們只有一個訓練樣本:

求導數

所以對於單個的訓練樣本來說:

	heta_j = 	heta_j - alpha(h_	heta(x^{(i)}) - y^{(i)} )x_j^{(i)}

	heta_j = 	heta_j + alpha(y^{(i)} - h_	heta(x^{(i)}))x_j^{(i)}

具體實現 Batch Gradient Descent(批量梯度下降),我們需要不斷迭代更新我們的 θ:

Repeat  until  convergence { 	heta_j : = 	heta_j + alphasum_{i=1}^{m}(y^{(i)}-h_	heta(x^{(i)}))x_j^{(i)} }

從公式中我就可以看出了,批梯度下降每一步都會計算所有數據集,所需高昂的運算成本。為了解決樣本數量過大的問題,我們還可以使用隨機梯度下降(Stochastic Gradient Descent)

同樣是下山,梯度下降就好比滑滑梯一樣滑下去,隨機梯度下降就好比你隨機走一個方向,和走折線一樣最終走到山底附近,這種方法比起計算梯度來說速度是更快的,但是需要注意的是,它永遠不會收斂到最低限度。

所以,我們不斷迭代更新我們的θ,每次只使用一個樣本:

Repeat{for  i=1  to  m { 	heta_j : = 	heta_j+alpha(y^{(i)}-h_	heta(x^{(i)}))x_j^{(i)}}}

The normal equations(正規方程)

把J(θ)用矩陣形式表現出來。

表示訓練集m維的輸入值

訓練集m維的目標值

現在我們只需要讓xθ - y 的平方就可以得到J(θ):

J(θ)

用了很多的矩陣計算的公式,最後得到了 minimizes J(θ)

推導過程一知半解,不過知乎上面好像已經有這個問題了,想要自己推導一遍的同學可以去看看鏈接:andrew ng機器學習裡面的normal equation的推導? 作為一個沒有數學基礎的,寫代碼靠框架的新人,表示為什麼大佬們老是不愛寫全過程洋洋洒洒幾十行,可能是我太菜。。。


推薦閱讀:

《機器學習基石》課程學習總結(一)
更加智能的決策樹:回歸樹
2-2 Cost Function
機器學習入門之泰坦尼克號案例
機器學習入門之泰坦尼克案例

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