線形カーネルを持つSVMでのCの影響は何ですか?


134

現在、線形カーネルを備えたSVMを使用してデータを分類しています。トレーニングセットにエラーはありません。パラメーターいくつかの値 (10 510 2)を試しました。これは、テストセットのエラーを変更しませんでした。C105102

今私は疑問に思う:これは誤りであるルビーのバインディングによって引き起こされるためにlibsvm、私は(使用しているRB-LIBSVMを)か、これは理論的に説明できますか

パラメーター常に分類器のパフォーマンスを変更する必要がありますか?C


ただ、コメント、ない答え:任意の 2つの項の和を最小プログラムなどあなたは彼らがバランスをどのように見ることができるように(私見)は、二つの用語は終わりにしている何を教えてください。(2つのSVM用語を自分で計算に関するヘルプを表示するには、別の質問をしてみてくださいあなたは最悪の分類されたポイントの数を見てきましたあなたはあなたと同じような問題を投稿でした。??)|w|2+Cξ
デニス・

回答:


136

Cパラメーターは、各トレーニング例の誤分類を回避したい量をSVM最適化に伝えます。Cの値が大きい場合、その超平面がすべてのトレーニングポイントを正しく分類するのにより良い仕事をする場合、最適化はマージンの小さい超平面を選択します。逆に、Cの値が非常に小さいと、オプティマイザーは、その超平面がより多くのポイントを誤分類した場合でも、より大きなマージンの分離超平面を探します。Cの非常に小さな値の場合、トレーニングデータが線形に分離可能である場合でも、誤分類された例を取得する必要があります。


