Gin04ghデータ分析業務、予測モデル開発などを担当しています。勉強してきた技術などを適当に書いていければと思います。Python、R、SAS、JavaScript、PHP、Rubyらへんが得意です。今回は、下記の論文で紹介されているオンライン機械学習のモデルをPythonで実装してみました。Learning(SCW)を実装してみます。機械学習において、データを一括で読み込んで学習を行う方法を「バッチ学習」といいます。これに対し、「オンライン学習」とは、1件ずつデータを逐次読み込んで学習させる方法のことをいいます。そのため、学習させるデータを全て保持しておく必要がなく、1件ずつ学習に利用したデータをすぐに捨てることができます。このような性質が有効な場面としては、例えば、以下のような実装場面が考えられます。個人情報のデータなど、手元に保管するリスクがあるものから学習させる場合オンライン機械学習のより詳しい内容については、下記が参考になります。2015-04-08Amazon楽天ブックス機械学習プロフェッショナルシリーズの中で、オンライン機械学習をテーマにした一冊です。今回実装したCWやSCWの解説、導出の流れなども記されています。Learning(CW)まずはCWの実装になります。イメージは、線形分離をする際の各次元の重みが多次元正規分布に従うとして考え、その各重みに対応する分散を重みの信頼度として考えたモデルになります。分散が大きければ大きいほど、その重みについては自信がないと解釈します。この場合共分散を考えることもできますが、おそらく、共分散は保存する必要はなさそうな気がします。使わなそうだけど、何かに使えないかなーとか考えてしまいますね。実装が下記になります。https://github.com/Gin04gh/online_machine_learning/blob/master/CW.ipynb移設しました。1.0"""正解率が1.0となってしまいました...笑いろいろと試してみるとわかりますが、かなり少ないサンプル数でもすぐに収束する性質があるようです。線形分離可能な問題ではかなり有効なアルゴリズムのように思います。Learning(SCW)次にSCWを実装してみます。CWでは線形分離不可の問題に対してはうまく学習できず、境界が大きくぶれてしまうという弱点があります。それを克服するため、幾分か耐性をもたせたモデルがSCWです。論文では命題として2つの計算アルゴリズムが記されていましたので、両方とも実装してみました。https://github.com/Gin04gh/online_machine_learning/blob/master/SCW1.ipynb移設しました。https://github.com/Gin04gh/online_machine_learning/blob/master/SCW2.ipynb移設しました。1.0"""計算に関しては、とりあえず論文に従いましたので、正直やっていることの意味はよくわからないです笑SCWにしてもCWと同様、軽量かつ少ないデータ数で収束しやすいことが確認できました。まとめ以上、今回はCW、SCWを実装してみました。オンライン機械学習の分野を勉強してみましたが、感想としては、重みを正規分布で表現するという考え方が、普通に面白いなぁと思いました。そのためモデル自体はかなり軽量ですので、とても学習が早いです。(そもそも少ないサンプル数でも収束しますし)実務においては、モデルはリッチであればリッチであるほど良いという単純なものでもなく、精度や計算コスト、処理時間などのバランスによるケースバイケースな部分があります。場合によっては、このようなモデルも選択肢として出せるようにしておきたいと思いました。追記(2017-09-26)追記するほどのものなのか知らないけど、なんか面白そうだったのでメモ。コメントをキャンセルメールアドレスが公開されることはありません。・掲載されている広告について当サイトでは、第三者配信の広告サービス(Googleアドセンス)を利用しています。使用することがあります。Googleアドセンスに関する詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをご参照ください。・使用しているアクセス解析ツールについて当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。このGoogleアナリティクスはトラフィックデータの収集のために『Cookie』を使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。『Cookie』を無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。この規約に関して、詳しくはこちらをご覧ください。