2019年12月29日日曜日

SVM

延長戦突入。

今日はサポートベクターマシン(support vector machine, SVM)。SVM はデータ数が少ない場合に用いられる手法で、昔よく利用されていました。が、今回は大量のデータを処理する必要があります。力技でこなそうと、scikit-Learn で組んでみました。が、やはり遅い。
SVCではなく、SVRだとどうか?と試しましたが、終わりません。

GPU版がないかな?と思い RAPIDS の中を覗いてみると、cuML の中に SVC がありました。が、fit()を使うと GTX1060 3GB のメモリに載りません(想定内)。scikit-Learn の cross validation に放り投げてみるも連携しません。

デモデータだと計算速度が40倍も違ったので、GPU は利用したいところです。
RTX8000 48GB なら動くでしょう。汎用性はなくなりますが、このマシンのみで動かすことを前提に、組んでみましょうか。

********************************
20200104追記
結局、他のライブラリとの連携の関係で、scikit-Learn を選択。年末から調整を続けていますが、最終モデルは40時間以上経過した今でもまだ完走しません。遅すぎ。特徴量を減らさないとダメということはわかりました。
技術評論社「Kaggleで勝つデータ分析の技術」では以下の記載がありました。SVM の使われない理由が明記された書き物を見たのは初めてです。
本章では、テーブルデータを扱う分析コンペにおいて使われるモデルとして以下を紹介します。・・・・・・ なお、教師あり学習のモデルとして良く紹介されるモデルのうち、サポートベクターマシンは精度や計算速度が見劣りするため、あまり使われることはありません。

********************************
20200109追記
O'REILLY「Pythonで始める機械学習」にも、以下のような記述がありました。

  • サンプル数が大きくなるとうまく機能しない(10万サンプルぐらいまではうまく機能する)
  • 10万サンプルぐらいになると、実行時間やメモリ使用量の面で難しくなる。
  • 注意深い前処理とパラメータ調整が必要。→決定木ベースが良く用いられる理由の一つ。
  • 検証が難しい。予測された理由を理解・説明することが困難。

 C、gamma の影響についてはp98に図解あり。

0 件のコメント:

コメントを投稿