1
OK、Cは目的関数に対する誤分類の影響を決定することを理解しています。目的関数は、正則化用語と誤分類率の合計です(en.wikipedia.org/wiki/Support_vector_machine#Soft_marginを参照)。Cを変更しても、これは目的関数の最小値に影響しません。それは、正則化の用語が常に非常に小さいことを意味しますか?
アルファ

3
データセットの最適化が速い場合は、10 ^ [-5、...、5]、またはそれ以上のより広い範囲のC値を試して、より合理的に見えるものを取得することをお勧めします。Cが変化すると、トレーニングエラーと最小コストの値の両方が変化するはずです。また、データの規模は極端ですか?一般的に、最適なCパラメーターはデータを縮小するときに大きくする必要があり、その逆も同様です。そのため、フィーチャの値が非常に小さい場合は、可能なC値に非常に大きな値を含めるようにしてください。上記のいずれも助けていない場合は、私がしたいと思う問題はRubyのバインディングである
マルク・震え

3
バランスのとれた精度を0.5(単なる推測)から0.86に変更することは、私にわずかな影響のように聞こえません。Marcが示唆するように、Cの値のより細かいグリッドを調査することをお勧めしますが、与えられた結果はかなり正常な動作のようです。Cは過剰適合により無限大になりがちであるため、エラーが再び戻ると予想されるかもしれませんが、この場合はそれほど問題にならないようです。バランスの取れたエラーに本当に興味があり、トレーニングセットに50:50の分割がない場合は、より良い結果が得られる可能性があることに注意してください...
ディクランマースピアル

2
...正のクラスと負のクラスに属するパターンに異なるCの値を使用します(これは、各クラスに属するパターンの割合を変更するためにデータをリサンプリングすることと漸近的に同等です)。
ディクランマースピアル

2
C = 10 ^ 0に到達すると、SVMはすでにすべてのトレーニングデータを正しく分類しており、サポートベクトルはバインドされていない(アルファがCに等しい)可能性があると考えられます。ソリューションに影響はありません。
ディクランマースピアル

152

SVMでは、2つのことを検索しています:最小マージンが最大の超平面と、できるだけ多くのインスタンスを正しく分離する超平面。問題は、常に両方を手に入れることができるとは限らないことです。cパラメーターは、後者に対する希望の大きさを決定します。これを説明するために、以下に簡単な例を示しました。左側には低いcがあり、かなり大きな最小マージン(紫色)が得られます。ただし、これには、正しい分類に失敗した青い円の外れ値を無視する必要があります。右側に高いcがあります。これで、外れ値を無視しないため、マージンがはるかに小さくなります。

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

これらの分類器のうち、どれが最適ですか?それは、予測する将来のデータがどのようなものかによって異なり、ほとんどの場合、もちろんそれを知りません。将来のデータが次のようになっている場合:

大きなCが最適です 次に、大きなc値を使用して学習した分類器が最適です。

一方、将来のデータが次のようになっている場合:

低cが最適 次に、低いc値を使用して学習した分類器が最適です。

データセットに応じて、cを変更すると異なる超平面が生成される場合と生成されない場合があります。それは場合はありません別の超平面を生成、それはあなたの分類器は、出力の異なるクラスは、特定のデータのためにあなたが分類するのにそれを使用しているだろうことを意味するものではありません。Wekaは、データを視覚化し、SVMのさまざまな設定を操作するための優れたツールです。データがどのように見えるか、またc値を変更しても分類エラーが変わらない理由を理解するのに役立つ場合があります。一般に、トレーニングインスタンスが少なく、属性が多いと、データの線形分離が容易になります。また、トレーニングデータを評価しており、新しい未観測データを評価していないという事実により、分離が容易になります。

モデルをどのようなデータから学習しようとしていますか?データ量 見えますか?


4
3年以上もデータに触れていません。非常に高次元でノイズが多いため、公開することはできません。質問はすでに回答されていますが、視覚化は非常に優れており、直感的だと思います。
アルファ

驚くばかり。ガマの価値についてもそのような説明はありますか?
MonsterMMORPG

2
ガンマパラメーターは、ガウスカーネル関数に使用されます。カーネル関数は、元のフィーチャを別の空間に変換する効率的な方法と見なすことができます。新しいフィーチャ空間の分離超平面は、元のフィーチャ空間で線形である必要はありません。たとえば、元のフィーチャスペース内のデータポイントの2次元位置を使用して、マップ上のマーカーまでの距離を表す新しいフィーチャを計算できます。この新機能では、(元の空間における)非線形分類器は、境界がマーカーの周りに円を形成する決断行うことができます
ケントムンテCaspersen

@KentMuntheCaspersenはCの説明が間違っていませんか?これは、「統計学習の概要」という本で述べられていることの反対です。
diugalde

2
@diugaldeは、私の説明とまったく異なる本から引用できますか?私は常にcを誤分類のコストと考えています(cで分類することで覚えやすい)。このように、cが高いと誤分類のコストが高くなり、アルゴリズムがすべてのデータポイントを完全に分離しようとします。外れ値の場合、これは常に可能とは限らないか、常に良い一般的な結果につながるとは限りません。これは、cを下げる/導入する理由です。
ケントムンテキャスパーセン

26

Cは基本的に正則化パラメーターであり、トレーニングデータの低エラーを達成することと重みのノルムを最小化することとのトレードオフを制御します。これは、リッジ回帰のリッジパラメーターに類似しています(実際、実際には線形SVMとリッジ回帰のパフォーマンスや理論にはほとんど違いがないため、通常は後者を使用します-観測よりも属性が多い場合はカーネルリッジ回帰を使用します)。

Cのチューニングは、構造的リスクの最小化(基本的なアプローチの背後にある重要な原則)がCのチューニングを通じて実装されるため、SVMの使用におけるベストプラクティスの重要なステップです。パラメーターCは、重み。これは、Cでインデックス付けされた仮説クラスのネストされたセットがあることを意味します。Cを増やすと、仮説クラスの複雑さが増します(Cを少し増やすと、前にできる線形モデルをすべて形成できますまた、重みの許容基準の上限を引き上げる前にできなかったものもあります)。したがって、最大マージン分類によるSRMの実装と同様に、Cの制御による仮説クラスの複雑さの制限によっても実装されます。

悲しいことに、Cの設定方法を決定する理論は現時点ではあまりよく発達していないので、ほとんどの人はクロスバリデーションを使用する傾向があります(何かを行う場合)。


OK、私は今Cの意味を理解していると思います。:)
アルファ

2
しかし、Cが正則化パラメーターである場合、一般的に言えば、オーバーフィットを緩和するために、つまりより一般的なモデルを作成するために正則化が行われると、高いCがオーバーフィッティングを増加させるのはなぜですか?
user1603472

2
Cは正則化パラメーターですが、基本的には正則化項(マージンビット)ではなく、データの不適合項(スラック変数の合計)に付加されるため、Cの値が大きいほど、正則化は少なくなります。または、rgularisationパラメーターの通常の表現を1 / Cとして表示できます。
ディクランMarsupial

8

Cは、低いトレーニングエラーと低いテストエラーとのトレードオフを制御する正則化パラメーターです。テストエラーは、分類器を不可視データに一般化する機能です。

線形SVMの目的関数を考えます:min | w | ^ 2 + C∑ξ。Cが大きすぎる場合、最適化アルゴリズムは| w |を削減しようとします。可能な限り各訓練例を正しく分類しようとする超平面につながります。これを行うと、分類器の一般化プロパティが失われます。一方、Cが小さすぎる場合、目的関数に特定の自由度を与えて| w |を増加させます。多くの場合、大きなトレーニングエラーが発生します。

以下の図は、これを視覚化するのに役立ちます。 C = 10000000の線形SVM分類器C = 0.001の線形SVM分類器


私はあなたのプロットを本当に理解していません。説明できますか?
アルファ

1
@alfa:プロットを表示する目的は次のとおりです。1)Cが大きすぎる(プロット1)場合、分類器はオーバーフィットします。つまり、各トレーニングデータポイントを正確に分類しようとします。プロット1は、ほぼすべてのトレーニングポイントが正しく分類されていることを示しています。2)一方、Cが小さすぎる場合(プロット2)、分類器は適合しません。プロット2は、アンダーフィット分類器を示しています。ポイントをそれぞれのクラスに分離しません。お役に立てれば。
-deerishi

つまり、x軸とy軸には2つの異なる機能があります。「データセットの長さ」と「平均の合計」というラベルは少し混乱していますか?
アルファ

どちらの場合でも、Cの正しい選択がどのように役立つかを見るのは興味深いでしょう。
アルファ

2
C = 10000000が悪い選択であることを確認するのは明らかではないと思うし、データセットがそれを実証するのに適切なものではないと思います。たぶん、分離する超平面の間違った側にわずかな外れ値しかないデータセットが良いでしょうか?
アルファ

4

上記の答えは素晴らしいです。あなたの質問を注意深く読んだ後、私たちが見落としていたかもしれない2つの重要な事実があることがわかりました。

  1. 線形カーネルを使用しています
  2. 「トレーニングセットにエラーがない」ため、トレーニングデータは直線的に分離可能です。

2つの事実を考えると、C値が合理的な範囲内で変化する場合、最適な超平面はマージン(サポートベクトルによって形成されるギャップ)内でわずかにランダムにシフトします。

直観的には、トレーニングデータのマージンが小さく、および/またはマージン内にテストデータポイントがないと仮定すると、マージン内の最適な超平面のシフトはテストセットの分類エラーに影響しません。

それでも、C = 0に設定すると、SVMはエラーを無視し、weights(w)の2乗和を最小化しようとします。テストセットで異なる結果が得られる可能性があります。


2

Cパラメーターは、外れ値の制御に使用されます。低いCは、より多くの外れ値を許可することを意味し、高いCは、より少ない外れ値を許可することを意味します。


1

高いC(コスト)は、誤分類のコストが増加することを意味します。これは、トレーニングセット内の観測値の誤分類を回避するために、柔軟なカーネルがより波打つようになることを意味します。

カーネルが波打つ場合、モデルは新しいデータを予測するときにうまく一般化されません。

カーネルがまっすぐになると、モデルは新しいデータを予測するときにうまく一般化されません。

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