web-dev-qa-db-ja.com

どちらが良いですか:LinearSVCまたはSVC?

私の研究から、3つの矛盾する結果が見つかりました。

  1. SVC(kernel="linear")の方が良い
  2. LinearSVCの方が良い
  3. 問題ではない

誰かがLinearSVCSVC(kernel="linear")を使用するタイミングを説明できますか?

LinearSVCはSVCよりもわずかに優れているようで、通常は細かくなります。しかし、scikitが線形分類の特定のケースの実装に時間を費やすことにした場合、なぜLinearSVCSVCを上回らないのでしょうか?

20

数学的には、SVMの最適化は凸の最適化の問題であり、通常は一意の最小化器を使用します。これは、この数学的最適化の問題に対する唯一の解決策があることを意味します。

結果の違いはいくつかの側面から生じます。SVCLinearSVCは同じ問題を最適化することになっていますが、実際にはすべてのliblinear推定量が切片にペナルティを課しますが、libsvmしない(IIRC)。これにより、異なる数学的最適化問題が発生し、結果が異なります。スケーリングやデフォルトの損失関数など、その他の微妙な違いもあります(編集:LinearSVCに_loss='hinge'_を設定してください)。次に、マルチクラス分類では、liblinearはデフォルトでone-vs-restを実行しますが、libsvmはone-vs-oneを実行します。

SGDClassifier(loss='hinge')は、厳密な勾配降下ではなく確率的勾配降下を使用し、同じ解に収束しない可能性があるという意味で、他の2つとは異なります。ただし、得られたソリューションはより一般化できます。

SVCLinearSVCの間で重要な決定基準の1つは、サンプル数が多いほどLinearSVCが収束するのが速い傾向があるということです。これは、線形カーネルが特殊なケースであり、Liblinearでは最適化されていますが、Libsvmでは最適化されていないためです。

25
eickenberg

実際の問題は、scikitアプローチの問題にあり、SVMを呼び出すSVMではない。 LinearSVCは、ヒンジ損失だけでなく、実際に平方ヒンジ損失を最小化しています。さらに、詳細については、バイアスのサイズ(はSVMではありません)他の質問を参照してください: scikit-learnと同等のSVCとLinearSVCのパラメーターは何ですか?

どちらを使用するのですか?純粋に問題固有です。無料の昼食定理がないため、「この損失関数は期間最高です」と言うことは不可能です。場合によっては2乗損失がうまく機能し、時には通常のヒンジが機能します。

7
lejlot