考慮SVM中不同類型錯誤的不同成本讓Y爲二元變量。如何使用R
如果我們使用邏輯迴歸進行建模,那麼我們可以使用cv.glm
進行交叉驗證,我們可以在cost
參數中指定成本函數。通過指定成本函數,我們可以爲不同類型的錯誤分配不同的單位成本:預測是|參考是否或預測否|參考是是。
我想知道是否可以在SVM中實現同樣的功能。換句話說,我有沒有辦法指定一個成本(損失)函數而不是使用內置損失函數?
考慮SVM中不同類型錯誤的不同成本讓Y爲二元變量。如何使用R
如果我們使用邏輯迴歸進行建模,那麼我們可以使用cv.glm
進行交叉驗證,我們可以在cost
參數中指定成本函數。通過指定成本函數,我們可以爲不同類型的錯誤分配不同的單位成本:預測是|參考是否或預測否|參考是是。
我想知道是否可以在SVM中實現同樣的功能。換句話說,我有沒有辦法指定一個成本(損失)函數而不是使用內置損失函數?
除了Yueguoguo的回答,還有三個解決方案,標準Wrapper方法,超平面調整和e1017中的一個。
Wrapper方法(例如weka中可用的開箱即用方法)幾乎適用於所有分類器。這個想法是根據誤分類成本對數據進行超量或欠採樣。經過訓練以優化準確度的學習模型在成本下是最佳的。
第二個想法經常用在textminining中。分類是svm從距超平面的距離導出。對於線性可分問題,支持向量的距離爲{1,-1}。那麼新例子的分類基本上就是這個距離是正值還是負值。然而,人們也可以改變這個距離而不是作出決定,而是將其移動到例如0.8。這樣,分類向一個方向或另一個方向移動,而數據的一般形狀不會改變。
最後,一些機器學習工具包內置參數,用於類別特定成本,如class.weights
的e1017
實現。這個名字是由於cost
這個詞已被預先佔用。
由於算法的美麗理論基礎,SVM超平面參數的損失函數會自動調整。 SVM應用交叉驗證來調整超參數。比方說,使用RBF內核,交叉驗證是選擇最佳性能的C(成本)和gamma(內核參數)的最佳組合,以某些度量標準衡量(例如均方誤差)。在e1071中,可以使用tune
方法獲得性能,其中可以指定超參數的範圍以及交叉驗證的屬性(即5,10或更多倍交叉驗證)。
要使用Area-Under-Curve類型的誤差測量獲得比較交叉驗證結果,可以使用不同的超參數配置訓練不同的模型,然後根據預先標記的數據集合驗證模型。
希望答案有幫助。
您的回答與接受的答案相比是正確的。我接受另一個,因爲它提供了更多的選項和編程細節的更多細節。謝謝。 – Rwitch
謝謝。我試圖從理論的角度來解釋。 CAFEBABE的答案在實際細節方面更好。 – Yueguoguo