如何有效地執行神經網絡建模?
觀察數和變量數的比例應該是多少?如何檢測神經網絡模型中的過擬合以及避免過擬合的方法有哪些?如果我想用神經網絡進行分類,這些類應該有相同的頻率嗎?請幫幫我。
我會給出的建議如下:
- 在進入神經網絡之前,用盡線性模型(例如邏輯回歸)的可能性,特別是如果你有很多特徵並且沒有太多的觀察。對於許多問題,神經網絡的性能並沒有超過簡單的線性分類器,而確定你的問題是否屬於這一類的唯一方法就是嘗試一下。
- 首先研究核方法(例如支持向量機 (SVM)、核邏輯回歸)、高斯過程模型。在這兩種情況下,過度擬合都可以通過調整少量超參數來有效控制。對於核方法,這通常通過交叉驗證來執行,對於高斯過程模型,這是通過最大化邊際似然(也稱為模型的貝葉斯“證據”)來執行的。我發現使用這些方法比使用神經網絡更容易獲得合理的模型,因為避免過度擬合的方法要簡單得多。
- 如果您真的想使用神經網絡,請從(正則化的)徑向基函數網絡開始,而不是前饋多層感知器(MLP)類型的網絡。
- 如果您確實使用 MLP,則使用正則化。如果這樣做,它將對架構的選擇不那麼敏感,例如優化隱藏單元的數量。相反,您所要做的就是為正則化參數選擇一個好的值。MacKay 的貝葉斯“證據框架”提供了一種設置正則化參數的好方法。如果你使用正則化,那麼觀察的數量和變量的數量就不是什麼問題了。
要檢測過擬合,只需執行交叉驗證來測試泛化性能。
至於頻率相等的類,要記住的是,如果你用一個平衡的訓練集訓練一個模型,但這些類在操作數據中不平衡,那麼該模型很可能低估了少數類。如果您使用概率分類器(例如邏輯回歸或神經網絡),則始終可以在訓練後糾正估計的概率以解決該問題。如果您的數據集非常不平衡,我建議對正類和負類的模式進行差異加權,並通過交叉驗證選擇權重因子。
然而,當類別非常不平衡時,通常情況下,假陰性和假陽性錯誤具有不同的成本(例如,在醫學篩查測試中,假陰性比假陽性更糟糕)。所以通常你需要做的就是將錯誤分類成本包含在用於訓練網絡的誤差函數中。
如果您是 MATLAB 用戶(像我一樣),我強烈推薦 NETLAB 軟件(Ian Nabney 和 Chris Bishop)或與 Rasmussen 和 Williams 的 Gaussian Process for Machine Learning 一書配套的軟件。我還可以向任何剛開始接觸神經網絡的人強烈推薦 Chris Bishop 的《用於模式識別的神經網絡》一書。這是一本很棒的書,內容非常清晰,涵蓋了真正理解您在做什麼所需的最低數學水平,並且大部分內容都是在 NETLAB 軟件中實現的(也可以在 Octave 下運行)。
高溫高壓
PS 使用神經網絡建模的最佳方法可能是使用基於 Radford Neal 開發的基於混合蒙特卡羅 (HMC) 的貝葉斯方法。通常,當您嘗試優化某些參數並最終導致過度擬合時,問題就始於建模。最好的解決方案是永遠不要優化任何東西,而是邊緣化(整合)參數。遺憾的是,這種集成無法通過分析執行,因此您需要改用基於採樣的方法。然而,這是 (a) 計算量大, (b) 有點“黑魔法”,需要深入的理解和經驗。