題:
C在具有線性內核的SVM中有什麼影響?
alfa
2012-06-24 00:54:56 UTC
view on stackexchange narkive permalink

我目前正在使用帶有線性內核的SVM對數據進行分類。訓練集上沒有錯誤。我為參數$ C $($ 10 ^ {-5},\ dots,10 ^ 2 $)嘗試了多個值。

現在Iwonder:這是我正在使用的 libsvm 的ruby綁定引起的錯誤嗎? rb-libsvm)還是從理論上講是可以解釋的

參數$ C $是否總是會改變分類器的性能?

只是一個評論,而不是答案:*任何一個最小化兩個術語之和的程序,例如$ | w | ^ 2 + C \ sum {\ xi_i},$應該(恕我直言)告訴您這兩個術語的含義最後,以便您了解它們之間的平衡。 (要獲得有關自己計算兩個SVM術語的幫助,請嘗試提出一個單獨的問題。您是否看過一些最差的問題?可以提出與您類似的問題嗎?)
七 答案:
Kent Munthe Caspersen
2015-06-28 21:04:19 UTC
view on stackexchange narkive permalink

在SVM中,您正在搜索兩件事:具有最大最小邊距的超平面,以及正確分隔盡可能多實例的超平面。問題在於您將無法總是同時獲得這兩件事。 c參數決定了您對後者的渴望。我在下面畫了一個小例子來說明這一點。左側有一個低c,給您一個很大的最小余量(紫色)。但是,這要求我們忽略未能正確分類的藍色圓圈離群值。在右側,您的c高。現在,您將不會忽略異常值,從而得到較小的邊距。

enter image description here

那麼,這些分類器中哪一個最好?這取決於您將要預測的未來數據的樣子,而大多數情況下您當然不知道。如果未來數據看起來像這樣:

large c is best然後,分類器使用大量c值最佳。

另一方面,如果將來的數據如下所示:

low c is best,則使用低c值學習的分類器最佳。

>

根據您的數據集,更改c可能會或可能不會產生不同的超平面。如果它確實產生了不同的超平面,則並不意味著您的分類器將針對您用於分類的特定數據輸出不同的類。 Weka是用於可視化數據並為SVM進行不同設置的一個很好的工具。它可能有助於您更好地了解數據的外觀,以及為什麼更改c值不會改變分類錯誤。通常,訓練實例少且屬性多使線性分離數據更容易。同樣,您正在評估訓練數據而不是新的看不見的數據這一事實也使得分離更加容易。

您要從哪種數據中學習模型?多少數據?我們看到了嗎?

我已經3年沒有接觸數據了。這是一個非常高的維度,而且嘈雜,我無權發表。該問題已經得到了回答,但是我認為您的可視化效果非常好且直觀。
太棒了您對伽馬值也有這樣的解釋嗎?
gamma參數用於高斯核函數。內核函數可以看作是將原始要素轉換到另一個空間的有效方法,其中新要素空間中的分離超平面不必在原始要素空間中呈線性。例如,原始要素空間中數據點的二維位置可用於計算代表距地圖上某個標記的距離的新要素。利用這一新功能,可以製作非線性分類器(在原始空間中),決策邊界在標記周圍形成一個圓
-1
您能從這本書中引用@diugalde嗎?與我的解釋完全不同嗎?我一直認為c是錯誤分類的代價(分類中c容易記住)。這樣,較高的c意味著錯誤分類的高昂代價,從而導致該算法試圖完美分離所有數據點。對於異常值,這並非總是可能或不會總是導致良好的總體結果,這是降低/引入c的充分理由。
好答案。謝謝
Marc Shivers
2012-06-24 01:43:19 UTC
view on stackexchange narkive permalink

C參數告訴SVM優化要避免對每個訓練示例進行錯誤分類的數量。對於較大的C值,如果該超平面在正確分類所有訓練點方面做得更好,則優化將選擇一個較小邊距的超平面。相反,很小的C值將導致優化器尋找較大利潤的分離超平面,即使該超平面對更多點進行了錯誤分類。對於很小的C值,即使訓練數據是線性可分離的,您也應該經常得到錯誤分類的示例。

