オンライン機械学習(CW、SCW)を実装してみた

今回は、下記の論文で紹介されているオンライン機械学習のモデルをPythonで実装してみました。

Exact Soft Confidence-Weighted Learning

表題の通り、Confidence Weighted Learning(CW)、Soft Confidence Weighted Learning(SCW)を実装してみます。

オンライン機械学習

機械学習において、データを一括で読み込んで学習を行う方法を「バッチ学習」といいます。

これに対し、「オンライン学習」とは、1件ずつデータを逐次読み込んで学習させる方法のことをいいます。

そのため、学習させるデータを全て保持しておく必要がなく、1件ずつ学習に利用したデータをすぐに捨てることができます。

このような性質が有効な場面としては、例えば、以下のような実装場面が考えられます。

  • 最新データの逐次入力によって、モデル精度を更新し続けることが要求される場合
  • サイズが大きいデータから学習させる必要があり、全てのデータはメモリに乗り切らない場合
  • 個人情報のデータなど、手元に保管するリスクがあるものから学習させる場合

オンライン機械学習のより詳しい内容については、下記が参考になります。

機械学習プロフェッショナルシリーズの中で、オンライン機械学習をテーマにした一冊です。

今回実装したCWやSCWの解説、導出の流れなども記されています。

Confidence Weighted Learning(CW)

まずはCWの実装になります。

イメージは、線形分離をする際の各次元の重みが多次元正規分布に従うとして考え、その各重みに対応する分散を重みの信頼度として考えたモデルになります。

分散が大きければ大きいほど、その重みについては自信がないと解釈します。

また、この場合共分散を考えることもできますが、おそらく、共分散は保存する必要はなさそうな気がします。

使わなそうだけど、何かに使えないかなーとか考えてしまいますね。

実装が下記になります。

GitHub: https://github.com/Gin04gh/online_machine_learning/blob/master/CW.ipynb

正解率が1.0となってしまいました…笑

いろいろと試してみるとわかりますが、かなり少ないサンプル数でもすぐに収束する性質があるようです。

線形分離可能な問題ではかなり有効なアルゴリズムのように思います。

Soft Confidence Weighted Learning(SCW)

次にSCWを実装してみます。

CWでは線形分離不可の問題に対してはうまく学習できず、境界が大きくぶれてしまうという弱点があります。

それを克服するため、幾分か耐性をもたせたモデルがSCWです。

論文では命題として2つの計算アルゴリズムが記されていましたので、両方とも実装してみました。

Prop.1

GitHub: https://github.com/Gin04gh/online_machine_learning/blob/master/SCW1.ipynb

Prop.2

GitHub: https://github.com/Gin04gh/online_machine_learning/blob/master/SCW2.ipynb

計算に関しては、とりあえず論文に従いましたので、正直やっていることの意味はよくわからないです笑

SCWにしてもCWと同様、軽量かつ少ないデータ数で収束しやすいことが確認できました。

まとめ

以上、今回はCW、SCWを実装してみました。

初めてオンライン機械学習の分野を勉強してみましたが、感想としては、重みを正規分布で表現するという考え方が、普通に面白いなぁと思いました。

また、そのためモデル自体はかなり軽量ですので、とても学習が早いです。(そもそも少ないサンプル数でも収束しますし)

実務においては、モデルはリッチであればリッチであるほど良いという単純なものでもなく、精度や計算コスト、処理時間などのバランスによるケースバイケースな部分があります。

場合によっては、このようなモデルも選択肢として出せるようにしておきたいと思いました。

追記(2017-09-26)

追記するほどのものなのか知らないけど、なんか面白そうだったのでメモ。

いずれやってみたいですね!

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です