2015年1月19日月曜日

Q1:Pythonで機械学習するにはどうすればいい?(機械学習ワークショップ@Tech Lab Paak 2015/1/19)

すいません。しょっぱなから、初心者には難しいと思いますが。。。

今日はTechLab Park!で開催された「機械学習ワークショップ」に参加してきました。


主催は中学高校生向けにエンジニア教育をやっているLife is Tech!さんが行っています。今回は学生向けのイベントで参加費はなんと無料!だったので、試しに参加してみようと思いました。



<機械学習とは?>


人工知能(AI)の1分野として、現在、最も注目を集める技術の1つだそうです。

Siriさん(出典:Apple)


 身近なところではAmazonでのオススメ商品やFacebookでの友達候補を推薦する機能、iOSのSiriなどの音声認識、さらには、Google Carなどの自動運転システムに使われてます。


情報を覚えるほど、人と同じように機械がより質の高い情報を提供出来るようになる為、Webサービスから、様々な情報を解析する際に用いられています。


何故機械学習が重要なのか?TEDでGoogle のラリーページが機械学習について述べています。

出典:TED


もともと、「コンピューターはまだ人間のコンテクストを理解出来ないので、理解させるようにしたい」と。

そこでまずは簡単なゲームから始めてみたところ、インベーダーゲームみたいなもので機械プレイヤーに学習させると、ゲーマーがやりこむ以上に完璧にクリアしたり、はめ技を極めちゃったそうです。



これは、色んなことに応用出来るのは、Google Carの実験例でもいえますよね。

出典:Recode
他には、画像認識にも考えられます。画像を認識して、その画像の説明を文章として自動生成することも出来るようになっているそうです。

あとは、合コンでセンサーをつけると、誰と誰がデートに行くのかを85%の精度で特定することが出来たそうですw(会話の速度、口調とか声の量など)

<どんなワークショップ?>


実際にコードを書いて機械学習のプログラムを作ります。



その際に使う言語はPythonです。(バージョンは、2.7か3.4があります。)
こういう、機械学習系のプログラムは、Pythonがよく使われます。

Pythonをダウンロードするにはこちら

ちなみにMacの方は、始めからパソコンにPythonのプログラムが入っています。
Windowsの方は、ダウンロードしないと利用出来ません。


また、今回のワークショップはまだ機械学習をよく知らない人にとっても簡単に
プログラムが作れるように予め教材が用意されています。

今回使うサイトはこちら

Rekognition API


今回はこちらのサイトのAPIを利用しながら画像認識、顔認識などの機械学習を行っていきます。


<実際何をやっているの?>


こうした画像認識や顔認識は属性認識といいます。画像を観察して、それがどんな画像なのか?誰なのか?どこなのか?何なのか?といった属性を機械に認識させることを指します。

機械学習では、データをN次元上のベクトル上で示されます。例えば、かっこよさを1軸、やさしさを2軸とすると、それぞれのパラメータが8だと(8,8)というベクトルに位置すると考えられます。


また、×と◯の区別が最もし易い(×、◯から一番距離のあるところ)で線引きをすると、うまくどんな条件を満たすと◯で満たさないと×なのかが分かってきます。

データがだんだん増えれば増える程、どんな時に識別出来るかを調べることが出来ます。


しかし、もっと精度よく機械に認識させることも取り組まれていて、人間のニューロンの仕組みを模したニューラルネットワークを用いて使われています。

hw(x)=h(w1x1+w2x2+w3x3+…) wは重み付け xは条件

xの条件をどれくらいの重み付け(w)で認識するのか?を設定すると、より精度よく認識されるようになるらしいです。

Facebook等の場合は、数十万という画像データをぶちこんで画像認識の精度を行っているようです。

<実際にやってみよう>

さて、試しにやってみましょう。

Rekognitionにまずは登録して下さい。

次に、こちらから、Basic API entry URLをコピペして見て下さい! 

画像認識
http://rekognition.com/func/api/?api_key={api_key}&api_secret={api_secret}&jobs={jobs}&urls={urls}
API_KEY、API_SECRETは登録したアカウントページから取得、画像のURLは自分が見てみたい画像のURLをコピペしましょう。
こんな感じの結果が返ってきます。


もし、改行されてないごちゃごちゃしたコードになっていたら、ブラウザでChromeを使っている方がいたら、JSON Viewを入れてみて下さい。


また、Pythonを使うとこのような形になります。


import json, urllib2

API_KEY = ''
API_SECRET = ''
jobs = 'face_recognize' #アルゴリズムの種類,faceやscene_understanding_3
pic_url = 'http://pic.prepics-cdn.com/nakai0818/27014912.jpeg' #解析したい画像のURL
url = 'http://rekognition.com/func/api/?api_key=' + API_KEY + '&api_secret=' + API_SECRET + '&jobs=' + jobs + '&urls=' + pic_url

r = urllib2.urlopen(url) #URLを開く
root = json.loads(r.read()) #結果をロードする
print(root)
print(root[u'face_detection'][0][u'name'])#類似度の結果を表示



上のコードを例えば、"test1.py"として保存して下さい。




こうしたPythonファイルを実行するには、ターミナルというものを使います。



まずは、ターミナルを開いて見て下さい。特定のファイルがある場所に移動する為には、cd ~/フォルダ名と入力します。



ここで、python ファイル名.pyと入力すると、先程保存したコードが出力されます。

出力されたデータには、設定された様々なパラメータが示されています。年齢とか、画像の特徴とか、そういったことが書いてあります。

コードを書き換えることで、それ以外の要素を認識することが出来ます。

いかがでしょうか?こうした画像解析の技術は様々な分野で応用されそうですね!次回も不定期で更新します。お楽しみに!

0 件のコメント:

コメントを投稿