Mathematicaで
機械学習してみた
全脳アーキテクチャ若手の会
第12回勉強会 カジュアルトーク
社会人支部 岩淵 勇樹
自己紹介
岩淵 勇樹(物智、butchi_y)
 2012年3月 博士(工学)
◦ 主に離散数学、音楽情報に従事
 2012年4月〜 面白法人カヤック
(Webエンジニア)
自己紹介
岩淵 勇樹(物智、butchi_y)
 フラクタル好き
 数学好き、だけど統計は苦手
 Mathematica愛好者
(「Mathematica Advent Calendar 2015」を作るなど貢献)
Mathematicaとは?
 数式処理システム
 研究者向けの一方、教育にも注力
 製品としては高価(万単位)だが
Raspberry Piには無償で同梱
Mathematicaでできること
 グラフィカルなデータ解析
(変数を微調整しながらプロット等)
 様々なフォーマットでのデータ入出力
 Webとの通信
 デバイス連携(Raspberry Pi等)
Mathematicaの機械学習用関
数
 Classify
 Predict
: 分類器をつくる関数
: 分類ではなく具体値を推測
出典: http://library.wolfram.com/infocenter/Conferences/9280/
つくってみた
 PCに内蔵のフォント文字を学習させ、
未知のフォントの文字を認識する
プログラム
 Classifyで分類をしてみるテスト
 (動機: 大量の教師ありデータを準備するのが楽)
概略
1. ASCII文字一覧取得
2. Macの内蔵フォント一覧をWeb上の
資料からスクレイピング
3. 文字それぞれをキーにしたレンダリ
ング文字画像を連想配列化
4. その連想配列を元にClassify
5. 内蔵でないフォントでの認識率の表
をプロット
ASCII文字一覧取得
 asciiLi = FromCharacterCode /@ Range[32, 126]
フォント一覧取得
 スクレイピングしたXMLデータは
Mathematica独自の関数形式に変換さ
れる
※フォント一覧データはあきら☆M氏のサイトから借用
フォント一覧取得
 スクレイピングによるフォント名抽出
(XMLパターンマッチと正規表現等)
 506フォントが抽出される
(有効なフォントはもっと少ない)
レンダリング文字画像取得
 Mac RetinaだからかRasterize関数実行に
やたら時間がかかる
分類器を作る
Association[ Table[alphabet ->
getGrapicLi[alphabet], {alphabet,
asciiLi}]]
recognize=Classify[assoc]
← 学習に必要な記述はこれだけ
分類メソッドはオプションで選べる
(例: Classify[assoc, Method -> “NeuralNetwork”] )
"LogisticRegression” 特徴の線形結合からの確率を使って分類する
"Markov" 特徴文字列のMarkovモデルを使って分類する
"NaiveBayes" 特徴の確率的独立を仮定して分類する
"NearestNeighbors" 最近傍の例を使って分類する
"NeuralNetwork" 人口の神経回路網を使って分類する
"RandomForest” BreimanおよびCutlerの決定木の集合を使って分類する
"SupportVectorMachine" サポートベクトルマシンを使って分類する
認識してみる
先ほど作ったrecognize関数(分類器)
ちゃんと認識されている
テキストを画像化するために作った関数
フォント名
未知のフォントに適用してみる
未知のフォントに適用してみる
認識表
 デフォルトのメソッド
(NearestNeighbors)ではまずまず
Methodで比較
 ニューラルネットワークが一番よさげ
(処理内容は解らないけれど)
ニューラルネットワーク最近傍 SVM
手書き風フォントでテスト
 怨霊フォントだとさすがにつらい
いったんまとめ
 Mathematicaで機械学習は可能
 統計などの知識がなくても関数一発で
分類器を作れる
 分類方法も自動で選ばれるほか、明示
的な指定も可能
その他できること
Mathematicaを使って
重要な疑問
 で、Mathematicaでディープラーニン
グできるの?
→そんな便利な関数ないです
実はWolfram社自体、そんなディープ
ラーニング押ししてない
でも、関数は充実しているので、
うまく実装さえすれば…
統計
 FindDistribution
 FindFormula
ビッグデータ
 SocialMediaData (Facebook, Twitterなど)
コンピュータビジョン
 ImageCorrespondingPoints
 EdgeDetect
組み込み済分類器
 TextRecognize
 ImageIdentify
 FindFaces
Image Identification Project
 https://www.imageidentify.com/
Webへの展開
 APIFunction
◦ Wolfram言語プログラムのAPI化
 CloudDeploy
◦ APIのデプロイ
◦ wolframcloud.com配下の
ランダムURLで即公開
 CreateDatabin
◦ データベース
Wolfram|Alpha
 https://www.wolframalpha.com/
まとめ
 Mathematicaでの機械学習は超簡単
 ディープラーニングは頑張り必要
 知識データベースとしての土壌は充分

Mathematicaで 機械学習してみた