模型評估與驗證(一)

​ 最近在搞樸素貝葉斯算法的DGA檢測的時候,將網上開源的代碼down下來在機子上跑了一下,代碼與原理也專研明白了一些。但是有個問題在我心裏一直揮之不去,詳情如下(若要了解更多可以到我主頁看樸素貝葉斯之DGA檢測系列博客)

《web安全深度學習實戰》的樸素貝葉斯運行結果(爲了方便描述以下成爲A結果):

C:\Users\xingchi\AppData\Roaming\Typora\typora-user-images\image-20191201105939975.png

《web安全機器學習入門》的樸素貝葉斯運行結果(爲了方便描述以下成爲B結果):
在這裏插入圖片描述
​ 雖然沒有報錯,運行結果也出來了,但是爲何同樣的算法運行出來的結果是不同?難道說評估的指標不一樣?那這兩個結果存在着什麼關聯嗎?

探索之路

​ (一)首先第一步想到的是探究這個運行結果的含義,結果A的參數意思爲

參數 含義
precision 正確預測的個數(TP)/被預測正確的個數(TP+FP)
recall 正確預測的個數(TP)/預測個數(TP+FN)
f1-score 定義爲準確率和召回率的調和平均數,用它來綜合評估模型性能
support 某類別在測試數據中的樣本個數
accuracy 準確率是指在分類中,使用測試集對模型進行分類,分類正確的記錄個數佔總記錄個數的比例
macro avg 每個類別評估指標未加權的平均值,比如準確率的 macro avg,(0.50+0.00+1.00)/3=0.5
weighted avg 加權平均,比如第一個值的計算方法,(0.50*1 + 0.0*1 + 1.0*3)/5 = 0.70

​ 在下面的數字則是混淆矩陣:

正確的、相關的(wanted) 不正確的、不相關的
檢測出來的 TP(True Positives) FP(False Positives)
未檢測出來的 TN(True Negatives) FN(False Negatives)

​ 準確率,召回率都是根據這些參數得出

​ 而結果B則是一串小數,類似於命中率的東西,沒什麼新發現。

​ (二)結果沒什麼新發現,就去探索對應的函數,看他是幹嘛的。

​ 結果A中,classification_report 用於輸出正確率等評估參數,confusion_matrix 則用於輸 出混淆矩陣。結果B中負責輸出的函數是cross_val_score。

​ cross_val_score是驗證函數,把初始訓練樣本分成k份,其中(k-1)份被用作訓練集, 剩下一份被用作驗證集,這樣一共可以對分類器做k次訓練,並且得到k-1個訓練結果與1個驗 證結果。

在這裏插入圖片描述
​ 知道了各個函數的大概是幹嘛的,但是心裏面還是有很大疑惑,他們這些函數肯定是在 某個特定的場合上用的,他們究竟存在什麼聯繫?都是模型使用的返回結果,我怎麼知道什麼 場合用哪個?

​ (三)從sklearn中文手冊入手,他們都是出自於sklearn庫。

在這裏插入圖片描述

​ 官方的說法給了我一些頭目,交叉驗證用於評估器的表現,classification_report 等方法 是量化預測的質量中的一個方法,評估有很多指標因素參考。到這裏,還是一頭霧水,無法得 知他們的聯繫(現在回想起來,可能是他描述得太官方,很多術語不理解造成的)

​ (四)直到看到這兩篇文章,我的認識才初有了輪廓

評估機器學習

機器學習模型評價(Evaluating Machine Learning Models)-主要概念與陷阱

​ 一般的,機器學習過程包括兩個階段,分別爲:原型設計階段(Prototyping)與應用階 段(Deployed),與軟件開發類似的Debug與Release階段 . Prototyping階段是使用歷史數 據訓練一個適合解決目標任務的一個或多個機器學習模型,並對模型進行驗證(Validation) 與離線評估(Offline evalutation),然後通過評估指標選擇一個較好的模型。如在分類任務 中,選擇一個適合自己問題的最好的分類算法。Deployed階段是當模型達到設定的指標值時 便將模型上線,投入生產,使用新生成的數據來對該模型進行在線評估,以及使用新數據更新 模型。在對模型進行離線評估或者在線評估時,它們所用的評價指標往往不同。如在離線評估 中,我們使用的有準確率(accuracy)、精確率-召回率,而在在線評估中,一般使用一些商 業評價指標,如用戶生命週期值、廣告點擊率(click through rate)、用戶流失率(customer churn rate)等,這些指標纔是模型使用者最終關心的一些指標。甚至在對模型進行訓練和驗 證過程中使用的評價指標都不一樣。

​ 在機器學習中,很多模型都是假設數據的分佈是一定的,不變的,即歷史數據與將來的 數據都服從相同的分佈。但是,在現實生活中,這種假設往往是不成立的,即數據的分佈會隨 着時間的移動而改變,有時甚至變化得很急劇,這種現象稱爲分佈漂移。例如,在文章推薦系 統中,文章的主題集數目和主題的發生頻率可能是每天改變的,甚至每個小時都在改變,昨天 流行的主題在今天可能就不再流行了。如在新聞推薦中,新聞主題就變更得非常快。因此在進 行模型構建之時,我們需要去撲捉分佈漂移信息並使自己的模型能夠應對這種情況。一個常用 的方法便是使用一些驗證指標對模型在不斷新生的數據集上進行性能跟蹤。如果指標值能夠達 到模型構建時的指標值,那麼表示模型能夠繼續對當前數據進行擬合。當性能開始下降時,說 明該模型已經無法擬合當前的數據了,因此需要對模型進行重新訓練了。

​ 現在我知道了,結果A是模型離線評估(我們做研究一般很難有實施新的數據,一般是歷 史數據)的一些重要指標,不同算法有不同的分類直標,例如有迴歸評價指標,分類評價指 標,排序評價指標等。結果B僅僅是用於模型驗證

​ (五)最終框架浮現

模型評估和驗證【2】——交叉驗證、網格搜索與模型評估

​ 看到這篇文章,我纔是真正的恍然大悟。引用文章的圖,描述了算法評估流程

img

​ 我們拿到數據,會分成訓練集和測試集合,測試集用classification_report 等這些方法返回 來的評估指標來評估該模型的好壞,而訓練集是拿去訓練算法的,但是在訓練的過程中爲了繼 續調參,將各個參數調整到最優,通常需要把訓練集又分爲訓練集和驗證集,其中驗證集就是 用到cross_val_score等交叉驗證函數。最後整個思路框架已浮現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章