用於 SVM 參數估計的網格搜索
我目前正在嘗試使用 gridsearch 來訓練支持向量機。我知道,如果我有參數 gamma 和 C,R 函數 tune.svm 會對這兩個參數的所有組合執行 10 倍交叉驗證。
因為我不知道如何開始,所以我試圖獲取一些關於它的信息,例如wikipedia 2建議的值不是線性的,例如 {10、100、1000} 範圍內的 C。
到目前為止,我使用了我的第二個維基百科鏈接中的示例,即:
gammas = 2^(-15:3) costs = 2^(-5:15)
結果是 399 種組合。
這需要非常非常長的時間(約 2000 個樣本)。例如,對於內核“徑向”,我最好的結果是 gamma = 0.5 和 cost = 2。
如果我只使用 (1, 2, 3, 4, … 10) 之類的值作為成本,使用 (0, 0.5, 1, 1.5, 2) 作為伽馬值,我不能得到相同的結果嗎?我知道這個例子是構造的,因為我已經知道結果。
我的問題:
但為什麼會出現這種指數規模?
0 和 1 之間的值太多了,我認為這是在浪費計算時間,而且只有很少的非常大的數字,以至於無論如何都找不到非常精確的結果。如果用它來尋找更小的範圍,這對我來說才有意義,假設我們知道最好的成本是 2^3,然後我們圍繞它進行搜索。但是沒有任何地方提到以這種方式執行。
指數網格的原因是 C 和 gamma 都是乘法作用的尺度參數,因此將 gamma 加倍可能與將其減半一樣大(但在另一個方向上)。這意味著,如果我們使用近似指數增長值的網格,則通過在每個網格點評估模型選擇標準獲得的超參數的“信息”量大致相同。
我通常在基於 2 的整數冪的網格上進行搜索,這似乎效果很好(我正在寫一篇關於優化網格搜索的論文——如果你使用太細的網格,你最終可能會過度擬合模型選擇標準,所以一個相當粗糙的網格被證明有利於泛化和計算開銷。)。
至於大範圍,不幸的是,最佳超參數值取決於問題的性質,以及數據集的大小,無法先驗確定。大的,顯然是浪費的網格的原因是為了確保可以自動找到好的值,並且概率很高。
如果計算費用是一個問題,那麼您可以使用Nelder-Mead 單純形算法來優化交叉驗證誤差,而不是使用網格搜索。這是一種不需要梯度信息的優化算法,因此對於當前使用網格搜索的任何問題都非常簡單。我不是 R 用戶,但 Nelder-Mead 在 R 中通過
optim
.