SVMのコスト(C)パラメータはどういう意味ですか?


7

SVMをデータに適合させようとしています。私のデータセットには3つのクラスが含まれており、(LibSVMで)10分割交差検証を実行しています。

./svm-train -g 0.5 -c 10 -e 0.1 -v 10 training_data

それによりヘルプは次のように述べています

-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)

私にとって、より高いコスト(C)値を提供すると、より高い精度が得られます。SVMのCは実際にはどういう意味ですか?Cのより高い/より低い値(またはLibSVMのデフォルト値)を使用する理由と時期を教えてください。


これは良いML /統計の質問だと思いますが、編集してソフトウェアに中立にすることができます。さもなければ、人々はこれをハウツーソフトウェアの使い方の質問としてこれを閉じるために投票するかもしれません。
ガン-モニカの復活

2
SVMコストパラメータの重複の可能性SVMに対するハイパーパラメータ調整については、このスレッドも参照してください。この検索の結果も関連性が高いです。
Sycoraxによると、モニカの復活は2016

回答:


17

シンプルでわかりやすい答えを出そうとしています。完全な回答では、SVMの背後にある目的から、損失の詳細やサポートベクターまで、すべてをカバーする必要があるでしょう。これらの詳細をさらに詳しく知りたい場合は、機械学習の書籍にあるSVMに関する章などを調べる必要があるかもしれません。

SVMは大きなマージンの分類子です。黒と白のクラスのサンプル間の分離(聞かせてのは、直線を想定)というこの手段はただではない一つの可能なものの、可能な限り最高の分離は、二つのクラスのサンプル間の最大の可能なマージンを取得することによって定義されます。これはH3 サンプル画像では:

ここに画像の説明を入力してください

あなたはしばらくの間これについて考えている場合は、分離が得られるという結論になるだけ近い「他のクラス」、余白に、したがって、それらの近くに位置し、それらのサンプルから(正確には:それらのマージン)。サンプル画像では、これらはサンプルに直交する灰色の線でマークされていますH3。この動作は問題を引き起こします。分離の導出に使用されるサンプルの量が主にサブセットであるため、これらのサンプルに影響を与えるノイズにより、分離が大部分のデータに対して最適ではなくなる可能性があります。これは、私たちすべてが過剰適合として知っていることです。使用されるトレーニングの大きなマージンの観点からの分離は最適ですが、一般化が悪く、したがって、他の/まだ目に見えないデータには最適ではありません。

これまでに説明したのは「ハードマージン分類」です。これは、マージンがこれまでに定義されている方法であるため、サンプルをマージン内に入れることを許可していません。このハードプロパティを緩和すると、「ソフトマージン分類」を実行することになります。マージンの背後にある考え方は同じままですが、特定のサンプルをマージンの内側に配置できるようになりました。主要な利点は、そうすることで、モデルのデータへの全体的な適合がハードマージン分類よりも優れている可能性があることです(バイアスを犠牲にして分散を減らします)。

そのため、一方では、単純な最適化問題(モデル=ラインをデータに最適に合わせる方法)を解決する必要があります。一方、マージンにすべて/多くのサンプルを含めるのは望ましくありません。マージンの内側に入れるサンプル数を調整て、マージンが完全にオーバーフィットしたり、マージンプロパティが完全に失われたりしないようにします。

これは Cパラメータがステージに入ります。核となるアイデアは単純です:私たちは最適化するために、最適化問題を修正し、両方のデータラインのフィット感同時に、で、マージンの内側にサンプルの量を不利にしますCマージン内のサンプルが全体的なエラーに寄与する重みを定義します。その結果、C大マージンの分類をどの程度ハードまたはソフトにするかを調整できます。低いC、マージン内のサンプルは、より高い場合よりもペナルティが少なくなります C。とともにC0の場合、マージン内のサンプルにペナルティが課されなくなります。これは、大きなマージンの分類を無効にする可能性のある1つの極端です。無限にC ハードマージンの他の可能な極端があります。

これは、変更によって引き起こされる効果を視覚化する小さな例です Cよく知られているアイリスデータセットRを使用しcaretます(パッケージ内およびパッケージを使用しますが、libsvmもちろん同じことも当てはまります)。これは、元のデータがどのように見えるかです(そのバイナリ分類の問題)。

library(caret)
d <- iris[51:150,c(1,2,5)]
plot(d[,c(2,1)], pch = ifelse(d[,3]=='versicolor', 1, 2))

アイリス1

これがどのように変化するか C モデルのパフォーマンスに影響を与える可能性があります。

m <- train(d[,1:2], factor(d[,3]), method = 'svmLinear', trControl = trainControl(method = 'repeatedcv', 10, 20), tuneGrid = expand.grid(C=3**(-7:7)))
plot(m, scales=list(x=list(log=3)))

SVMの結果

そして、これは2つの異なって選ばれた間の分離の違いです C 値(分割線の傾きが異なることに注意してください!):

m1 <- train(d[,1:2], factor(d[,3]), method = 'svmLinear', preProcess = c('center', 'scale'), trControl = trainControl(method = 'none'), tuneGrid = expand.grid(C=3**(-7)))
plot(m1$finalModel)

SVM分離1

m2 <- train(d[,1:2], factor(d[,3]), method = 'svmLinear', preProcess = c('center', 'scale'), trControl = trainControl(method = 'none'), tuneGrid = expand.grid(C=3**(7)))
plot(m2$finalModel)

SVM分離2

したがって、実際には、ML設定で実行する可能性が最も高いのは適切に調整することです Cたとえば、チューニンググリッドを使用します。詳細については、この出版物などを検討してください。それはLibSVMの人たちからのものであり、SVMが優れた例でどのように機能するかを説明することから、たとえばLibSVMでパラメーターグリッドを使用する方法のコードスニペットまで、多くの有用な情報を提供します。

Hsu et al。(2003)。「ベクトル分類をサポートするための実用的なガイド。」国立台湾大学コンピュータサイエンスおよび情報工学科。

ところで:SVMについて人々が言っ​​たことの少数のリストがあります Cパラメータ、それを理解するのにも役立ちます:http : //www.svms.org/parameters/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.