以吳恩達的《機器學習》課程為藍本,整理課程框架,自己學習的簡單記錄。
課程講解很清楚,建議有空可以看看原課程。
01 單變量線性回歸
回歸偏向于連續屬性,分類偏向于離散屬性。
監督學習是給定標簽的學習;而無監督學習,未給定標簽,以聚類算法為典型。
1.1 模型表達
對于單變量,一種可能的表達方式為:
1.2 代價函數
代價函數可簡單理解為,表達的是模型所預測的值與訓練集中實際值之間的差距(即,建模誤差)。常用表達式為:
也有其他代價函數,只是上述比較常用。
可畫圖,觀察不同參數對代價函數的影響。
1.3 梯度下降
梯度下降是一個用來求函數最小值的算法。
梯度下降背后的思想是:開始時我們隨機選擇一個參數的組合,計算代價函數,然后我們尋找下一個能讓代價函數值下降最多的參數組合。我們持續這么做直到到到一個局部最小值(local minimum),因為我們并沒有嘗試完所有的參數組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum)。
選擇不同的初始參數組合,可能會找到不同的局部最小值。
批量梯度下降(batch gradient descent)算法的公式為:
其中α是學習率(learning rate),它決定了我們沿著能讓代價函數下降程度最大的方向向下邁出的步子有多大。
α太小,移動可能很慢,需要很久才能達到局部/全局最低點。
α太大,移動步伐太大,可能會超過最低點,無法收斂。
注意參數需要同時更新(代碼部分容易不同步):
02 多變量線性回歸
只是參數變多,其他處理和單變量類似。
求出最優解的方式,引入“正規方程”:
03 邏輯回歸
3.1 邏輯函數
一個常用的邏輯函數為 S 形函數(Sigmoid function),公式為:
函數圖像為:
假定:
?(x)的作用是,對于給定的輸入變量,根據選擇的參數計算輸出變量=1 的可能性。如:
3.2 判定邊界
已知,z=0, g(z)=0.5,則邊界條件為z=0時的條件,且有:
3.3 代價函數
函數有許多局部最小值,將會影響梯度下降算法尋找全局最小值。
3.4 簡化的成本函數和梯度下降
上面的表達式可以變化為:
最小化代價函數的方法,是使用梯度下降法(gradient descent)。
需要反復更新每個參數,式子如下:
優化代價函數的不同方法,共軛梯度法 BFGS (變尺度法) 和 L-BFGS (限制變尺度法)
04 正則化
4.1 過擬合問題
第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集;第三個模型是一個四次方的模型,過于強調擬合原始數據,而丟失了算法的本質:預測新數據。
對于第三個模型,可以看出,若給出一個新的值使之預測,它將表現的很差,是過擬合,雖然能非常好地適應我們的訓練集但在新輸入變量進行預測時可能會效果不好;而中間的模型似乎最合適。
出現過擬合問題,常從兩個角度思考處理方法:
1)丟棄一些不能幫助我們正確預測的特征(如PCA)
2)正則化。(保留所有的特征,但是減少參數的大小)
4.2 代價函數
若在之前的回歸問題中,我們的模型為:
我們可以清楚,是高次項導致了過擬合的產生,嘗試思考在一定程度上讓高次項的系數減小。
因此,我們嘗試對代價函數進行修改,對高次項的系數設置一些“懲罰”。這樣做的話,是嘗試最小化代價時將這個“懲罰”也納入考慮,并導致最終選擇較小一些的高次項的系數。
修改后的代價函數為:
假如有非常多的特征,不知道其中哪些特征我們要懲罰,直接將對所有的特征進行懲罰,并且讓代價函數最優化的軟件來選擇這些懲罰的程度。
這樣得到了一個較為簡單的能防止過擬合問題的假設:
其中,λ也被稱為“正則化參數”。
根據慣例,我們不對 進行懲罰。
注意,正則化參數λ不可過大,過大則會把所有參數都最小化。
對于邏輯回歸的正則化表達式為:
05 神經網絡
了解基本結構:輸入層,隱含層,輸出層。
將神經網絡的分類定義為兩種:二類分類和多類分類。
從前往后,算到最后一層輸出的預測方式,稱為正向傳播方法。
5.1 代價函數
原來只有一個輸出變量時的代價函數為:
我們可以有多個輸出變量。這里假設我們的輸出維度為K,即K個輸出變量,代價函數更新為:
這個更復雜一點的代價函數,與之前代價函數的區別是:
對于每一行特征,我們都會給出K個預測。利用循環,對每一行特征都可預測出K個不同結果,然后再利用循環在K個預測中選擇可能性最高的一個,將其與y中實際數據進行比較。
5.2 反向傳播算法
之前在計算神經網絡預測結果時,我們采用的是正向傳播方法,即從第一層正向到最后一層的計算。
但是,為了計算代價函數的偏導數,,我們需要采用的事一種反向傳播算法。即,先計算最后一層的誤差,再從后往前,求出一層又一層的誤差。
以一個四層的神經網絡為例:
從最后一層的誤差開始計算,誤差是激活單元之間的誤差。
由于第一層是輸入變量,故不存在誤差。
當有了所有誤差的表達式后,便可以計算代價函數的偏導數:
其中,
l代表目前所計算的是第幾層。
j代表目前計算層中的激活單元的下標,也將是下一層的第j個輸入變量的下標。
i代表下一層中誤差單元的下標,是受到權重矩陣中第i行影響的下一層中的誤差單元的下標。
PS:反向傳播會有點難以理解,先學會用,再說是否搞明白了原理。
5.3 梯度檢驗
對一個較為復雜的模型(例如神經網絡)使用梯度下降算法時,可能會存在一些不容易察覺的錯誤。即,雖然代價看上去在不斷減小,但最終的結果可能并不是最優解。
為了避免這樣的問題,采取一種叫做梯度的數值檢驗(Numerical Gradient Checking)方法。這種方法,是通過估計梯度值來檢驗計算出的導數值是否真的是要求的。
對梯度的估計采用的方法,是在代價函數上沿著切線的方向,選擇離兩個非常近的點,然后計算兩個點的平均值用以估計梯度。
5.4 模型的檢驗
通常將數據集分為訓練集、交叉驗證集、測試集。
例如,下面按照6:2:2 的比例分:
5.5 診斷偏差和方差
當運行一個學習算法時,如果這個算法的表現不理想,常為兩種情況:偏差比較大;方差比較大。對應的問題就是欠擬合和過擬合的問題。
例如:
通常會通過將訓練集和交叉驗證集的代價函數誤差與多項式的次數繪制在同一張圖表上來幫助分析:
對于訓練集,當d 較小時,模型擬合程度更低,誤差較大;隨著d的增長,擬合程度提高,誤差減小。
對于交叉驗證集,當d較小時,模型擬合程度低,誤差較大;但是隨著d的增長,誤差呈現先減小后增大的趨勢,轉折點是我們的模型開始過擬合訓練數據集的時候。
則有:
訓練集誤差和交叉驗證集誤差近似時:偏差/欠擬合
交叉驗證集誤差遠大于訓練集誤差時:方差/過擬合
5.6 正則化和偏差/方差
在訓練模型的過程中,常會使用一些正則化方法來防止過擬合。
但可能會正則化的程度太高或太小了,即在選擇 λ 的值時,也需要注意λ的選擇問題。
我們選擇一系列的想要測試的λ值,通常是 0-10 之間的呈現 2 倍關系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共 12 個)。
同樣把數據分為訓練集、交叉驗證集和測試集。將訓練集和交叉驗證集模型的代價函數誤差與 λ 的值繪制在一張圖表上。
5.7 學習曲線
也可使用學習曲線來判斷某一個學習算法是否處于偏差、方差問題。
對于高偏差/欠擬合:作為例子,嘗試用一條直線來適應下面的數據,可以看出,無論訓練集有多么大誤差都不會有太大改觀:
即,在高偏差/欠擬合的情況下,增加數據到訓練集不一定能有幫助。
對于高方差/過擬合:假設使用一個非常高次的多項式模型,并且正則化非常小,可以看出,當交叉驗證集誤差遠大于訓練集誤差時,往訓練集增加更多數據可以提高模型的效果。
即,在高方差/過擬合的情況下,增加更多數據到訓練集可能可以提高算法效果。
解決思路:
- 獲得更多的訓練實例——解決高方差
- 嘗試減少特征的數量——解決高方差
- 嘗試獲得更多的特征——解決高偏差
- 嘗試增加多項式特征——解決高偏差
- 嘗試減少正則化程度 λ——解決高偏差
- 嘗試增加正則化程度 λ——解決高方差
5.8 其他概念
類偏斜情況表現為:訓練集中有非常多的同一種類的實例,只有很少或沒有其他類的實例。
例如,我們希望用算法來預測癌癥是否是惡性的。在我們的訓練集中,只有 0.5%的實例是惡性腫瘤。假設我們編寫一個非學習而來的算法,在所有情況下都預測腫瘤是良性的,那么誤差只有 0.5%。然而我們通過訓練而得到的神經網絡算法卻有 1%的誤差。這時,誤差的大小是不能視為評判算法效果的依據的。
因此,我們將算法預測的結果分為四類:
- 正確肯定(True Positive,TP):預測為真,實際為真
- 正確否定(True Negative,TN):預測為假,實際為假
- 錯誤肯定(False Positive,FP):預測為真,實際為假
- 錯誤否定(False Negative,FN):預測為假,實際為真
定義:
查準率=TP/(TP+FP)。例,在所有我們預測有惡性腫瘤的病人中,實際上有惡性腫瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有實際上有惡性腫瘤的病人中,成功預測有惡性腫瘤的病人的百分比,越高越好。
對于剛才那個總是預測病人腫瘤為良性的算法,其查全率是 0。
因此,查準率和查全率,可作為遇到偏斜類問題的評估度量值。再很多應用中,我們希望能夠保證查準率和查全率的相對平衡。