Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今年のKDDベストペーパーを実装・公開しました

4,822 views

Published on

2013/09/01 第4回データ構造と情報検索と自然言語処理勉強会(DSIRNLP, http://partake.in/events/76854228-ba38-4f6e-87b9-f79e30add75c# )での発表内容です。
同一内容の会社ブログはこちら→ http://research.preferred.jp/2013/08/sketch/

Published in: Technology

今年のKDDベストペーパーを実装・公開しました

  1. 1. 今年年のKDDベストペーパーを 実装してみました 株式会社プリファードインフラストラクチャー   ⽐比⼾戸  将平
  2. 2. ⾃自⼰己紹介 l  ⽐比⼾戸将平(HIDO  Shohei) l  TwitterID:  Vapnikマン@sla l  専⾨門:データマイニング、機械学習 l  経歴: –  2006-‐‑‒2012:  IBM東京基礎研究所データ解析グループ l  機械学習(特に異異常検知)のアルゴリズム研究開発 l  お客様案件でデータ解析プロジェクトに従事 –  2012-‐‑‒:  株式会社プリファードインフラストラクチャー l  ⼤大規模オンライン分散機械学習基盤Jubatusチームリーダー –  2013-‐‑‒:  Preferred  Infrastructure  America,  Inc. l  Chief  Research  Officer 2
  3. 3. l  今⽇日のトピック:⾏行行列列スケッチ l  ⾏行行列列スケッチとは l  Frequent-‐‑‒directionsアルゴリズム l  評価実験 l  +αのはなし Agenda
  4. 4. SIGKDD:  Intʼ’l  Conf.  on  Knowledge  Discovery   and  Data  Mining l  ACM  データマイニング/機械学習の最難関国際会議 l  理理論論的な保証と同時に実験での(特に⼤大規模)評価が必要 l  今年年は8⽉月中旬にシカゴで開催 l  Best  Research  Paper  Award:  Edo  Liberty  (Yahoo!  Labs,  Haifa) “Simple  and  Deterministic  Matrix  Sketching” 4
  5. 5. github.com/hido/frequent-‐‑‒directionで公開中 5
  6. 6. l  今⽇日のトピック:⾏行行列列スケッチ l  ⾏行行列列スケッチとは l  Frequent-‐‑‒directionsアルゴリズム l  評価実験 l  +αのはなし Agenda
  7. 7. ⾏行行列列スケッチ:n  x  mのオリジナル⾏行行列列Aを ⼩小さな⾏行行列列Bで近似 l  「近似ができる」という意味 –  以下の性質を良良く保つ –  BのSVDによる低ランク近似はAのそれをよく近似 l  応⽤用 –  PCA –  k-‐‑‒meansクラスタリング –  LSI 7
  8. 8. l  今⽇日のトピック:⾏行行列列スケッチ l  ⾏行行列列スケッチとは l  Frequent-‐‑‒directionsアルゴリズム l  評価実験 l  +αのはなし Agenda
  9. 9. n  x  mのオリジナル⾏行行列列Aをはるかに⼩小さな ℓx  m⾏行行列列Bで近似する(n  >>ℓ) l  元⾏行行列列Aの各⾏行行を、各変数の「表現量量」ベクトルと⾒見見なすと、 sketchは直感的にはよく現れる「⽅方向」をできるだけ残して⾏行行数 を削減する操作として捉えられる l  そのような操作は、各アイテムの出現個数リストからよく現れる 共起パターンを⾒見見つける、頻出アイテムマイニングと似ている l  実際、ゼロ⾏行行列列から始まるsketch⾏行行列列BにAの各⾏行行を挿⼊入しな がら、BのSVDを求めて頻出⽅方向を更更新しつつ、特異異値が⼩小さい ものに対応する部分はゼロ⾏行行に潰す操作を⾏行行って、逐次的にBを 更更新するアルゴリズムを与えた l  その結果、以下の不不等式で近似誤差を抑えられる 9
  10. 10. アルゴリズム(超簡単) 10 : BのSVDを逐次計算 : 特異異ベクトルをつぶす : Aのi⾏行行⽬目それぞれに独⽴立立した操作 : 計算量量はO(nℓm)
  11. 11. Python実装(NumPyつかえば超簡単) 11
  12. 12. l  今⽇日のトピック:⾏行行列列スケッチ l  ⾏行行列列スケッチとは l  Frequent-‐‑‒directionsアルゴリズム l  評価実験 l  +αのはなし Agenda
  13. 13. 評価実験:USPS⼿手書き⽂文字画像データセット PCAの上位2軸ではられる平⾯面でプロットしてみる 参考:東⼤大冨岡先⽣生の演習問題 http://www.ibis.t.u-‐‑‒tokyo.ac.jp/RyotaTomioka/Teaching/enshu13 13
  14. 14. まずPythonでnumpy.linalgのSVDで再現(⾏行行列列A) 14 l  元⾏行行列列Aの⼤大きさは7291  x  256(n=7291、m=256) l  ほぼ⼀一致することは確認できた ⾏行行列列AのSVD(近似⽬目標)演習ページから引⽤用
  15. 15. ℓ=  3の場合:さすがに無理理 l  ⻘青⾊色の1が左端、紫の0が右側に集まってはいる…? 15 ⾏行行列列AのSVD(近似⽬目標)ℓ = 3で得た⾏行行列列BのSVD結果
  16. 16. ℓ=  4の場合:だいぶばらけた l  まだ0、1、3以外はかなり混ざってしまっている 16 ⾏行行列列AのSVD(近似⽬目標)ℓ = 4で得た⾏行行列列BのSVD結果
  17. 17. ℓ=  5の場合:さらに変形 l  0と3が分かれてきた 17 ⾏行行列列AのSVD(近似⽬目標)ℓ = 5で得た⾏行行列列BのSVD結果
  18. 18. ℓ=  6の場合:さらに変形 l  左がやや潰れ始めている 18 ⾏行行列列AのSVD(近似⽬目標)ℓ = 6で得た⾏行行列列BのSVD結果
  19. 19. ℓ=  8の場合:ちょっと似てきた l  真ん中がまた分かれ始めた 19 ⾏行行列列AのSVD(近似⽬目標)ℓ = 8で得た⾏行行列列BのSVD結果
  20. 20. ℓ=  16の場合:かなり似てきた l  真ん中の様⼦子もほぼ⼀一緒に 20 ⾏行行列列AのSVD(近似⽬目標)ℓ = 16で得た⾏行行列列BのSVD結果
  21. 21. ℓ=  32の場合:ほぼ⼀一致 l  ⾒見見た⽬目ではもう違いが⾒見見つけられない l  これ以上ℓを⼤大きくしても結果に変化は⾒見見られない 21 ⾏行行列列AのSVD(近似⽬目標)ℓ = 32で得た⾏行行列列BのSVD結果
  22. 22. 近似精度度⾯面での結論論 l  ℓ  =  16くらいでほぼ⼗十分な近似結果が得られている l  数字が10種類しか無いことを考えるとこの結果は⽰示唆的 2222 7291 x 256⾏行行列列AのSVD結果16 x 256⾏行行列列BのSVD結果
  23. 23. l  今⽇日のトピック:⾏行行列列スケッチ l  ⾏行行列列スケッチとは l  Frequent-‐‑‒directionsアルゴリズム l  評価実験 l  +αのはなし Agenda
  24. 24. 冨岡先⽣生からの疑問 l  「ℓを増やしたら実⾏行行時間が短くなっているが何故ですか?」 l  実際にブログに書いた範囲だと実⾏行行時間は減少傾向 24 0" 0.2" 0.4" 0.6" 0.8" 1" 1.2" 1.4" 1.6" 1.8" 3" 4" 5" 6" 8" 16" 32" ℓ
  25. 25. 速度度⾯面の結論論:ℓが精度度的に⼗十分な時が最適? 25 l  ℓを増やせば⾏行行列列BのSVD回数は減っていく l  実⾏行行時間全体は⼀一度度減ったあと、増えていく 0" 500" 1000" 1500" 2000" 2500" 3000" 3500" 4000" 0" 0.5" 1" 1.5" 2" 2.5" 3" 3.5" 4" 3" 4" 5" 6" 8" 16" 32" 64" 256" B SVD ℓ
  26. 26. @tmaeharaさんからのコメント l  「これ知ってる!!進研ゼミでやったやつだ!!!」 26
  27. 27. そこんとこEdo  Liberty本⼈人に聞いてみました l  This  indeed  can  be  used  but  I  thought  it  will  be  less  efficient   in  practice  and  more  complicated  to  code.  So,  I  did  not   include  it  in  the  paper. l  Theoretically  though,  it  can  reduce  the  space  usage  by  a   factor  of  2,  which  theoretical  CS  people  think  is  not   important  :) l  That  said,  I  received  quite  a  few  questions  about  that  so  I  will   say  something  about  it  in  the  journal  version. l  incremental  rank-‐‑‒1  SVD  updatesも同じように使えると思うよ l  けど実⽤用的には効率率率悪いし実装するのも難しいよね l  だからSIGKDDの論論⽂文には⼊入れなかったよ l  けど少なくともメモリ使⽤用量量は桁違いに良良いはずだよ l  そこは理理論論の⼈人は気にしないのかもしれないけど… l  まぁ同じ質問受けまくるからジャーナル版では何か書くよ 27
  28. 28. ⾞車車輪輪の再発明あるいは再発⾒見見: 進歩性があるのであればありなのではないか l  ⼤大規模データだから⼿手法がシンプルに回帰、というのはある 28
  29. 29. まとめ:Frequent-‐‑‒directionsアルゴリズム使えるよ l  アルゴリズム単純 l  実装簡単(⽐比⼾戸Python版は公開されている) l  メモリあんまり喰わない l  オンライン性もある –  ⾏行行列列Aの各⾏行行に対して独⽴立立して動作する –  ストリームデータの各サンプル=Aの末尾⾏行行 –  新しいサンプルの到着毎に更更新すれば良良い l  並列列性もある –  ⾏行行列列をぶったぎってしまえば独⽴立立して計算できる l  いろんな機械学習タスクに使える –  クラスタリング、次元削減、外れ値検知、etc… 29 =
  30. 30. ん…?オンライン、並列列、機械学習…だと…? 30 http://jubat.us/にてOSS公開中!!

×