まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2015/05

来たる5月19日&20日に IBM テクノロジーの祭典「IBM XCITE SPRING 2015」がグランドプリンスホテル新高輪で開催されます:
https://ibmxcite.jp/

この初日、5月19日にエンジニア向けのサブイベント dev@XCITE が併催されます。
http://ibmxcite.jp/dev/
2015050701


特にアプリケーション開発者を対象とした同イベントではアプリケーション開発基盤やホットワードになりつつある IoT(Internet of Things) をテーマとしたセッション等が予定されています。

実はその中のお昼のセッションの中で私が担当する時間が用意されています:
ライブコーディングで見せます!Bluemix アプリの作り方(11:50-12:35)

予定している内容としては IBM Bluemix を使って WordPress 環境を構築し、更にその WordPress 環境を IBM の人工知能エンジンの1つである AlchemyAPI の顔認識 API を使ってカスタマイズします。そして WordPress 内に添付された写真に人が映っているか?写っていた場合、その性別と年齢層はどのくらいか? を識別するようなカスタマイズを加えて公開する、というところまでをライブコーディングでお届けする予定です。

(完成イメージ WordPress コンテンツ内の画像内の顔を検出して性別、年齢、有名人の場合は誰かを認識させる機能をカスタマイズで追加します)
2015050700


ライブコーディング、つまりこの与えられた 45 分の中で実際にこのカスタマイズのコーディングをする、ということです。WordPress のカスタマイズなので言語としては PHP になりますが、Alchemy API は REST なので、普段は他の言語をお使いの方でもさほど混乱なく理解できる内容であると思っています。 

しかし 45 分って大丈夫か、俺!? まあヤバそうだったら最後はコピペするけど・・・

IBM Bluemix に興味ある方、AlchemyAPI の人工知能 API に興味ある方、自分でも顔認識 API を使ってみたいと思っているエンジニアの方、最近人工知能の話題をよく聞くけどどんなもんだろうと思っている方、僕のリアルなソースコードを見てみたい方、お昼の時間がヒマだなあという方、などなど、ちょっとでもこんな内容のセッションに興味があれば是非ご参加ください。




 

何度か使うことになりそうなので、自分用メモを兼ねて。

IaaS のクラウド環境で仮想マシンを作成する際に、SSH でアクセスする際の鍵を指定することが多くあります。新規に作成する手順を用意してくれるところもあれば、「自分で用意しろ」と言われることもあります。後者しか用意されていないケースは滅多にないと思いますが、新規に作るとなったらなったでその独自手順を理解する必要があったりして面倒です。この SSH の鍵の用意はある意味、クラウドを使う上での最初の壁のような気がしています。

というわけで、この SSH 用の鍵を自分で用意する時の手順を紹介します。自分は作業端末で Linux を使うことが多いので Linux での手順を紹介します。Windows の場合は一般的には PuTTy(PuTTygen) を使って作ることになると思いますが、自分があまり詳しくないのでこの辺りが参考になると思います:
http://sourceforge.jp/projects/winscp/wiki/ui_puttygen

Linux の場合はコンソールにログインし、ssh-keygen コマンドを実行します:
$ ssh-keygen -t rsa -f my_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):(パスフレーズを入力)
Enter same passphrase again:(同じパスフレーズを入力)
Your identification has been saved in my_key.
Your public key has been saved in my_key.pub.
The key fingerprint is:
   :
   :
$ 

上記例の場合、-t オプションで RSA 暗号鍵を指定し、-f オプションで出力ファイルを指定しています。この例であればカレントディレクトリに my_key と my_key.pub という2つのファイルが生成されます。前者が秘密鍵で自分で安全に保管しておく必要があります(ログイン時に使います)。後者は公開鍵で、このテキストファイルの中身を VM 作成時に指定することになります。

この方法で一度鍵ペアを作っておくと色々捗ります。


最近は少子化の影響で事情が少し違うかもしれませんが、自分が中高生だった頃の1クラスはおよそ40~45人でした。そしてクラスには「班」という制度?があり、クラスの中をいくつかのグループに分けて活動することが多くありました。自分の場合は1つの班に5~7人が割り当てられていたと記憶しています。

