2017-05-08 7 views
0

ここで私は2人の人物とそれらにいくつかの質問を投稿します。誰も私がそれらを解決するのを助けることができますか?libsvmを使ってSVMの質問を理解する

1. Training a simple linear SVM: 
% svm-train -t 0 -c 100 data0 data0.model 
% python drawBoundary.py data0 
where: 
-t 0 -- use a linear kernel 
-c 100 -- set "C" = 100, which means "overfit a lot" 

そしてここで得られたプロット付属: enter image description here

これはサポートベクトルの数が少ないで反射され、容易に分離可能なデータセットです。プロットでは、SVは大きく描かれています(境界線から1単位離れた破線、実線)。

は、その後、ここで最初の質問が来る:

Q1: You should have found that it takes 3 support vectors. Could you have fewer (eg., 2) support vectors here? And why? 

私の答えはNOで、3が最も小さい数です。しかし、それは私の直感だけです。どうしてか分かりません。誰かが私の理由を説明できますか?ここで

2. 
% svm-train -t 2 -c 100 -g 100 data0 data0.model 
% python drawBoundary.py data0 
where: 
-t 2 means RBF and -g100 means gamma=100 
A gamma of 100 means that you have to be really close to a point to have a kernel value that's non-zero. 

結果のプロットである:

Q2:なぜあなたはこれらの小さな塊を得るのですか enter image description here

そして、ここでは2番目の質問ですか? ガンマを上げる必要がありますか?それぞれの具体的な境界線を得るためにどれくらいの高さですか(つまり、それぞれの決定境界線がまさに1つの例を取り囲んでいます)。

この質問では、私は完全に迷ってしまいます。

答えて

0

最初の質問は、同じ側に2つの点を1つずつ描き、もう一方の点を2つめの線(最初の線に平行)にプロットするために必要です。これら3つの点は、最大マージンを有するように選択される(すなわち、平行線が最大距離/距離を有するように)。 3点を使用しない場合、2つの平行線の間のこの距離を増やす方法は常にありますので、それは私たちが探している解決策ではありません。

2番目の質問では、私はいくつかのガンマ値を試してみる必要があると思います。ガンマは、通常、10の累乗である値のセットで取られます(適切な英語のようなものではありません)。 {1 10 100} = {10^0 10^1 10^2}。そして、私たちはデータに合うようにクロスバリデーションを選択します。そうすることで、オーバーフィットもアンダーフィットもしない効率的なSVMを得ることができます。

これが役に立ちます。

+0

ありがとうございました!しかし、質問2のために、なぜあなたはこれらの小さな塊を手に入れますか?それらがマージンラインであることを意味しますか?私はかなり混乱しています。 – JennyShen

関連する問題