scikit-learnでSVCとLinearSVCの違いを説明できますか?


19

私は最近、一緒に仕事をすることを学び始め、sklearnこの奇妙な結果に出会ったばかりです。

使用digits可能なデータセットを使用して、sklearnさまざまなモデルと推定方法を試しました。

私はデータをサポートベクトルマシンモデルをテストしたとき、私は2つの異なるのクラスがありますがわかったsklearn:SVM分類のためSVCLinearSVC、元の用途1-に対する-1のアプローチおよび他の用途の一に対して、残りのアプローチは。

結果にどのような影響があるのか​​わかりませんでしたので、両方試してみました。モンテカルロスタイルの推定を行い、両方のモデルを500回実行しました。そのたびに、サンプルをランダムに60%のトレーニングと40%のテストに分割し、テストセットで予測の誤差を計算しました。

通常のSVC推定器は次のエラーのヒストグラムを生成しました。 SVCエラー率 一方、線形SVC推定器は次のヒストグラムを生成しました。 線形SVCエラー率

このような大きな違いを説明できるものは何でしょうか?ほとんどの場合、線形モデルの精度がこれほど高いのはなぜですか?

そして、それに関連して、結果に著しい分極化を引き起こす原因は何ですか?1に近い精度または0に近い精度のいずれかで、間には何もありません。

比較のために、決定木分類では、約.85の精度ではるかに正規分布したエラー率が生成されました。


scikit-learnドキュメントでは違いが強調されていないと思いますか?チェックしましたか?
ローヒット

1. SVCで使用したカーネルは何ですか?デフォルト設定= "rbf"?2. 1対1と1対1は異なるアプローチです
-kpb

ドキュメントは、このトピックに関してはまばらで/曖昧です。それは一から一-に対するワンに対して、残りの違いに言及し、SVS直線的であることSimilar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
metjush

通常のSVCには、デフォルトのカーネルを使用しました。私は1v1と1vRが異なるアプローチであることを知っていますが、私はそれが私が知りたいことだと思います-なぜ彼らはそのような異なる結果を生み出すのでしょうか?カーネルの選択ですか、それとも複数のカテゴリ分類への異なるアプローチですか?
メジュッシュ

回答:


23

デフォルト値を持つ通常のSVMは、SVMカーネルとして放射基底関数を使用します。これは基本的にガウスカーネル、つまりベルカーブです。異なるクラス間のノーマンズランドがガウス関数で作成されることを意味します。線形SVMは基底関数に線形カーネルを使用するため、これを^形の関数と考えることができます。調整はずっと少なく、基本的には線形補間です。

あなたは多くの情報を提供しなかったので、人々はこの質問を打ち込んでいますが、あなたが投稿したものを深く見て...これはバイアスと分散の詳細と線形と非線形の違いを本当に理解するいくつかの基本的な側面に当たりますSVMの基底関数。

高低バイアスと高低分散の4つの領域を説明するこの画像をご覧ください。明らかに、最適な場所は低分散と低バイアスです。

ダーツバイアス分散画像

最初に分散を評価します-

次に、プロットを見てみましょう。 ここに画像の説明を入力してください

非線形基底関数の分散は大きくなります。線形カーネルよりもノイズが多いことを確認してください!線形カーネルの分散は小さくなります。ノイズが少ないことを確認してください!

バイアスを評価しましょう-

どのカーネルがより正確ですか?指定したエラーを追加できます。非線形カーネルの合計誤差は〜550 + 325 =〜875です。線形カーネルには、〜690 +〜50 =〜740のエラーがあります。そのため、線形カーネル全体的に優れているように見えますが、全体的にかなり近いです。これは物事がトリッキーになることです!

すべてを一緒に入れて

線形カーネルが1で貧弱な仕事をし、0で本当に素晴らしい仕事をした方法をご覧ください。これはかなり不均衡です。非線形カーネルがよりバランスが取れている場所。スイートスポットは、そのような高い分散を持たないバランスの取れたモデルを作成することであるように思われます。高分散をどのように制御しますか?ビンゴ-正則化。非線形モデルに正則化を追加すると、おそらくより良い結果が得られるでしょう。これは、scikit学習SVMのCパラメーターであり、デフォルトから増やしたいと思うでしょう。ガンマパラメータを使用することもできます。ガンマはガウスの幅を制御します。たぶん、ノイズの少ない結果を得るために、その1つを少し増やしてみてください。例えば、クラス間でのより大きな無人の土地です。

お役に立てれば!


Cパラメータは、増加しないデフォルトから減少する必要があります。
ハムディ

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