1.只評價一個模型:
對於評價一個(自己或者他人的)模型,只需要選擇不同的指標在test set上去評估。最常見的就是:
test error.
2.自己訓練一個模型並評價:
(1)對於不同的模型或者沒有使用正則化的模型來說:將所有集合劃分成三部分:Training set,Cross validation set,Test set。用途如下:
Training set(60%) | CV set(20%) | Test set(20%) |
不同模型擬合出不同參數 | 根據不同的參數得到的hypothesis在CV error上的誤差大小,選擇出一個最小誤差所對應的hypothesis | 用於測試最好hypothesis所對應的性能指標 |
一個非常好的圖像如下:
相關分析如下:
Trainging error和對模型進行優化的函數不一樣。
Training error是模型進行捕獲“是否數據中含有某種規律的”性能反映(對於已知的數據)。
CV error是檢測模型是否含有泛化能力的反映。(對於新的,沒有見過的數據)。
當模型複雜程度比較低時,伴隨着欠擬合的風險,此時,Training error和CV error比較高是因爲模型沒有很好的符合訓練集合上的結構。比如訓練集是二次函數形式的,用線性的函數就比較差了,即兩個誤差都比較大。
當模型複雜程度較高時,伴隨着過擬合的風險,此時,模型已經非常好地捕獲了訓練集上結構,所以Training error比較低,但是因爲太過了的緣故,對於未見過的數據的泛化能力就比較差了,所以CV error比較高。
(2)對於同一個使用了正則化的模型來說,根據的不同,所得到的參數也就不同,會導致性能也不一樣。
和(1)中完全一樣,只不過圖像中的橫軸“複雜程度”就變成了的大小,通過在Training set上調整不同的參數,比較它們在CV set上的誤差大小,最終選擇一個合適的參數,即選擇圖像中,CV error 最低的。
(3)Learning Curve
對於一個模型,要判斷它是否過擬合/欠擬合,可以使用Learning Curve
首先要強調的是:對於任何模型來說(無論過擬合,欠擬合還是正常模型),
在訓練集合比較少的時候,Training error都比較低,因爲模型都有可能因爲偶然性的原因使得對較少訓練集有非常好的效果,
一個非常簡單的例子就是:
實際上數據成二次函數分佈,但因爲數據量較少,可能表面上呈現出線性形式。
同理,在訓練集合比較少的時候,CV error比較高也是因爲偶然性使得模型沒有任何泛化性能。
但是隨着訓練樣本越來越多,error的趨勢就不一樣了,具體如下:
高偏差:
高偏差時,模型是欠擬合的,因爲模型本身沒有捕獲數據內在的結構,所以當訓練集合增加時,Training error會越來越大,趨於穩定是因爲模型最好只能捕獲到模型所能達到的地步。
隨着訓練集合增加,CV error在除去剛開始完全沒有泛化性能後,有一點點泛化性能,但是因爲模型本身欠擬合,所以這種泛化性能還是非常差,所以CV error下降的不會太多,最終還是有着high error.
接着就是:
高方差:
高方差時,模型是過擬合的。隨着訓練樣本數目增加,Training error會逐漸趨於真實的誤差。
而CV error因爲過擬合的緣故,隨着訓練樣本數目增加,會逐漸放棄掉只是訓練樣本的一些結構,從而泛化能力會加強,所以誤差也在漸漸降低。
正常情況下的模型:
隨着訓練集合的增加,模型漸漸趨於真實的誤差,比較低。
3.Machine Learning System Design/暫時總結的流程:
1.數據的預處理:數據歸一化,缺失值處理(矩陣補全),異常值檢測,可視化數據幫助理解
2.特徵選擇/是否需要降維(流形學習,PCA除去一些誤差?)
3.根據問題的目的選擇算法:
(1)聚類,發掘數據之間的關係(kmeans,高斯聚類,譜聚類等等)
(2) 分類:選擇不同的算法
迴歸,SVM,神經網絡,貝葉斯,GDA,決策樹,以及集成學習等。
在訓練集上訓練出模型以後,在驗證集上進行評估:
通過learning carve觀察算法的狀態(欠/過擬合?),爲下一步的步驟決策。(調參/增加樣本等等步驟)
性能度量,看指標(acc/precision/recall),進行誤差分析,優先選擇對算法最後結果提升最大的環節進行提升
4,進行循環,最終得到比較滿意的算法,然後在測試集上評價。
從更細化的應用角度分,要對症下藥,隨機應變!
異常檢測,推薦系統,數據可視化,聚類,文本分類等等
4.分類指標/聚類指標:
acc:正確率,分類/聚類中,預測正確的樣本數/全部樣本數 err:1-acc 錯誤率
Actual class | |||
1 | 0 | ||
predict class | 1 | True Positive | False Positive |
0 | False Negative | True Negative |
True是指預測正確的,False是指預測錯誤的.Positive指預測的類是正類,Negative指預測的類是負類。
,P表述的是:我們預測的正類中,有多少是正確的。
,R表述的是:實際上的正類中,有多少是被我們預測出來的。
以診斷癌症的例子去理解就是:
當我們希望我們有很大的把握是正確的時候,即預測的多數都是正確的,那麼P就要大一些。相反地,
如果只是爲了避免癌症的發生(如果有癌症,就儘早發現),抱着“寧可錯殺,不肯放過”的原則,那麼R就要大一些。
是對算法更綜合的評價。
5.大數據下的學習方法:
在學習這一部分的時候,突然想到之前在趙老師的課程中,他對於算法的提問就是:當數據量小的時候,算法是可以的,重點在於當數據量很大的時候,如何解決問題?這是一個很實際的問題,因爲互聯網時代,最不缺少的就是數據。
在以後學習算法的過程中,自己要主動地思考:當算法遇到大數據時,能否改進並且改進的辦法是什麼?這裏,我記錄一下對於算法必要的思考:1.算法來源的實際問題與解決的其他問題. 2.算法的計算代價(時間/空間複雜度) 3.大數據下的處理辦法
有點扯遠了,在第10周的學習中,大數據下的處理辦法有以下幾種:
(1)梯度下降法的變種以及判斷算法收斂的方法
A. batch gradient descent: 在每一次的求梯度過程中,都使用所有的訓練樣本。
B. mini-batch gradient descent: 在求梯度時,每次使用b個樣本(b<樣本總數)
C. stochastic gradient descent: 求梯度時,每一次僅使用1個樣本(b=1)
在判斷算法收斂性的時候,對於A,直接畫出隨着迭代次數的圖像。對於C來說,判斷收斂的辦法就是,
在每b次的迭代過程中,畫出使用b個訓練樣本的損失函數的平均值隨着迭代次數的圖像。
對於B,C來說,如果想使用它們使得優化目標達到最優解,可以讓學習率隨着迭代次數的增加而減少。
(2)online learning:每一次僅使用一個樣本進行訓練
(3) Map‐reduce and data parallelism
(2),(3)這裏不細說了,以後去找個實踐經歷後理解纔會更深。
參考:
吳恩達coursera 機器學習