Mathematicaで機械学習してみた

30
Mathematica で でででででででで ででででででででででででで で 12 でででで でででででででで ででででで でで でで

Transcript of Mathematicaで機械学習してみた

Page 1: Mathematicaで機械学習してみた

Mathematica で機械学習してみた全脳アーキテクチャ若手の会第 12 回勉強会 カジュアルトーク社会人支部 岩淵 勇樹

Page 2: Mathematicaで機械学習してみた

自己紹介岩淵 勇樹(物智、 butchi_y )2012 年 3 月 博士(工学)

◦主に離散数学、音楽情報に従事2012 年 4 月〜 面白法人カヤック( Web エンジニア)

Page 3: Mathematicaで機械学習してみた

自己紹介岩淵 勇樹(物智、 butchi_y )フラクタル好き数学好き、だけど統計は苦手Mathematica 愛好者(「 Mathematica Advent Calendar 2015 」を作るなど貢献)

Page 4: Mathematicaで機械学習してみた

Mathematica とは?数式処理システム研究者向けの一方、教育にも注力製品としては高価(万単位)だが

Raspberry Pi には無償で同梱

Page 5: Mathematicaで機械学習してみた

Mathematica でできることグラフィカルなデータ解析(変数を微調整しながらプロット等)様々なフォーマットでのデータ入出力Web との通信デバイス連携( Raspberry Pi 等)

Page 6: Mathematicaで機械学習してみた

Mathematica の機械学習用関数ClassifyPredict

: 分類器をつくる関数: 分類ではなく具体値を推測

出典 : http://library.wolfram.com/infocenter/Conferences/92

80/

Page 7: Mathematicaで機械学習してみた

つくってみたPC に内蔵のフォント文字を学習させ、未知のフォントの文字を認識するプログラム

Classify で分類をしてみるテスト (動機 : 大量の教師ありデータを準備するのが楽)

Page 8: Mathematicaで機械学習してみた

概略1. ASCII 文字一覧取得2. Mac の内蔵フォント一覧を Web 上の資料からスクレイピング3. 文字それぞれをキーにしたレンダリング文字画像を連想配列化4. その連想配列を元に Classify5. 内蔵でないフォントでの認識率の表をプロット

Page 9: Mathematicaで機械学習してみた

ASCII 文字一覧取得asciiLi = FromCharacterCode /@ Range[32,

126]

Page 10: Mathematicaで機械学習してみた

フォント一覧取得スクレイピングした XML データは

Mathematica 独自の関数形式に変換される

※ フォント一覧データはあきら☆ M 氏のサイトから借用

Page 11: Mathematicaで機械学習してみた

フォント一覧取得スクレイピングによるフォント名抽出( XML パターンマッチと正規表現等)506 フォントが抽出される(有効なフォントはもっと少ない)

Page 12: Mathematicaで機械学習してみた

レンダリング文字画像取得Mac Retina だからか Rasterize 関数実行にやたら時間がかかる

Page 13: Mathematicaで機械学習してみた

分類器を作るAssociation[ Table[alphabet -> getGrapicLi[alphabet], {alphabet, asciiLi}]]recognize=Classify[assoc]

← 学習に必要な記述はこれだけ

分類メソッドはオプションで選べる(例 : Classify[assoc, Method -> “NeuralNetwork”] )"LogisticRegression”特徴の線形結合からの確率を使って分類する"Markov" 特徴文字列の Markov モデルを使って分類する"NaiveBayes" 特徴の確率的独立を仮定して分類する"NearestNeighbors" 最近傍の例を使って分類する"NeuralNetwork" 人口の神経回路網を使って分類する"RandomForest” Breimanおよび Cutler の決定木の集合を使って分類する"SupportVectorMachine" サポートベクトルマシンを使って分類する

Page 14: Mathematicaで機械学習してみた

認識してみる先ほど作った recognize 関数(分類器)

ちゃんと認識されている

テキストを画像化するために作った関数

フォント名

Page 15: Mathematicaで機械学習してみた

未知のフォントに適用してみる

Page 16: Mathematicaで機械学習してみた

未知のフォントに適用してみる

Page 17: Mathematicaで機械学習してみた

認識表デフォルトのメソッド( NearestNeighbors )ではまずまず

Page 18: Mathematicaで機械学習してみた

Method で比較

ニューラルネットワークが一番よさげ(処理内容は解らないけれど)

ニューラルネットワーク最近傍 SVM

Page 19: Mathematicaで機械学習してみた

手書き風フォントでテスト怨霊フォントだとさすがにつらい

Page 20: Mathematicaで機械学習してみた

いったんまとめMathematica で機械学習は可能統計などの知識がなくても関数一発で分類器を作れる分類方法も自動で選ばれるほか、明示的な指定も可能

Page 21: Mathematicaで機械学習してみた

その他できることMathematica を使って

Page 22: Mathematicaで機械学習してみた

重要な疑問で、 Mathematica でディープラーニングできるの?→そんな便利な関数ないです実は Wolfram 社自体、そんなディープラーニング押ししてないでも、関数は充実しているので、うまく実装さえすれば…

Page 24: Mathematicaで機械学習してみた

ビッグデータSocialMediaData ( Facebook, Twitterなど)

Page 27: Mathematicaで機械学習してみた

Image Identification Projecthttps://www.imageidentify.com/

Page 28: Mathematicaで機械学習してみた

Webへの展開APIFunction

◦Wolfram言語プログラムの API 化CloudDeploy

◦API のデプロイ◦wolframcloud.com 配下のランダム URL で即公開

CreateDatabin◦データベース

Page 30: Mathematicaで機械学習してみた

まとめMathematica での機械学習は超簡単ディープラーニングは頑張り必要知識データベースとしての土壌は充分