私は高速線形 SVM ライブラリを探していましたが、最も重要なもののLiblinearとPegasosの 2 つに出会いました。ただし、ペガソスは、データがまばらであれば高速に動作すると主張しています。ペガソは以前に登場したため、ドキュメントには比較がありません。
まばらなデータの場合、何を選択すればよいですか?
私は高速線形 SVM ライブラリを探していましたが、最も重要なもののLiblinearとPegasosの 2 つに出会いました。ただし、ペガソスは、データがまばらであれば高速に動作すると主張しています。ペガソは以前に登場したため、ドキュメントには比較がありません。
まばらなデータの場合、何を選択すればよいですか?
私の知る限り、スパース データはどちらでも問題なく処理されます。問題は、データポイントの数です。liblinear には、primal と dual の両方のソルバーがあり、これらはパラメーターを調整する必要なく、問題を高精度で解決します。ペガソまたは同様の劣勾配降下ソルバー (これらのいずれかが必要な場合は、Leon Bottou のsgdをお勧めします) の場合、結果は初期学習率と学習率スケジュールに強く依存し、調整が難しい場合があります。
経験則として、データ ポイントが 10k 未満の場合は、常に liblinear (主ソルバーを使用) を使用し、100k まで使用することもあります。その上で、liblinear が遅いと感じた場合は SGD の使用を検討します。liblinear の方が少し遅いですが、学習率、学習率の減衰、およびエポック数について考える必要がないため、私は liblinear を使用することを好みます。
ところで、 SGD、Liblinear、および LibSVM ソルバーを含むscikit-learnや、多数のソルバーを含むlightningなどのフレームワークを使用して、これらのさまざまなソルバーを非常に簡単に比較できます。
LIBLINEAR と Pegasos はどちらも、膨大な数のインスタンスと機能を持つ大規模なスパース データを処理するために特別に開発された線形分類手法です。この種のデータでは、従来の SVM よりも高速です。
これまで Pegasos を使用したことはありませんが、LIBLINEAR はこの種のデータで非常に高速であり、著者は「Pegasos などの最先端の線形分類器と競合するか、それよりも高速である」と述べています。