前言
最近在學習吳恩達的機器學習課程。學習過程中經常忘記已經學習過的知識,需要重新觀看視訊或查閱資料進行複習。為了友善以後的複習,把一些自己認為重要的知識整理在部落格上。
機器學習定義
Arthur Smauel在1959年給出的定義:
the field of study that gives computers the ability to learn without being explicitly programmed.
在沒有明确設定的情況下,使計算機具有學習能力的研究領域。
Tom Mitchell在1998年給出的定義:
A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
上面定義的直譯有點奇怪。大意就是,計算機程式通過學習以往的經驗(資料)來提高解決任務的性能名額(準确率)。
機器學習類别
- 監督學習(Supervised learning):
用帶有标簽的資料進行訓練。識别垃圾郵件、識别手寫數字等可用這類算法建立模型。常見的算法有邏輯回歸和反向傳播神經網絡。
- 無監督學習(Unsupervised learning):
用無标簽資料訓練。最典型的應用就是聚簇(Clustering),将相似的資料分為一組。常見算法是K-Means。
- 半監督學習(Semi-Supervised Learning):
使用有标簽和無标簽的資料進行訓練。先用無标簽資料進行模組化,再此基礎上對有标簽資料進行預測調整模型準确性。
- 強化學習(Reinforcement):
強化學習就是智能系統從環境到行為映射的學習,以使獎勵信号最大。如果Agent的某個行為政策導緻環境正的獎賞(強化信号),那麼Agent以後産生這個行為政策的趨勢便會加強。
常用概念
1、要進行機器學習的訓練,就必須先有資料,最簡單的資料分集可以分為以下兩種
- 訓練集(training set):對于監督學習來說,訓練集是帶有标簽的一組資料。無監督學習的訓練集則不需要标簽。這裡的标簽指的就是你希望模型輸出的結果,例如下面的圖檔,我們給的标簽分别是5,0,4,1。
- 測試集(test set) :用于測試訓練結果的準确度。将資料拆分為訓練集和測試集很有必要,用單獨的測試集進行評估模型,更容易将模型推廣到其他資料上(比如線上資料)。
2、根據資料是否有标簽,我們還需要确定學習算法類别,是使用監督學習還是無監督學習。
監督學習常用算法:
- 線性回歸
- 邏輯回歸
- K-臨近算法
- 支援向量機(SVM)
- 決策樹和随機森林
- 神經網絡
無監督學習常用算法:
- K-means
- 主要成分分析(PCA)
- EM(Expectation Maximization)
3、這些算法根據輸出是否連續又可以分為回歸模型和分類模型
- 回歸(regression)模型:對數值型連續随機變量進行預測和模組化的監督學習算法。比如線性回歸。
- 線性回歸:線性回歸(左下圖),訓練結果就是圖中的一進制一次函數(藍線)。函數中每一個輸入對應一個輸出,可用于預測趨勢。
- 分類(classification)模型:分類通常用于輸出離散的模型。比如邏輯回歸。
- 邏輯回歸:邏輯回歸(右下圖),圖中綠色的線是模型訓練出的決策邊界(Decision boundary),決策邊界将資料分為兩類是A或不是A,是以輸出就是1或者0,是離散的。如果需要将結果分為n類,則需要訓練n個決策邊界,用hot-ont vectors(一個n列或n行的向量)結構來記錄結果,大概是這樣([1,0,0,0,0,0,0,0,0,0,0...]),向量的哪一列為1,就代表資料屬于哪一類,結果也是離散的。
4、在确定算法以後,就需要知道怎麼來訓練我們的模型。這裡我們使用線性回歸作為例子來說明,左上圖的橫軸是城市的人口數,縱軸是餐車平均利潤,我們需要預測不同人口時餐車利潤是多少。
首先我們需要一個假設函數,在圖中(左上)的資料(紅叉)大概能看出用一進制函數(一條直線)就能拟合(用一進制函數還有一個原因是入門簡單),是以我們使用下圖的函數作為假設函數。
- 假設函數(hypothesis ):這個函數是對訓練模型的一個假設,需要根據訓練資料的特征數量來确定假設函數(線性回歸中是多元函數)是幾元的。
其中,函數的元數代表了輸入特征的數量, θ(theta)代表了每個特征的權重。θ0比較特殊,它被稱為偏置量。
有了假設函數後,我們随機初始化它的權重。比如 theta0 = -1,theta1 = 2,那麼我們的假設函數會被初始為h = 2 * x - 1,是不是相當的簡單。
初始化出來的假設函數肯定預測能力很差,我們就需要一個标準來判斷假設函數的預測能力。線上性回歸中我們使用最小二乘損失函數(如下圖)來評估它的預測能力,這個用來評估的函數被稱之為損失函數(loss)或者代價函數(cost)。
其中,m代表訓練資料的數量,h(x)代表假設函數的預測值,y代表訓練資料的标簽(正确值)。函數就是把資料集的每一條資料的預測值和正确值的差距做平方,把得到的值求和,再除以資料量的兩倍。
這個線性回歸的代價函數大概是上左圖這樣,代價函數是衡量模型好壞的标準,那麼我們讓模型變好的方法就是找到代價函數的最小值或局部最小值。 我們剛才初始化的假設函數h = 2 * x - 1,如果用這個代價函數進行計算,會得到一個比較大的值。說明現在的模型很差,怎麼辦呢?
我們就需要用梯度下降算法來解決這個問題。想法就是,對代價函數中的每個權重求偏導,偏導在這個點(目前的權重值)的值是正的,說明函數沿着這個這個方向遞增,需要減小這個權重值。偏導是負的,則需要加上這個權重值。然後批量對每個權重進行更新,最終得到我們的最優解或局部最優解。下面則是這個算法的公式:
θj代表目前的權重值,α代表學習率,α後面是偏導函數
得到最優解後,我們的權重向量會到達左上圖的最低點,也就是右上圖(等高線圖)中的紅叉位置。将權重帶入假設函數,就得到了我們的訓練結果。
由于剛剛開始寫部落格,機器學習也剛入門,有錯誤的地方請多多指教。