Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP-MLを使用して気軽に機械学習にトライしてみる / Feel free to try m...

PHP-MLを使用して気軽に機械学習にトライしてみる / Feel free to try machine learning using PHP-ML

Ryo Shibayama

June 10, 2017
Tweet

More Decks by Ryo Shibayama

Other Decks in Technology

Transcript

  1. 気を取り直して、 自己紹介 サー バサイドエンジニア Twitter / GitHub : @serima ウェブサー

    ビスを開発しています ひたすら PHP と戯れる日々 を過ごしてきました かれこれ 10 年弱 東京の西のほう在住 福岡には初めて来ました!
  2. いままで作ってきたもの ガラケー 向けウェブアプリ(GPS を絡めた位置情報系) ウェブソー シャルゲー ム ホテル予約アプリ 占い・ キュレー

    ションアプリ ポー タル的なサイト 何が言いたいかといいうと、 いままで機械学習的な要素を何も触っ てきていない 強いて言うなら、 ソー シャルゲー ムのデー タ分析( 気合)
  3. ある日 GitHub Trending に p h p - a i

    / p h p - m l というリポジトリが現れ、 ス ター を稼いでいるのを見かける Machine Learning library for PHP だと? 3499 stars (2017/06/10 現在)
  4. 機械学習といえば Python? ライブラリが非常に充実している scikit‑learn ( 機械学習ライブラリ) NumPy ( 計算ライブラリ) SciPy

    ( 計算ライブラリ) Pandas ( 統計デー タ処理ライブラリ) 機械学習のライブラリの充実度合いといえば Python 一択という認識 PHP にもこういうものがついに出てきたのか! 実際に触ったことはありませんでした
  5. なにはともあれ README を読んでみる やけに簡単そうに見えませんか r e q u i r

    e _ o n c e ' v e n d o r / a u t o l o a d . p h p ' ; u s e P h p m l \ C l a s s i f i c a t i o n \ K N e a r e s t N e i g h b o r s ; $ s a m p l e s = [ [ 1 , 3 ] , [ 1 , 4 ] , [ 2 , 4 ] , [ 3 , 1 ] , [ 4 , 1 ] , [ 4 , 2 ] ] ; $ l a b e l s = [ ' a ' , ' a ' , ' a ' , ' b ' , ' b ' , ' b ' ] ; $ c l a s s i f i e r = n e w K N e a r e s t N e i g h b o r s ( ) ; $ c l a s s i f i e r - > t r a i n ( $ s a m p l e s , $ l a b e l s ) ; e c h o $ c l a s s i f i e r - > p r e d i c t ( [ 3 , 2 ] ) ; / / r e t u r n ' b '
  6. k 近傍法 教師あり学習 分類問題を解くときに使用されるアルゴリズムのひとつ 先程の例でやっていること [ 1 , 3 ]

    , [ 1 , 4 ] , [ 2 , 4 ] に a というラベル、 [ 3 , 1 ] , [ 4 , 1 ] , [ 4 , 2 ] に b というラベルをつけておき [ 3 , 2 ] というデー タがあった場合、 どちらのラベルがつきますか? というのを分類する → この場合、 b が返ってくる
  7. サンプルデー タってないの? デモ用にすぐ使えるデー タセットが 3 種類あります。 Iris( あやめ) Wine( ワイン)

    Glass( ガラス) 種類数 3 3 6 総サンプル数 150 178 214 特徴量次元数 4 13 9 R 言語や scikit‑learn でも定番のデモデー タセットらしい
  8. Iris Dataset サンプル例 s e p a l l e

    n g t h , s e p a l w i d t h , p e t a l l e n g t h , p e t a l w i d t h , c l a s s 5 . 1 , 3 . 5 , 1 . 4 , 0 . 2 , I r i s - s e t o s a 4 . 9 , 3 . 0 , 1 . 4 , 0 . 2 , I r i s - s e t o s a 4 . 7 , 3 . 2 , 1 . 3 , 0 . 2 , I r i s - s e t o s a 7 . 0 , 3 . 2 , 4 . 7 , 1 . 4 , I r i s - v e r s i c o l o r 6 . 4 , 3 . 2 , 4 . 5 , 1 . 5 , I r i s - v e r s i c o l o r 6 . 9 , 3 . 1 , 4 . 9 , 1 . 5 , I r i s - v e r s i c o l o r 6 . 3 , 3 . 3 , 6 . 0 , 2 . 5 , I r i s - v i r g i n i c a 5 . 8 , 2 . 7 , 5 . 1 , 1 . 9 , I r i s - v i r g i n i c a 7 . 1 , 3 . 0 , 5 . 9 , 2 . 1 , I r i s - v i r g i n i c a 6 . 3 , 2 . 9 , 5 . 6 , 1 . 8 , I r i s - v i r g i n i c a c s がく(sepal)・ 花弁(petal) の幅と高さを特徴量としている
  9. デモを使ってみる $ c l a s s i f i

    e r = n e w \ P h p m l \ C l a s s i f i c a t i o n \ N a i v e B a y e s ( ) ; $ i r i s _ d a t a s e t = n e w \ P h p m l \ D a t a s e t \ D e m o \ I r i s D a t a s e t ( ) ; $ c l a s s i f i e r - > t r a i n ( $ i r i s _ d a t a s e t - > g e t S a m p l e s ( ) , $ i r i s _ d a t a s e t - > g e t T a r g e t s ( ) ) ; / / 試しに適当な s e p a l , p e t a l を入れて p r e d i c t させてみる e c h o $ c l a s s i f i e r - > p r e d i c t ( [ 1 . 0 , 2 . 0 , 2 . 1 , 2 . 5 ] ) ; / / v i r g i n i c a
  10. Dataset Class デー タソー スを読み込みやすくするために、 デー タセット用のヘルパー クラスが用意されている ArrayDataset CsvDataset

    カンマ区切りで特徴量、 行の最後にラベル FileDataset 階層構造になっているファイル群をひとつのメソッドでロー ド g e t S a m p l e s ( ) 、 g e t T a r g e t s ( ) などのメソッドが定義されている
  11. 正解は 岡山県 全く知らない人には、 想像もつかない なぜなら、 どこの県にあってもおかしくなさそう 人間は、 経験的に市区町村と都道府県のラベリングを知ってい る train

    メソッドで特徴量を学習させる必要がある 「 それっぽさ」=「 尤もらしさ」 がデー タとして偏りが出ることが 重要
  12. 特徴量抽出の難しさ 都道府県でいうと、 沖縄県の市区町村って特徴的だと思いませんか? 那覇市 宜野湾市 石垣市 浦添市 名護市 糸満市 沖縄市

    豊見城市 . . . それを、 どうして特徴的だと思うのか? どのような関数を通せばそれが表せるか? 例) 常用漢字で使われない文字数の割合・ 訓読みの一致率
  13. Preprocessing デー タの前処理を行う Normalization デー タを 0 ~ 1 の間に

    rescaling する Imputer 現実のデー タはそううまくすべて揃っていることがない いわば null みたいな値をなんらかのデー タとして埋める
  14. 現時点で、 実装されているアルゴリズム 相関ルー ルマイニング Apiori アルゴリズム 分類 SVC( サポー トベクトル分類)・k

    近傍法・ ナイー ブベイズ 回帰 最小二乗法・ サポー トベクトル回帰 クラスタリング k‑means 法・DBSCAN ニュー ラルネットワー ク MLPClassifier scikit‑learn には及ばないもののニュー ラルネットワー クも実装されてい る
  15. まとめ 重い腰をあげて Python 使うほどでもない けれども、 ちょっと触ってみたい そんなときに導入としてぜひ使ってみるとよいのでは? ( でも、 やっぱり本格的にやるなら

    Python を選んだほうが良いよ) ライブラリを使うこと自体は実はすごく簡単 高い精度の結果を出すには、 教師デー タとパラメー タチュー ニングが肝要 大事なことなので二回言いま( す| した)