SlideShare a Scribd company logo
PHP-ML で手書き数字認識
内山 雄司 (@y__uti)
第120回 PHP勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2017-11-29 第120回 PHP勉強会 2
PHP-ML
https://github.com/php-ai/php-ml
2017-11-29 第120回 PHP勉強会 3
やったこと
PHP-ML に実装されている「ロジスティック回帰」という手法で
手書き数字認識を試してみました
簡単なデモを用意したので以下の URL で試せます
http://150.95.149.208/digit/
フロントエンドできないおじさんなのでタッチデバイスには対応していません
2017-11-29 第120回 PHP勉強会 4
手書き数字認識
画像を受け取って 0 ~ 9 の数字のいずれかを返す
2017-11-29 第120回 PHP勉強会 5
function recognizeDigit($image) : int
{
$digit = "0 ~ 9 の中で $image に一番近い数字"
return $digit;
}
手書き数字認識
画像をピクセル値の配列と考えれば、単なる数値計算の問題
2017-11-29 第120回 PHP勉強会 6
function recognizeDigit(array $data) : int
{
$digit = "0 ~ 9 の中で $data に一番近い数字"
return $digit;
}
◦ $data の "0 っぽさ" ~ "9 っぽさ" をそれぞれ計算して
◦ 一番それっぽい数字を返す
"1" っぽさ?
数字の "1" を普通に書くと・・・
◦ 真ん中あたりに上下に線がある (ピクセル値が "ON" の状態)
◦ 左右の端には線はない
2017-11-29 第120回 PHP勉強会 7
"1" っぽさの計算
各座標に得点を配分して合計する
◦ 真ん中あたりはピクセルが "ON" になっていたら加点する
◦ 左右の端の方でピクセルが "ON" になっていたら減点する
2017-11-29 第120回 PHP勉強会 8
加点されまくり = 1 っぽい!
"1" っぽさの計算
各座標に得点を配分して合計する
◦ 真ん中あたりはピクセルが "ON" になっていたら加点する
◦ 左右の端の方でピクセルが "ON" になっていたら減点する
2017-11-29 第120回 PHP勉強会 9
このあたりは加点されるが
このあたりは減点される
減点要素が多い = 1 っぽくない
手書き数字認識
「どのように得点を配分するか」が性能の良し悪しを決める
良い得点配分を (大量の) データから計算で求めるのが機械学習
◦ 具体的な計算方法は色々ある
◦ 得点の付け方自体も「座標ごとの合計」より複雑な手法が色々ある
2017-11-29 第120回 PHP勉強会 10
デモの説明
The MNIST database of handwritten digits
◦ http://yann.lecun.com/exdb/mnist/
◦ 全部で 70,000 文字の手書き数字画像が含まれるデータセット
学習方法
◦ 今回は 10,000 文字を利用 (全部使うにはメモリが足りなかった)
◦ PHP-ML の LogisticRegression という手法で学習
◦ 学習された「得点」を使ってデータを判別
機械学習の特徴 (例外もあります)
◦ 学習には時間がかかる ⇒ オフラインのバッチでゴリゴリやる
◦ 判別は一瞬 ⇒ サービスとして提供する
2017-11-29 第120回 PHP勉強会 11
大まかな実装 (学習)
デモサイトの実際の実装とは異なります
2017-11-29 第120回 PHP勉強会 12
$dataset = new CsvDataset($trainfile, 784, false);
$classifier = new LogisticRegression(
$maxiter,
false,
LogisticRegression::BATCH_TRAINING,
'log',
'L2');
$classifier->train(
$dataset->getSamples(), $dataset->getTargets());
$modelManager = new ModelManager();
$modelManager->saveToFile($classifier, $modelfile);
大まかな実装 (判別)
デモサイトの実際の実装とは異なります
2017-11-29 第120回 PHP勉強会 13
$dataset = new CsvDataset($testfile, 784, false);
$modelManager = new ModelManager();
$classifier = $modelManager->restoreFromFile($modelfile);
$predicted = $classifier->predict($dataset->getSamples());
$actual = $dataset->getTargets();
$accuracy = Accuracy::score($actual, $predicted);
おわり
2017-11-29 第120回 PHP勉強会 14

More Related Content

What's hot (20)

PDF
php-buildがいかに便利かを力説する
Yoshio Hanawa
 
PDF
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
 
PDF
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
sasezaki
 
PDF
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
 
PDF
PECL operator で演算子オーバーロード
y-uti
 
PDF
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
PDF
HTTPメッセージ、PHPの 事情ば分かっとっと?
sasezaki
 
KEY
php-timecopを実戦投入してみた
Yoshio Hanawa
 
PPTX
ぼくのNode.jsのだいいっぽ
拓弥 遠藤
 
KEY
最強のPHP統合開発環境 PHPStorm
晃 遠山
 
PPTX
PHP基礎勉強会
Yuji Otani
 
PDF
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
shinjiigarashi
 
PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
 
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
ODP
Pinoco phptal-phpcon-kansai
Hisateru Tanaka
 
PDF
PHPの今とこれから2015
Rui Hirokawa
 
PDF
PHPの関数実行とその計測
shinjiigarashi
 
PDF
2015/08/08 第8回G-Study発表資料-部屋と自宅サーバと私
Yuta Hayakawa
 
PDF
2015/04/11 第4回G-Study発表資料 Risoluto開発に見る車輪の再発明
Yuta Hayakawa
 
PDF
PHP でファイルシステムを作ろう
shinjiigarashi
 
