我目前正在使用帶有線性內核的SVM對數據進行分類。訓練集上沒有錯誤。我為參數$ C $($ 10 ^ {-5},\ dots,10 ^ 2 $)嘗試了多個值。
現在Iwonder:這是我正在使用的 libsvm
的ruby綁定引起的錯誤嗎? rb-libsvm)還是從理論上講是可以解釋的?
參數$ C $是否總是會改變分類器的性能?
我目前正在使用帶有線性內核的SVM對數據進行分類。訓練集上沒有錯誤。我為參數$ C $($ 10 ^ {-5},\ dots,10 ^ 2 $)嘗試了多個值。
現在Iwonder:這是我正在使用的 libsvm
的ruby綁定引起的錯誤嗎? rb-libsvm)還是從理論上講是可以解釋的?
參數$ C $是否總是會改變分類器的性能?
在SVM中,您正在搜索兩件事:具有最大最小邊距的超平面,以及正確分隔盡可能多實例的超平面。問題在於您將無法總是同時獲得這兩件事。 c參數決定了您對後者的渴望。我在下面畫了一個小例子來說明這一點。左側有一個低c,給您一個很大的最小余量(紫色)。但是,這要求我們忽略未能正確分類的藍色圓圈離群值。在右側,您的c高。現在,您將不會忽略異常值,從而得到較小的邊距。
那麼,這些分類器中哪一個最好?這取決於您將要預測的未來數據的樣子,而大多數情況下您當然不知道。如果未來數據看起來像這樣:
然後,分類器使用大量c值最佳。
另一方面,如果將來的數據如下所示:
,則使用低c值學習的分類器最佳。
>根據您的數據集,更改c可能會或可能不會產生不同的超平面。如果它確實產生了不同的超平面,則並不意味著您的分類器將針對您用於分類的特定數據輸出不同的類。 Weka是用於可視化數據並為SVM進行不同設置的一個很好的工具。它可能有助於您更好地了解數據的外觀,以及為什麼更改c值不會改變分類錯誤。通常,訓練實例少且屬性多使線性分離數據更容易。同樣,您正在評估訓練數據而不是新的看不見的數據這一事實也使得分離更加容易。
您要從哪種數據中學習模型?多少數據?我們看到了嗎?
C參數告訴SVM優化要避免對每個訓練示例進行錯誤分類的數量。對於較大的C值,如果該超平面在正確分類所有訓練點方面做得更好,則優化將選擇一個較小邊距的超平面。相反,很小的C值將導致優化器尋找較大利潤的分離超平面,即使該超平面對更多點進行了錯誤分類。對於很小的C值,即使訓練數據是線性可分離的,您也應該經常得到錯誤分類的示例。
正確調整C是使用SVM的最佳實踐中至關重要的一步,因為結構風險最小化(基本方法背後的關鍵原理)是通過調整C實現的。參數C強制執行權重範數的上限,這意味著存在由C索引的一組嵌套的假設類別。隨著我們增加C,我們會增加假設類別的複雜性(如果我們稍微增加C,我們仍然可以形成所有增加權重允許範數的上限之前我們可以做的線性模型,以及我們以前做過的線性模型。因此,除了通過最大餘量分類實現SRM之外,還可以通過控制C限制假設類的複雜性來實現它。
遺憾的是,確定如何設置C的理論在此刻,大多數人傾向於使用交叉驗證(如果他們做了任何事情)。
C是一個正則化參數,它控制在實現低訓練誤差和低測試誤差之間進行折衷的方法,該誤差可以將分類器推廣到看不見的數據。
請考慮a的目標函數線性SVM:最小值| w | ^ 2 + C∑ξ。如果您的C太大,優化算法將嘗試降低| w |。盡可能多地導致嘗試對每個訓練示例正確分類的超平面。這樣做會導致分類器的泛化屬性損失。另一方面,如果C太小,則給目標函數一定的自由度以增加| w |。很多,這將導致較大的訓練錯誤。
下面的圖片可能會幫助您直觀地看到它。
以上答案非常好。仔細閱讀您的問題後,我發現有兩個重要的事實可能會被我們忽略。
鑑於這兩個事實,如果C值在合理範圍內變化,則最佳超平面將僅在邊緣(由支持向量形成的間隙)內隨機少量移動。
直覺上,假設訓練數據的邊距很小,並且/或者在邊距內也沒有測試數據點,則在邊距內最優超平面的移動不會影響測試集的分類誤差。
儘管如此,如果將C設置為0,則SVM將忽略錯誤,並嘗試最小化權重的平方和(w),也許在測試集上可能會得到不同的結果。
C參數用於控制離群值-低C表示允許更多的離群值,高C表示允許更少的離群值。
高C(成本)意味著錯誤分類的成本增加。這意味著靈活的內核將變得更加彎曲,以避免在訓練集中對觀察結果進行錯誤分類。
如果內核將簡化為 ,則在對新數據進行預測時,該模型不能很好地推廣。
如果內核要直接使用 ,則在對新數據進行預測時,該模型不能很好地推廣。