一、 改進算法
1. 當代價函數非常大的時候可以嘗試的辦法:
- 獲取更多的訓練樣本
- 嘗試用更少的特徵數
- 增加額外的特徵
- 降低/提高lambda值
但是!這些步驟會花費較多的時間。下面將介紹一種事半功倍的解決辦法。
2.機器學習診斷
它能夠告訴你在計算的過程當中哪些方面出現了錯誤,然後可以知道如何改進才能達到最好的效果。
(1)如何防止過擬合/欠擬合
-
將數據分爲測試集和訓練集(3:7的比例)。
-
首先用訓練集獲取最優θ,然後用到test來計算代價函數的值
-
對於分類問題,可以用錯誤分類度量方法
-
將判斷錯誤記爲1,判斷正確記爲0,然後計算出現的誤差之和。
(2)如何選擇模型
選擇幾項式?
- 首先將數據分爲三個部分:
(1). 訓練集(60%)
(2). 交叉驗證集(20%)
(3). 測試集(20%)
- 然後使用不同模型計算交叉驗證集的誤差值,選擇出交叉驗證集誤差值最小的那個模型,然後再利用測試集去估算泛化的誤差。
(3)有關偏差和方差的問題
從下圖可以明顯的看出:
- 當出現高偏差時:訓練集上的誤差會比較高,交叉驗證集上的誤差同樣也會很高。
- 當出現高方差時:訓練集上的誤差會比較低,交叉驗證集上的誤差會比較高。
4、正則化
- 如果λ的值過大,那麼會出現高偏差,使得除了θ_0以外的θ都非常的接近於0。
- 如果λ的值過小,那麼就會使得λ起不到效果。
選則正確λ的步驟:
- 依此帶入不同的λ計算正則化的代價函數的最優θ。
- 然後依此用這些θ來計算交叉集上我誤差
- 選擇一個使得交叉集上代價函數最小的θ,放到測試集上去看代價函數的值
(5)學習曲線
- 在訓練集上,如果訓練的樣本不斷的增加,那麼訓練集的誤差就會越來越大
- 在交叉集上,如果交叉集的樣本增加,那麼其泛化效果就會越來越好,誤差就會出現的下降。
高偏差:
- 交叉驗證集的誤差會不斷的下降,並且到一個點就保持平穩
- 訓練集的誤差不斷上升,並且越來越接近交叉驗證集
注:如果算法出現高偏差,那麼使用更多數據樣本不會有效果
出現高方差時,我們的訓練集一開始能夠很好的進行擬合,但是隨着樣本量逐漸增大,訓練集的誤差必然會有所上升,但是上升的幅度不會這麼的大。
交叉驗證集一開始會有較高的誤差,但是隨着樣本量的增加,誤差就會逐漸變小,但是不會變化的非常快速。
注:如果樣本量足夠大,那麼訓練集誤差和交叉驗證集的誤差就會越來越接近。因此,當算法出現高方差時,那麼通過增加樣本量可以起到比較好的作用。
解決方法:
高偏差(欠擬合):
- 降低λ
- 增加特徵數
- 增加高次項
高方差(過擬合):
- 提高λ
- 減少特徵數
- 增加樣本量
在使用神經網絡的時候,當網絡比較大時更容易出現過擬合的情況。此時可以通過提高λ的方式來預防。
此外,在確定隱藏層的數量時,可以通過使用交叉集來驗證1層、2層、3層…的代價函數值,然後選擇代價函數值最小的那一層即可。
3.誤差分析思想
當在做一個機器學習項目的時候,我們通常會採用以下的幾個步驟:
- 首先快速的使用自己已經掌握的算法將這個項目大概的框架先做出來,然後用交叉驗證集去驗證
- 然後通過畫學習曲線去決定下一步應該做什麼事情。比如是高方差還是高偏差。
- 同時,可以通過誤差分析方法,去發現歸類錯誤的目標中,有哪些共同的規律,然後根據這個規律來進一步優化。
4.偏斜類
- 假設我們通過算法計算出來的誤差值只有1%,但是真實情況下,只有0.5%的病人得了病,所以這個時候,1%的誤差就顯得不是很小了。因爲如果我們默認所有人都沒有得病,那麼我們的誤差也只有0.5%。
- 在分類問題當中,當一個類別的數量非常大,另一個類別的數量非常小的時候,這個時候我們就稱之爲偏斜類。
-
Precision:
用真實爲I類的數量/我們預測到的爲類的數量。這個值越大,說明預測的越準確。 -
Recall:
真實爲I類的數量/真實爲I類的數量+真實爲I類但被預測爲II類的數量。召回率越高越好。
- 高準確率,低召回率:
如果我把判斷爲I類的門檻設的很高,那麼我就可以比較有自信的去告訴被判斷爲I類的人我的預測是非常準確的。但是,由於我們門檻很高,導致我有可能將很多屬於I類的但是未達到該門檻的人誤判爲II類。 - 高召回率,低準確率:
如果我把判斷爲I類的門檻設的很低,那麼這個時候我的自信就比較低了,但是我可以很有自信的說,真實是I類的人在我的判斷中一定是屬於I類的,但是這個時候會出現很多的假陽性。
- 通過計算F score可以比較不同算法,得到一個權衡P和R的最優算法。
-
當我們的數據集當中特徵數量太少,可能會導致我們無法準確的預測。比如,我們找一個房產經濟人,將房子的大小和房間數給他,他可能不能夠準確的預測出房價。因爲影響房價的重要因素還有很多。
-
當我們有很多的參數時,這個時候我們的算法一般是低偏差的。
所以我們如果想要得到一個比較高性能的模型,我們首先可以有很多的參數,其次數據樣本量比較龐大,從而使得偏差值和方差都比較的低。
二、 SVM
1.優化目標
在SVM當中,cost代替了log項,圖像和log項的圖像非常相似。
在SVM中,我們優化不再使用λ,而是使用C,C這一項是被放到了前面的一項當中,並且1/m被去除。
在支持向量機當中,爲了使我們的代價函數最小:
-
當y=1時,那麼我們希望z(θ轉置*x)能夠儘可能的大於等於1,因爲當z大於等於1時我們的cost_1函數就會是0,這就可以使代價函數最小
-
當y=0時,我們則希望z小於等於-1,從而使得我們的代價函數最小。
-
SVM會選擇黑色的線作爲決策邊界, 然後會以最大的間距將正樣本與負樣本分開。所以有時候SVM也被叫做大間距分離器。
-
在支持向量機當中,如果C被設定的過大,那麼我們的向量機就會對異常點非常的敏感。從而會得到紅色的那條玫紅色的那條線。
-
若C比較小,那麼我們的SVM還是會繼續使用黑色的那條線。
2.大間隔器原理
1、向量內積機制
下圖中的上面的座標軸:
- 向量u的長度就等於根號u_12+u_22(勾股定理)。而向量v的長度也可以同理得到。通過箭頭v做垂直於u的直線,p就是v在u上的映射。那麼u.T * v=p*u。
- 當p<90°時呢,我們的p是爲正數的。
- 當p>90°時呢,我們的p此時就是負數。
2、支持向量機選擇決策邊界的原理
-
假設左圖的綠色線爲決策邊界(支持向量機不會選擇這條線)。利用向量內積的原理,我們可以繪製出兩個樣本在θ上的映射,可以看到此時p(1)是一個很小的數,p(2)爲負數。那麼如果要滿足p(i)* ||θ||>=1或p(i)*||θ||,那麼我們就要儘可能的使||θ||大。那麼如果||θ||大了,那就和優化項的1/2 * ||θ2||要儘量小就衝突了。所以支持向量機不會選擇這頭條決策邊界。
-
若選擇這條綠色決策邊界,我們的P就會變大,從而使得我們的θ變小,而爲了使θ儘量的小,我們的SVM會找到一個間距,這個間距會使得P儘可能的大,最終目的還是爲了使得θ可以儘可能的小。
3、核函數
當我們需要對高階項進行計算時,會耗費相當大的計算量,因此這裏我們使用核函數來近似。
x與的相似核函數表示如下:
- 當x和l非常近似的時候,那麼f就會很接近與1
- 當x和l離的比較遠的時候,那麼這個時候f就會很接近與0
- 假設我們現在有三個變量,f1,f2,f3對應的相似值landmarks分別爲l(1),l(2),l(3)。參數θ1,θ2,θ3已知,當我們的真實樣本爲玫紅色時,可見真實樣本與l(1)離的非常近,與l(2),l(3)離的非常的遠。因此,這是f1會非常的接近於1,而f2、f3會非常的接近於0,所以此時我們帶入可求得我們的值是0.5>=0.5,所以預測值會爲1。
- 同樣的道理,當我們的實際值離這三個點都非常遠的時候,我們的預測值就變成了θ0。
- 又因爲我們的θ3是0,所以僅當實際值在紅色線區域內我們的預測值纔會爲1(這樣就可以得出我們的決策邊界)
如何選擇landmark:
看下圖中位於下半部分的兩幅圖。左邊的一幅圖是我們的給出的樣本所在的位置,我們在每個樣本點對應的位置放上一個landmark,然後組成一個向量。
- 比如所我們取x(i),那麼我們就會得到f(i)_1、f(i)_2、…、f(i)_m。每一個f(i)_j,都表示不同樣本點與x(i)的距離。所以當到f(i)_i的時候也就是在計算x(i)與自身的相似值,也就1。
- 然後將這些f(i)進行組合,我就創建了一個新的向量來描述我們的特徵向量x(i)。
- 然後利用核函數計算SVM
- 當C大時,那麼此時就很有可能會出現高方差(過擬合)
- 當C小時,此時很有可能會出現高偏差(欠擬合)
- 當sigmoid大時,那麼會出現高偏差
- 當sigmoid小時,那麼會出現高方差
4、應用SVM
- 在擬合最優θ時可以調用別人的庫
- 選擇C
- 選擇核函數(線性核函數就是沒有使用核函數)
- 如果使用高斯核函數就要選擇sigmoid值
- n相對於m來說很大的時候,使用Logistic迴歸或者線性SVM
- n小,m適中時使用帶有高斯核函數的SVM
- n小,m很大的時候加入或創造更多特徵,然後用Logistic迴歸或者線性SVM
- 神經網絡在這些條件下都很好,但是訓練的比較慢。
參考資料: