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と入力すると、先程保存したコードが出力されます。

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

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

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

2015年1月4日日曜日

初めてPythonを始める人に向けて

こんにちは。これからPythonを始める人向けに初心者、初学者でも分かり易く、勉強し易いブログを書いていこうと思っています。

まずは、このブログを始めるにあたり、「Python、ブログ」でググってみたのですが、沢山あります。


Pythonのちょっとしたことを調べるには、既にあるブログを探すのも良いかもしれません。ただ、こちらでは私もほとんど分かっていないPythonについて一から勉強して学んでいきたいと思っています。

初学者は、こちらのサイトが参考になるかも。ちょっと1年前で古いですが。。

どうやって初学者がPythonを学ぶか?(CMSコミュニケーションズ社長Blog 2013/12/21)

何故Pythonを勉強するのか?

元々プログラミングを少しだけかじっていました。皆さん、最初に勉強する時、ドットインストールから始めた方も多いと思うのですが、中学校の英語の教科書のように最初の数文書いてみても、これがどんな風に実際のサイトとかアプリに使われるようになるのかよく分かりませんでした。また、もう少し発展したフレームワークという言語を使うと、より簡単にサイトが作れるようになるのですが、少しバージョンが変わったりしてエラーになると自分でどこを直したらいいか分かりませんでした。



つまり、速く走れるようになりたくて、まずは自転車を一から作るところから始めたが、うまくいかず、自動車を簡単に作れちゃうキットがあったので、それにも手を出してみたが、エンジンがかからないとそれが何でだかよく分からない、、みたいなところがあったのです。

ところで、以前言語の勉強を始める為に、何故かPythonの本も買っていたのですが、いまいちよく分からず、そのままにしていました。でも、「PythonってGoogleとかYouTubeとかでも使われているそうだし、あるゲーム会社でもPythonを使っているみたいだから、凄い面白そうじゃね??」と、興味だけはあったのです。

ところで、去年の11月頃から参加しているLPixelという会社のインターンでたまたま勉強会を開くことになりました。ここでは、植物等の画像解析を行う為のプログラムを開発したりなどしているのですが、Python言語を使っての開発なども行っています。

プログラマーが現状足りていないので、もしここで自分が開発することが出来るようになれば、手助け出来るかなと思いました。

Pythonのメリットって?



Pythonが出来ることのメリットは、「わりと書き方が簡単なこと」「統計や計算に強いこと」「最近見直されていること」でしょうか。特に前半の二つが私にとっては大きいです。

書き易くて分かり易ければ、自分でも修得し易い。また、今医療系の専門資格をとろうとしていて、ちょうど統計的な処理が出来ると有利なのでいいかなと思ったからです。(仕事柄ではMatlabとかFortranという言語が近い様ですが、Pythonとはちょっと違うか。。)

あと、私が尊敬している元GEで現在デザインファームにいらっしゃる宇野さんという方がPython使いということも、「Pythonかっこいい」と思うちょっとしたきっかけでもあります。。w

全然関係無いかもしれませんが、アフリカの方ではPythonを使っての開発がメインなのだとか。。

まあ、とりあえず面白そうだなっていうことですかね?w

そんなこんなですが、今後色々更新していこうと思います!要チェック!