php-buildがいかに便利かを力説する
Yoshio Hanawa
 
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
sasezaki
 
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
 
PECL operator で演算子オーバーロード
y-uti
 
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
sasezaki
 
php-timecopを実戦投入してみた
Yoshio Hanawa
 
ぼくのNode.jsのだいいっぽ
拓弥 遠藤
 
最強のPHP統合開発環境 PHPStorm
晃 遠山
 
PHP基礎勉強会
Yuji Otani
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
shinjiigarashi
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
Pinoco phptal-phpcon-kansai
Hisateru Tanaka
 
PHPの今とこれから2015
Rui Hirokawa
 
PHPの関数実行とその計測
shinjiigarashi
 
2015/08/08 第8回G-Study発表資料-部屋と自宅サーバと私
Yuta Hayakawa
 
2015/04/11 第4回G-Study発表資料 Risoluto開発に見る車輪の再発明
Yuta Hayakawa
 
PHP でファイルシステムを作ろう
shinjiigarashi
 

Similar to PHP-ML で手書き数字認識 (20)

PPTX
20110910 闇鍋的php魔改造
do_aki
 
PDF
PHPでセキュリティを真面目に考える
Takuya Sato
 
PDF
PHPカンファレンス2015
Daisuke Kasuya
 
PDF
PHP5技術者認定初級試験を受験しました
hajikami
 
PDF
2015/09/12 第9回G-Study発表資料-XdebugでPHP ScriptのProfileしてみる
Yuta Hayakawa
 
PPT
20090801phpstudy Sanemat
Kenichi Murahashi
 
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
 
PDF
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
 
PDF
PHPerに覚えて欲しい日本語の重要性
Rina Fukuda
 
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
PDF
Phpのはなし
Serverworks Co.,Ltd.
 
PPTX
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
 
PDF
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
 
PDF
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Kite Koga
 
PPT
第55回PHP勉強会
Hideyuki Shimooka
 
PDF
Phpcon tokyo 20120_bigginer
Hideo Kashioka
 
PPTX
PHP AV BINDING
Yo Ya
 
PPTX
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
 
PDF
PHPとJavaScriptの噺
Shogo Kawahara
 
PPTX
PHP初心者セッション2013
Hideo Kashioka
 
20110910 闇鍋的php魔改造
do_aki
 
PHPでセキュリティを真面目に考える
Takuya Sato
 
PHPカンファレンス2015
Daisuke Kasuya
 
PHP5技術者認定初級試験を受験しました
hajikami
 
2015/09/12 第9回G-Study発表資料-XdebugでPHP ScriptのProfileしてみる
Yuta Hayakawa
 
20090801phpstudy Sanemat
Kenichi Murahashi
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
 
PHPerに覚えて欲しい日本語の重要性
Rina Fukuda
 
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
Phpのはなし
Serverworks Co.,Ltd.
 
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
 
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
 
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Kite Koga
 
第55回PHP勉強会
Hideyuki Shimooka
 
Phpcon tokyo 20120_bigginer
Hideo Kashioka
 
PHP AV BINDING
Yo Ya
 
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
 
PHPとJavaScriptの噺
Shogo Kawahara
 
PHP初心者セッション2013
Hideo Kashioka
 
Ad

More from y-uti (20)

PDF
潜在ディリクレ配分法
y-uti
 
PDF
Active Object
y-uti
 
PDF
目で見る過学習と正則化
y-uti
 
PDF
ロジスティック回帰入門
y-uti
 
PDF
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
y-uti
 
PDF
OPcache の最適化器の今
y-uti
 
PDF
スパース推定
y-uti
 
PDF
Kaggle の Titanic チュートリアルに挑戦した話
y-uti
 
PDF
分類問題 - 機械学習ライブラリ scikit-learn の活用
y-uti
 
PDF
JIT のコードを読んでみた
y-uti
 
PDF
Task Spooler を試した
y-uti
 
PDF
PHP カンファレンス福岡 参加報告
y-uti
 
PDF
最近の PHP の話
y-uti
 
PDF
PECL を数えてみた
y-uti
 
PDF
逐次ベイズ学習 - サンプリング近似法の場合 -
y-uti
 
PDF
各言語の k-means 比較
y-uti
 
PDF
PHP の GC の話
y-uti
 
PDF
Git 入門
y-uti
 
PPTX
PHP5.3 を使うのはやめよう
y-uti
 
PDF
プログラマのための文書推薦入門
y-uti
 
潜在ディリクレ配分法
y-uti
 
Active Object
y-uti
 
目で見る過学習と正則化
y-uti
 
ロジスティック回帰入門
y-uti
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
y-uti
 
OPcache の最適化器の今
y-uti
 
スパース推定
y-uti
 
Kaggle の Titanic チュートリアルに挑戦した話
y-uti
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
y-uti
 
JIT のコードを読んでみた
y-uti
 
Task Spooler を試した
y-uti
 
PHP カンファレンス福岡 参加報告
y-uti
 
最近の PHP の話
y-uti
 
PECL を数えてみた
y-uti
 
逐次ベイズ学習 - サンプリング近似法の場合 -
y-uti
 
各言語の k-means 比較
y-uti
 
PHP の GC の話
y-uti
 
Git 入門
y-uti
 
PHP5.3 を使うのはやめよう
y-uti
 
プログラマのための文書推薦入門
y-uti
 
Ad

Recently uploaded (8)

PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 

PHP-ML で手書き数字認識