'沒有測量,就沒有科學'這是科學家門捷列夫的名言。在計算機科學特別是機器學習領域中,對模型的評估一樣相當重要,只有選擇與問題相匹配的評估方法,才能快速地發現模型選擇或訓練過程當中出現的問題,迭代地對模型進行優化。模型評估主要分爲離線評估和在線評估兩個階段。針對分類、排序、迴歸、序列預測等不一樣類型的機器學習問題,評估指標的選擇也有所不一樣。知道每種評估指標的精肯定義、有針對性地選擇合適的評估指標、更具評估指標的反饋進行模型調整,這些都是模型評估階段的關鍵問題python
準確率是指分類正確的樣本佔總樣個數的比例:\[Accuracy = \frac{n_{correct}}{n_{total}}\]算法
\(n_{correct}\)爲被正確分類的樣本個數,\(n_{total}\)爲總樣本的個數網絡
準確率的侷限性:準確率是分類問題中最簡單也是最直觀的評價指標,但存在明顯的缺陷,當不一樣總類的樣本比例很是不均衡時,佔比大的類別每每成爲影響準確率的最主要因素。好比:當負樣本佔99%,分類器把全部樣本都預測爲負樣本也能夠獲得99%的準確率,換句話說整體準確率高,並不表明類別比例小的準確率高app
精確率是指正確分類的正樣本個數佔分類器斷定爲正樣本的樣本個數的比例dom
召回率是指正確分類的正樣本個數佔真正的正樣本數的比例機器學習
Precison值和Recall值是既矛盾又統一的兩個指標,爲了提升Precison值,分類器須要儘可能在‘更有把握’時才把樣本預測爲正樣本,但此時每每會由於過於保守而漏掉不少‘沒有把握’的正樣本,致使Recall值下降函數
在排序問題中,一般沒有一個肯定的閾值把獲得的結果直接斷定爲正樣本或負樣本,而是採用TopN返回結果的Precision值和Recall值來衡量排序模型的性能,即認爲模型返回的TopN的結果就是模型斷定的正樣本,而後計算N個位置上的Precision和前N個位置上的Recall性能
F1分數是精度和召回率的諧波平均值,正常的平均值平等對待全部的值,而諧波平均值回給予較低的值更高的權重,所以,只有當召回率和精度都很高時,分類器才能獲得較高的F1分數
\[F_1 = \frac{1}{\frac{1}{精度}+\frac{1}{召回率}}\]學習
F1分數對那些具備相近的精度和召回率的分類器更爲有利。但這並不必定能符合你的指望,在某些狀況下,你更關心的是精度,而另外一些狀況下,你可能真正關心的是召回率。精確率與召回率的權衡將是很值得思考的問題。測試
均方偏差:\[MSE =\frac{1}{n}\sum_{i=1}^n(y_{pred} - y_i)^2\]
根均方偏差:\[RMES = \sqrt{MSE}\]
均方偏差和根均方偏差都會受到異常值的影響,而影響最終的模型評估
平均絕對百分比偏差:\[MAPE = \sum_{i=1}^n|\frac{(y_{pred}-y_i)}{y_i}|*\frac{100}{n}\]
平均絕對百分比偏差提升了異常值的魯棒性,至關於把每一個點的偏差進行了歸一化處理,下降了個別離羣帶來的絕對偏差的影響
二值分類器是機器學習領域中最多見也是應用最普遍的分類器。評價二值分類器的指標不少,好比precision,recall,F1 score,P-R曲線等,但發現這些指標或多或少只能反映模型在某一方面的性能,相比而言,ROC曲線則有不少優勢,常常做爲評估二值分類器最重要的指標之一
ROC曲線是Receiver Operating Characteristic Curve的簡稱,中文名爲'受試者工做特徵曲線'
ROC曲線的橫座標爲假陽性率(FPR),縱座標爲真陽性率(TPR),FPR和TPR的計算方法分別爲:\[FPR = \frac{FP}{N}\] \[TPR = \frac{TP}{P}\]
P是真實的正樣本數量,N是真實的負樣本數量,TP是P個正樣本中被分類器預測爲正樣本的個數,FP爲N個負樣本中被預測爲正樣本的個數
建立數據集
import pandas as pd column_name = ['真實標籤','模型輸出機率'] datasets = [['p',0.9],['p',0.8],['n',0.7],['p',0.6], ['p',0.55],['p',0.54],['n',0.53],['n',0.52], ['p',0.51],['n',0.505],['p',0.4],['p',0.39], ['p',0.38],['n',0.37],['n',0.36],['n',0.35], ['p',0.34],['n',0.33],['p',0.30],['n',0.1]] data = pd.DataFrame(datasets,index = [i for i in range(1,21,1)],columns=column_name) print(data)
真實標籤 模型輸出機率 1 p 0.900 2 p 0.800 3 n 0.700 4 p 0.600 5 p 0.550 6 p 0.540 7 n 0.530 8 n 0.520 9 p 0.510 10 n 0.505 11 p 0.400 12 p 0.390 13 p 0.380 14 n 0.370 15 n 0.360 16 n 0.350 17 p 0.340 18 n 0.330 19 p 0.300 20 n 0.100
繪製ROC曲線
# 計算各類機率狀況下對應的(假陽率,真陽率) points = {0.1:[1,1],0.3:[0.9,1],0.33:[0.9,0.9],0.34:[0.8,0.9],0.35:[0.8,0.8], 0.36:[0.7,0.8],0.37:[0.6,0.8],0.38:[0.5,0.8],0.39:[0.5,0.7],0.40:[0.4,0.7], 0.505:[0.4,0.6],0.51:[0.3,0.6],0.52:[0.3,0.5],0.53:[0.2,0.5],0.54:[0.1,0.5], 0.55:[0.1,0.4],0.6:[0.1,0.3],0.7:[0.1,0.2],0.8:[0,0.2],0.9:[0,0.1]} X = [] Y = [] for value in points.values(): X.append(value[0]) Y.append(value[1]) import matplotlib.pyplot as plt plt.scatter(X,Y,c = 'r',marker = 'o') plt.plot(X,Y) plt.xlim(0,1) plt.ylim(0,1) plt.xlabel('FPR') plt.ylabel('TPR') plt.show()
AUC指ROC曲線下的面積大小,該值可以量化地反映基於ROC曲線衡量出的模型性能,AUC越大說明分類器越可能把真正的正樣本排在前面,分類性能越好
ROC曲線相比P-R曲線,當正負樣本的分佈發生變化時,ROC曲線的形狀可以保存基本不變,而P-R曲線的形狀通常會發生激烈的變化,這個特色讓ROC曲線可以儘可能下降不一樣測試集帶來的干擾,更加客觀地衡量模型自己的性能
Holdout檢驗是最簡單也是最直接的驗證方法,它將原始的樣本隨機劃分爲訓練集和驗證集兩部分。sklearn.model_selction.train_test_split函數就是使用該方法。比方說,將樣本按照70%-30%的比例分紅兩部分,70%的樣本用於模型訓練,30%的樣本用於模型驗證
Holdout檢驗的缺點很明顯,即在驗證集上計算出來的評估指標與原始分組有很大關係,爲了消除隨機性,研究者們引入了'交叉驗證'的思想
k-flod交叉驗證:首先將所有樣本劃分紅K個大小相等的樣本子集,依次遍歷這k個子集,每次把當前子集做爲驗證集,其他的子集做爲訓練集。最後把K次評估指標的平均值做爲最終的評估指標,在實際實驗中,K常常取10
留一驗證:每次留下一個樣本做爲驗證集,其他全部樣本做爲測試集,樣本總數爲n,依次對n個樣本進行遍歷,進行n次驗證,再將評估指標求平均值獲得最終的評估指標,在樣本總數較多的狀況下,留一驗證法的時間開銷極大
無論是Holdout檢驗仍是交叉驗證,都是基於劃分訓練集和測試集的方法進行模型評估的,然而,當樣本規模較小時,將樣本集進行劃分會讓訓練集進一步減小,這可能會影響模型訓練效果,自助法是能夠維持訓練集樣本規模的驗證方法
自助法是基於自助採樣法的檢驗方法,對於總數爲n的樣本集合,進行n次有放回的隨機抽樣,獲得大小爲n的訓練集,n次採樣過程當中,有的樣本會被重複採樣,有的樣本沒有被抽到過,將這些沒有被抽到過的樣本做爲訓練集,進行模型驗證
爲了進行超參數調優,通常會採用網格搜索、隨機搜索、貝葉斯優化等算法。超參數搜索算法通常包括如下幾個要素:
網格搜索多是最簡單、應用最普遍的超參數搜索算法,它經過查找搜索範圍內的全部的點來肯定最優值。若是採用較大的搜索範圍以及較小的步長,網格搜索有很大機率找到全局最優解,然而這種搜索方案十分消耗計算資源和時間,特別是須要調優的超參數比較的時候,所以,在實際應用過程當中,網格搜索法通常會先使用較大的搜索範圍和較大的步長,來尋找全局最優解可能的位置,而後會逐漸縮小搜索範圍和步長,來尋找更精確的最優值,這種操做方案能夠下降所需的時間和計算量,但因爲目標函數通常是非凸的,全部極可能會錯過全局最優解,sklearn提供了GridSearchCV類實現網格搜索
隨機搜索的思想與網格搜索的思想比較類似,只是再也不測試上界和下界之間的全部值,而是在搜索範圍中隨機選取樣本點。它的理論依據是,若是樣本點足夠大,那麼經過隨機採樣也能大機率地找到全局最優解或近似解,隨機搜索通常會比網格搜索要快一些,可是和網格搜索的快速版同樣,它的結果也是無法保證的,sklearn提供了RandomizedSearchCV類實現隨機搜索
貝葉斯優化算法在尋找最優超參數時,採用了與網格搜索,隨機搜索徹底不一樣的方法,網格搜索和隨機搜索在測試一個新點時,會忽略前一個點的信息,而貝葉斯優化算法則充分利用了以前的信息,貝葉斯優化算法經過對目標函數形狀進行學習,找到使目標函數向全局最優值提高的參數。具體來講,它學習目標函數形狀的方法是,首先根據先驗分佈,假設一個搜索函數,而後,每一次使用新的採樣點來測試目標函數時,利用這個信息來更新目標函數的先驗分佈,最後,算法測試由後驗分佈給出的全局最值最可能出現的位置的點。
對於貝葉斯優化算法,有一個須要注意的地方,一旦找到了一個局部最優值,它會在該區域不斷採樣,因此很容易陷入局部最優值,爲了彌補這個缺陷,貝葉斯優化算法會在探索和利用之間找到一個平衡點,'探索'就是在還未取樣的區域獲取採樣點,而'利用'則是根據後驗分佈在最可能出現全局最優值的區域進行採樣
參考資料: