[英]sklearn - model keeps overfitting
我正在尋找關於我當前機器學習問題的最佳前進方法的建議
問題的概要和我所做的如下:
你可以在這里找到一個縮短版的代碼: http : //pastebin.com/Xu13ciL4
我的問題:
現在,這似乎是過度擬合的經典案例。 然而,這里的過度擬合不太可能是由於樣本的特征數量不成比例(32個特征,900個樣本)。 我已經嘗試了很多方法來緩解這個問題:
我很高興繼續思考這個問題,但此時我正在尋找正確方向的推動。 我的問題可能在哪里,我可以做些什么來解決它?
完全有可能我的一組功能只是不區分這兩個類別,但我想在跳到這個結論之前嘗試其他一些選項。 此外,如果我的功能沒有區分,那么這將解釋低測試組分數,但在這種情況下如何獲得完美的訓練集分數? 那可能嗎?
我首先嘗試對參數空間進行網格搜索,但同時也在訓練集上使用k折交叉驗證(並將測試集保持在一邊)。 然后選擇一組參數,而不是從k折交叉驗證中推廣出最佳參數。 我建議將GridSearchCV與StratifiedKFold一起使用(當將分類器作為估計器傳遞時,它已經是GridSearchCV的默認策略 )。
假設具有rbf的SVM可以完美地適合任何訓練集,因為VC維度是無限的。 因此,如果調整參數無助於減少過度擬合,那么您可能希望針對更簡單的假設嘗試類似的參數調整策略,例如線性SVM或您認為可能適合您的域的其他分類器。
正如你所提到的那樣,正規化絕對是個好主意。
對同一標簽的預測使我認為標簽不平衡可能是一個問題,在這種情況下,您可以使用不同的類權重。 因此,在SVM的情況下,每個類都獲得其自己的C懲罰權重。 sklearn中的一些估算器接受擬合參數,允許您設置樣本權重以設置單個訓練樣本的懲罰量。
現在,如果你認為這些特征可能是一個問題,我會通過查看f_classif提供的F值來使用特征選擇,並且可以使用像SelectKBest這樣的東西。 另一種選擇是通過交叉驗證來消除遞歸特征。 如果您使用sklearns Pipeline API,則功能選擇也可以包含在網格搜索中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.