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.

PHP-MLを使用して気軽に機械学習にトライしてみる

2,756 views

Published on

PHPカンファレンス福岡2017の15分枠でお話した内容です。
Feel free to try machine learning with php-ai/php-ml

Published in: Engineering
  • Be the first to comment

PHP-MLを使用して気軽に機械学習にトライしてみる

  1. 1. PHP‑ML を使用して 手軽に機械学習にトライしてみる @serima / 柴山嶺 PHP カンファレンス福岡2017
  2. 2. はじめにおことわり 機械学習まわりのビギナーむけのお話になります 数式などを出しての、アルゴリズムの説明などはしません 中級者ラベルがついていますが、それは私の設定ミスです Python のライブラリなどをつかってすでに機械学習を試してみている方 などには退屈な話になってしまうことをご了承ください...
  3. 3. 気を取り直して、自己紹介 サーバサイドエンジニア Twitter / GitHub : @serima ウェブサービスを開発しています ひたすらPHP と戯れる日々を過ごしてきました かれこれ10 年弱 東京の西のほう在住 福岡には初めて来ました!
  4. 4. 普段のcommit 状況 最近はコードを結構書いています(ほとんど会社でですが ) 割合的にはこんな感じ PHP 70 % JavaScript 20 % Go 5 % Python 5 %
  5. 5. いままで作ってきたもの ガラケー向けウェブアプリ(GPS を絡めた位置情報系) ウェブソーシャルゲーム ホテル予約アプリ 占い・キュレーションアプリ ポータル的なサイト 何が言いたいかといいうと、いままで機械学習的な要素を何も触っ てきていない 強いて言うなら、ソーシャルゲームのデータ分析(気合)
  6. 6. AI?機械学習?ディープラーニング? ネットでひととおり話題となる記事は読んでるものの、トレンドに ついていけていないコンプレックス
  7. 7. AI と機械学習とディープラーニング 機械学習とは データ解析の結果をもとに反復パタンなどから判断や予測を行う技術 出典:NVIDIA Official Blog
  8. 8. ある日 GitHub Trending に php-ai/php-ml というリポジトリが現れ、ス ターを稼いでいるのを見かける Machine Learning library for PHP だと? 3499 stars (2017/06/10 現在)
  9. 9. 機械学習といえばPython? ライブラリが非常に充実している scikit‑learn (機械学習ライブラリ) NumPy (計算ライブラリ) SciPy (計算ライブラリ) Pandas (統計データ処理ライブラリ) 機械学習のライブラリの充実度合いといえばPython 一択という認識 PHP にもこういうものがついに出てきたのか! 実際に触ったことはありませんでした
  10. 10. なにはともあれREADME を読んでみる やけに簡単そうに見えませんか require_once 'vendor/autoload.php'; use PhpmlClassificationKNearestNeighbors; $samples = [[1, 3],[1, 4],[2, 4],[3, 1],[4, 1],[4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new KNearestNeighbors(); $classifier->train($samples, $labels); echo $classifier->predict([3, 2]); // return 'b'
  11. 11. k 近傍法 教師あり学習 分類問題を解くときに使用されるアルゴリズムのひとつ 先程の例でやっていること  [1, 3] ,  [1, 4] ,  [2, 4] に a というラベル、  [3, 1] ,  [4, 1] ,  [4, 2] に b というラベルをつけておき  [3, 2] というデータがあった場合、 どちらのラベルがつきますか?というのを分類する →この場合、 b が返ってくる
  12. 12. サンプルデータってないの? デモ用にすぐ使えるデータセットが3 種類あります。 Iris(あやめ) Wine(ワイン) Glass(ガラス) 種類数 3 3 6 総サンプル数 150 178 214 特徴量次元数 4 13 9 R 言語やscikit‑learn でも定番のデモデータセットらしい
  13. 13. Iris Dataset サンプル例 sepal length,sepal width,petal length,petal width,class 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 7.0,3.2,4.7,1.4,Iris-versicolor 6.4,3.2,4.5,1.5,Iris-versicolor 6.9,3.1,4.9,1.5,Iris-versicolor 6.3,3.3,6.0,2.5,Iris-virginica 5.8,2.7,5.1,1.9,Iris-virginica 7.1,3.0,5.9,2.1,Iris-virginica 6.3,2.9,5.6,1.8,Iris-virginicacs がく(sepal)・花弁(petal)の幅と高さを特徴量としている
  14. 14. Iris Dataset (出典:https://github.com/haruosuz/books/tree/master/bbs)
  15. 15. デモを使ってみる $classifier = new PhpmlClassificationNaiveBayes(); $iris_dataset = new PhpmlDatasetDemoIrisDataset(); $classifier->train( $iris_dataset->getSamples(), $iris_dataset->getTargets() ); // 試しに適当な sepal, petal を入れて predict させてみる echo $classifier->predict([1.0, 2.0, 2.1, 2.5]); // virginica
  16. 16. Dataset Class データソースを読み込みやすくするために、データセット用のヘルパー クラスが用意されている ArrayDataset CsvDataset カンマ区切りで特徴量、行の最後にラベル FileDataset 階層構造になっているファイル群をひとつのメソッドでロード  getSamples() 、 getTargets() などのメソッドが定義されている
  17. 17. なにか自分のデータを入れてみたいよね 都道府県・市区町村データを手に入れた 「この市名って○○県っぽい」を実現できないか? たとえば、「浅口市」ってどこの県にありそうですか?
  18. 18. 正解は 岡山県 全く知らない人には、想像もつかない なぜなら、どこの県にあってもおかしくなさそう 人間は、経験的に市区町村と都道府県のラベリングを知ってい る train メソッドで特徴量を学習させる必要がある 「それっぽさ」=「尤もらしさ」がデータとして偏りが出ることが 重要
  19. 19. 特徴量抽出の難しさ 都道府県でいうと、沖縄県の市区町村って特徴的だと思いませんか? 那覇市 宜野湾市 石垣市 浦添市 名護市 糸満市 沖縄市 豊見城市 ... それを、どうして特徴的だと思うのか? どのような関数を通せばそれが表せるか? 例) 常用漢字で使われない文字数の割合・訓読みの一致率
  20. 20. 特徴量抽出の難しさ なんでもかんでも特徴量にすれば良いというものではない 有用な組み合わせを見つける必要がある
  21. 21. Preprocessing データの前処理を行う Normalization データを0 ~ 1 の間にrescaling する Imputer 現実のデータはそううまくすべて揃っていることがない いわばnull みたいな値をなんらかのデータとして埋める
  22. 22. 語句解析 Token Count Vectorizer ある文書集合における、その単語の出現頻度に応じて重み付け を行う 文書検索に有用
  23. 23. Math ライブラリ 行列計算 距離 ユークリッド距離 マンハッタン距離 チェビシェフ距離 ミンコフスキー距離 集合 統計 ピアソン分布
  24. 24. 現時点で、実装されているアルゴリズム 相関ルールマイニング Apiori アルゴリズム 分類 SVC(サポートベクトル分類)・k 近傍法・ナイーブベイズ 回帰 最小二乗法・サポートベクトル回帰 クラスタリング k‑means 法・DBSCAN ニューラルネットワーク MLPClassifier scikit‑learn には及ばないもののニューラルネットワークも実装されてい る
  25. 25. scikit‑learn cheat sheet
  26. 26. データのプロットはできるの? Python にはmatplotlib という強力なグラフ描画ライブラリがある PHP にはなさそう PHP からPython を外部実行しているケースが見られる
  27. 27. それなりの頻度でPR はマージされている模様 今後、他のアルゴリズムが実装されていくといいですね
  28. 28. まとめ 重い腰をあげてPython 使うほどでもない けれども、ちょっと触ってみたい そんなときに導入としてぜひ使ってみるとよいのでは? (でも、やっぱり本格的にやるならPython を選んだほうが良いよ) ライブラリを使うこと自体は実はすごく簡単 高い精度の結果を出すには、教師データとパラメータチューニングが肝要 大事なことなので二回言いま(す|した)
  29. 29. ご清聴ありがとうございました!

×