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

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

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

機器學習

什麼是機器學習?Arthur Samuel 給出的一個非正式定義是:不通過明確地程式設計,使計算機擁有通過學習解決問題的能力。
機器學習的演算法包括 監督學習無監督學習強化學習推薦系統等。我們第一週學習的 線性迴歸 屬於 監督學習

迴歸問題

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

監督學習的工作方式

首先要有一個訓練資料集( Training Set ),其中包含資料對應問題的正確結果。通過我們的學習演算法 ( Learning Algorithm ) 學習訓練資料集,最終獲得一個函式 ( Hypothesis ),這個函式就是我們需要的 預測函式,能夠對 訓練集的資料 與 其它資料輸入 做出比較準確的預測。
這裡寫圖片描述
對於 線性迴歸 ,我們的 Hypothesis 就是:

hθ(x)=θ0+θ1x1+θ2x2++θnxn=θTx

其中的 θi 就是學習演算法需要學習的引數,而 xi 是我們對於問題所選取的特徵。

代價函式

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

J(θ)=12mi=1m(hθ(x(i))y(i))2

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

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