好的,我知道C決定了錯誤分類對目標函數的影響。目標函數是正則項和誤分類率的總和(請參閱http://en.wikipedia.org/wiki/Support_vector_machine#Soft_margin)。當我更改C時,這對我的目標函數的最小值沒有任何影響。這是否意味著正則項總是很小?
我建議嘗試更廣泛的C值範圍,例如10 ^ [-5,...,5],如果對數據集的優化速度很快,則可以嘗試更大的值,以查看是否獲得了看起來更合理的值。訓練誤差和最小成本的值都應隨著C的變化而變化。另外,您的數據規模是否極端?通常,按比例縮小數據時,最佳C參數應該較大,反之亦然,因此,如果要素的值很小,請確保為可能的C值包括很大的值。如果以上方法均無濟於事,我會*猜*問題出在Ruby綁定中
我所說的部分錯誤。實際上,C的值會產生影響,但它是邊際的。我正在測試集上計算平衡精度((tp /(tp + fn)+ tn /(tn + fp))/ 2)。如果復雜度為10 ^ -5或10 ^ -4,則平衡精度為0.5。當我將C設置為10 ^ -3時為0.79,對於C = 10 ^ -2則為0.8,對於C = 10 ^ -1則為0.85,對於C = 10 ^ 0,...,10 ^ 7是0.86,這似乎是此處的最佳值。將數據標準化,以使標準偏差為1,平均值為0。
將平衡精度從0.5(只是猜測)更改為0.86聽起來對我來說沒有什麼邊際影響。正如Marc所建議的那樣,研究C的更細的值網格是個好主意,但是您給出的結果似乎是正常的行為。人們可能會期望由於C過度擬合而使誤差趨於無窮大,因此誤差會再次上升,但在這種情況下,這似乎並不是什麼大問題。請注意,如果您對平衡誤差真的很感興趣並且您的訓練集沒有50:50的比例,那麼您可能可以獲得更好的結果...
通過對屬於正類別和負類別的模式使用不同的C值(在漸近上等效於重新採樣數據以更改屬於每個類別的模式的比例)。
確實,這不是邊緣性的。 :D使我感到困惑的是C = 10 ^ 0,...,10 ^ 7(我認為i> 7的10 ^ i也會產生完全相同的混淆矩陣(實際上應該是最好的結果)。高複雜度意味著正則項的影響微不足道。我認為這意味著正則項實際上會使結果惡化嗎?
我認為,一旦達到C = 10 ^ 0,SVM就可能已經正確地對所有訓練數據進行了分類,並且沒有任何支持向量被綁定(alpha等於C),在這種情況下,使C更大對解決方案沒有影響。
@MarcShivers“通常,按比例縮小數據時,最佳C參數應該較大,反之亦然,因此,如果要素的值很小,請確保為可能的C值包括很大的值。”如何證明在SVM公式中?
C的值不會影響線性核,它只會以@MarcShivers編寫的方式影響其他核。
Dikran Marsupial
2012-06-25 17:52:34 UTC
view on stackexchange narkive permalink
p C本質上是一個正則化參數,它控制在訓練數據上實現低誤差與最小化權重範數之間的權衡。它與嶺回歸中的嶺參數很相似(實際上,實際上,線性SVM和嶺回歸之間在性能或理論上幾乎沒有差異,因此,我通常使用後者-如果屬性多於觀測值,則使用內核嶺回歸)。

正確調整C是使用SVM的最佳實踐中至關重要的一步,因為結構風險最小化(基本方法背後的關鍵原理)是通過調整C實現的。參數C強制執行權重範數的上限,這意味著存在由C索引的一組嵌套的假設類別。隨著我們增加C,我們會增加假設類別的複雜性(如果我們稍微增加C,我們仍然可以形成所有增加權重允許範數的上限之前我們可以做的線性模型,以及我們以前做過的線性模型。因此,除了通過最大餘量分類實現SRM之外,還可以通過控制C限制假設類的複雜性來實現它。

遺憾的是,確定如何設置C的理論在此刻,大多數人傾向於使用交叉驗證(如果他們做了任何事情)。

好的,我想我現在了解C的含義。 :)
但是,如果C是正則化參數,那麼為什麼一般來說進行正則化以減輕過度擬合(即通過創建更通用的模型),為什麼高C會增加過度擬合?
C是一個正則化參數,但它實際上是附加在數據不匹配項(鬆弛變量的總和)上而不是正則化項(邊距位)上,因此C的值越大意味著正則化程度越低,而不是更大。另外,您也可以將常規化參數表示為1 / C。
這個表達式是錯誤的:`參數C規定了權重範數的上限。它不強制執行上限。可以說。因此,如果我們選擇一個大的C,我們將傾向於使用大量錯誤分類的示例。
@ARAT如果您查看SVM優化問題的對偶公式,則存在一個框約束,該約束可防止對偶參數超過C。在對偶參數上設置上限將對原始權重的範數設置上限也一樣這強加了一系列假設類,這實際上就是SRM的工作方式。
deerishi
2015-02-13 12:39:29 UTC
view on stackexchange narkive permalink

C是一個正則化參數,它控制在實現低訓練誤差和低測試誤差之間進行折衷的方法,該誤差可以將分類器推廣到看不見的數據。

請考慮a的目標函數線性SVM:最小值| w | ^ 2 + C∑ξ。如果您的C太大,優化算法將嘗試降低| w |。盡可能多地導致嘗試對每個訓練示例正確分類的超平面。這樣做會導致分類器的泛化屬性損失。另一方面,如果C太小,則給目標函數一定的自由度以增加| w |。很多,這將導致較大的訓練錯誤。

下面的圖片可能會幫助您直觀地看到它。Linear SVM Classifier with C=10000000 Linear SVM Classifier with C=0.001

我不太了解您的情節。你能解釋一下嗎?
@alfa:我顯示這些圖的意圖是: 1)如果C太大(圖1),則您的分類器將過擬合,即它將嘗試對每個訓練數據點進行準確分類。圖1顯示了幾乎所有訓練點均已正確分類。 2)另一方面,如果C太小(圖2),則您的分類器將不合適。曲線2顯示了欠擬合分類器。它不會將這些點分為各自的類別。 希望這可以幫助。
這意味著您的x軸和y軸顯示兩個不同的功能。標籤“數據集長度”和“均值總和”有點令人困惑嗎?
看看C的正確選擇在兩種情況下如何提供幫助將很有趣。
是@alfa。我的X和Y是兩個不同的功能。我將不得不檢查是否還有數據集。但是那時C的正確值是從(42,0)開始幾乎垂直劃分數據集的值。這會回答您的查詢嗎?
我認為看不到C = 10000000是一個錯誤的選擇,並且我認為數據集不是證明這一點的正確方法。也許在分離超平面的錯誤一側上只有幾個離群值的數據集會更好?
通過交叉驗證,我發現的C的準確值在300-400之間。但是您提到的數據集將有助於更好地說明。 我發布的圖形來自幾個月前我在其上使用加速度計的手勢識別項目。
感謝您的解釋。也許您可以更新數字。無論如何,我贊成你的回答。
好的,我會盡快嘗試用較少的數據點更新圖。
為了跟上學歷的發展,C不是_正則化參數_而是_鉸鏈函數_。正則化參數通常用_lambda_表示,並且是乘以w ^ 2的項。因此,成本函數為“ S =訓練誤差成本(或鉸鏈損耗)+λ*懲罰項”。添加了懲罰項(w ^ 2)以確保在鉸鏈損耗為零的情況下可以唯一選擇分類器參數。
luz
2016-10-03 20:56:35 UTC
view on stackexchange narkive permalink

以上答案非常好。仔細閱讀您的問題後,我發現有兩個重要的事實可能會被我們忽略。

  1. 您正在使用線性核
  2. 您的訓練數據是線性可分離的,因為“沒有錯誤 在訓練集上”。
  3. ol>

    鑑於這兩個事實,如果C值在合理範圍內變化,則最佳超平面將僅在邊緣(由支持向量形成的間隙)內隨機少量移動。

    直覺上,假設訓練數據的邊距很小,並且/或者在邊距內也沒有測試數據點,則在邊距內最優超平面的移動不會影響測試集的分類誤差。

    儘管如此,如果將C設置為0,則SVM將忽略錯誤,並嘗試最小化權重的平方和(w),也許在測試集上可能會得到不同的結果。

H. Irshad
2019-03-03 06:56:23 UTC
view on stackexchange narkive permalink

C參數用於控制離群值-低C表示允許更多的離群值,高C表示允許更少的離群值。

Brad
2019-05-10 08:22:40 UTC
view on stackexchange narkive permalink

高C(成本)意味著錯誤分類的成本增加。這意味著靈活的內核將變得更加彎曲,以避免在訓練集中對觀察結果進行錯誤分類。

如果內核將簡化為 ,則在對新數據進行預測時,該模型不能很好地推廣。

如果內核要直接使用 ,則在對新數據進行預測時,該模型不能很好地推廣。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...