班は便利です。例えば掃除などのローテーションを行う単位になったり、ちょっとしたグループディスカッションを行う場合のグループになったりします。 これをあらかじめ決めておくことでグループ分けの時間が必要なくなるので先生としても便利だったと思っています。

が、1つわからなかったのが「何故1クラスは40人前後なのか?」、そして「何故1つの班は5~7人程度で構成するのか?」でした。ずっと疑問に思っていたわけではなく、まあそういうものだったんだろう、、という程度に考えていましたが、改めて考えると統一する理由はあまりないと思ってます。 ましてや1クラスの人数は(学校によって担任の負担が変わらないように、とかの理由で)わからなくもないけど、班の人数を決める必要性がどこにあるのか、別に3人でも4人でもいいと思うし、3人の班や7人の班が混在していてもいいのでは?? と考えていました。例えば仲のいい5人組とかがいて、その中にもう1人入っていくのはお互い嫌な気分とかにならないのかな・・・と。それでも班の人数を固定する理由があるのか・・・という感じでした。

ところが、これは統計を勉強するようになって気付きました。「理想を言えば1クラスは42~3人、1班は6~7人がいい」のです。適当な数字ではなかった、ということです。


この秘密の鍵は「正規分布」「標準偏差」にあります。

「正規分布」は「平均値に近いほどそのサンプル数が多くなるような連続した確率の分布」のことです。わかりやすく言えばテストの得点が横軸、その点を取った人の人数が縦軸になるようなグラフを書いた時にこんな感じになるような分布のことです(この例だと平均点は50点あたりで一番多く、そこから離れるにしたがって人数が減っていくような分布):
Standard_tscore

学力テストなどでは、例えば全国模試など充分な数の受験生がいるような試験ではその結果は正規分布になります。精度が少し荒くはなりますが、1つの学校内での模擬試験などでも正規分布として考えることが多いです。

そして「標準偏差」。受験ではよく聞く「偏差値」というキーワードを耳にすると思いますが、「標準偏差」は偏差値と大きな関わりがあります。「標準偏差」は「バラつき度合い」を示すものです。要はグラフの形は上記のようになるけど、平均点付近にかなり固まっているのか、あるいは0点から100点までそれなりにバラついているのか、という数値の指標になるものです。標準偏差そのものはエクセルを使って簡単に(STDEV関数で)求めることが出来ます。

で、日本の受験で用いられる学力偏差値では標準偏差1を偏差値10とみなし、以下のような関係が成立します:
 ・平均点を偏差値50とする
 ・平均点よりも標準偏差1つぶん多い点数を偏差値60とする
 ・平均点よりも標準偏差2つぶん多い点数を偏差値70とする
   :
 ・平均点よりも標準偏差1つぶん少ない点数を偏差値40とする
 ・平均点よりも標準偏差2つぶん少ない点数を偏差値30とする
   :

要は、各個人の得点が平均点と比べて標準偏差いくつ分離れているのか?を数値化したものが偏差値なのです。

そして成績の分布が正規分布だった場合、偏差値にはおおまかに以下の関係が成立します:
 ・偏差値60以上は全体の15.6%(6~7人に一人
 ・偏差値70以上は全体の2.275%(43~4人に一人
 ・偏差値80以上は全体の0.135%(約740人に一人)
   :
 ・偏差値40以下は全体の15.6%(6~7人に一人
 ・偏差値30以下は全体の2.275%(43~4人に一人
 ・偏差値20以下は全体の0.135%(約740人に一人)
   :

言い方を変えると、
 ・偏差値60以上は班に一人、
 ・偏差値70以上はクラスに一人、
 ・偏差値40以下は班に一人、
 ・偏差値30以下はクラスに一人、
   :
言えるようにするには、1クラスを43~4人、1班を6~7人で構成するのが理想、という表現もできることになります。

さすがに1学年で740人というマンモス校は珍しいと思いますが、2つの学校の同学年を足すとこのくらいになることはあると思います。その場合は「偏差値80以上と、偏差値20以下は2つの学校で一人ずつ」とも言えますね。


これが本当にクラス編成、班分けの理由かどうかはわかりませんし、試験結果は必ずしも正規分布にならないこともあります。でも6~7人のグループや40数名のグループが集められることがあったら、それは統計目的でグルーピングされている可能性もある、のかも。 少なくとも、上記のような統計との関係はあるので。



 

このページのトップヘ