為模型選擇、特徵選擇和發布選擇分類性能指標
我有一個小的不平衡數據集(70 個正數,30 個負數),我一直在使用 BAC(平衡精度)和 AUC(曲線下面積)為 SVM 參數選擇模型。我在 libSVM 中為 C 參數使用了不同的類權重,以按照此處的建議(針對不平衡數據訓練決策樹)來抵消不平衡數據。
- 似乎 k 折交叉驗證誤差對性能度量的類型非常敏感。它本身也有一個錯誤,因為訓練和驗證集是隨機選擇的。例如,如果我用不同的隨機種子重複 BAC 兩次,我會得到不同的錯誤,隨後會得到不同的最優參數值。如果我平均重複 BAC 分數,平均 1000 次將給我不同的最佳參數值,而不是平均 10000 次。此外,改變折疊次數給了我不同的最佳參數值。
- 交叉驗證的準確度指標可能過於樂觀。通常任何超過 2 倍交叉驗證的東西都能給我 100% 的準確率。此外,由於樣本量小,錯誤率被離散化。模型選擇通常會給我在所有或大多數參數值上相同的錯誤率。
- 撰寫報告時,我如何知道分類是“好”還是“可接受”?在該領域,似乎我們沒有普遍接受的擬合優度或 p 值閾值之類的東西。由於我正在迭代地添加數據,我想知道什麼時候停止——在模型沒有顯著改善的情況下,什麼是好的 N?
鑑於上述問題,似乎無法輕鬆比較出版物之間的準確性,而 AUC 被描述為性能不佳的指標(例如,請參見此處或此處)。
關於如何解決這三個問題中的任何一個的任何建議?
似乎 k 折交叉驗證誤差對性能度量的類型非常敏感。它本身也有一個錯誤,因為訓練和驗證集是隨機選擇的。
我認為您已經發現績效指標的高差異是案例計數的比例,例如. 例如,您嘗試估計分類器返回正確答案的概率。從統計學的角度來看,這被描述為伯努利試驗,導致二項分佈。您可以計算二項分佈的置信區間,並且會發現它們非常寬。這當然會限制您進行模型比較的能力。
使用重採樣驗證方案(例如交叉驗證),您還有一個額外的變異來源:模型的不穩定性(當您構建每次 CV 運行期間的代理模型)
此外,改變折疊次數給了我不同的最佳參數值。
由於差異,這是可以預期的。您在這裡可能會有額外的效果:如果您使用 libSVM 內置的交叉驗證進行調整,libSVM 只會將數據拆分一次。由於 SVM 的性質,如果你用相同的訓練數據構建 SVM 並慢慢改變參數,你會發現支持向量(以及精度)跳躍:只要 SVM 參數差異不大,它仍然會選擇相同的支持向量。只有當參數變化足夠大時,才會突然產生不同的支持向量。因此,使用完全相同的交叉驗證拆分來評估 SVM 參數網格可能會隱藏可變性,您會在不同的運行之間看到這種可變性。
恕我直言,基本問題是您進行了網格搜索,這是一種優化,依賴於目標函數的合理平滑行為(準確性或您使用的任何其他內容)。由於您的性能測量存在很大差異,因此違反了此假設。SVM 模型的“跳躍”依賴性也違反了這個假設。
交叉驗證的準確度指標可能過於樂觀。通常任何超過 2 倍交叉驗證的東西都能給我 100% 的準確率。此外,由於樣本量小,錯誤率被離散化。模型選擇通常會給我在所有或大多數參數值上相同的錯誤率。
考慮到該方法的一般問題,這是可以預料的。
但是,通常可以選擇分類器崩潰的非常極端的參數值。恕我直言,SVM 運行良好的參數範圍是重要信息。
在任何情況下,您都絕對需要對您選擇為“最佳”的模型的性能進行外部(雙重/嵌套)驗證。
我可能會做一些外部交叉驗證或外部自舉驗證的運行/重複/迭代,並給出分佈
- “最佳”模型的超參數
- 報告的調整性能
- 觀察到的外部驗證性能
最後兩者之間的差異是過度擬合的指標(例如,由於“略過”方差)。
撰寫報告時,我如何知道分類是“好”還是“可接受”?在該領域,似乎我們沒有普遍接受的擬合優度或 p 值閾值之類的東西。由於我正在迭代地添加數據,我想知道什麼時候停止——在模型沒有顯著改善的情況下,什麼是好的 N?
(您要添加什麼?案例或變量/功能?)
首先,如果您進行迭代建模,您需要報告由於您的擬合程序,您的性能不會被認真對待,因為它受到樂觀偏差的影響。更好的選擇是對最終模型進行驗證。但是,其中的測試數據必須獨立於曾經進入訓練的所有數據或您的建模決策過程(因此您可能沒有任何此類數據)。