Strawberry Perl

ウインドウズ環境で Perl を利用するときにお薦めなのが Strawberry Perl
ActivePerl、Cygwin Perl はウインドウズでの色々な罠が多いので UNIXPerl との互換性に問題があるが、この Strawberry Perlgcc 環境で構築されているので互換性の問題がほとんどない。

Strawberry Perl のインストール方法

ホームページからインストーラーファイルをダウンロード。
インストーラーファイルを開いた後は、基本的に全てOKで問題なくインストールは終了。

Strawberry Perl でのモジュールインストール方法

2〜3 年前まではデフォルトでインストールされているモジュールは少なかったが、最近は必要なモジュールは最初からインストールされている。

しかし、現時点(strawberry-perl-5-10.1.1)では PAR::Packer がインストールされていない。

PAR::Packer のインストール方法

Perlスクリプトファイルをウインドウズ環境で実行可能な exe ファイルに変換してくれるのが PAR::Packer。

さくっと作った Perl プログラムを他人に配布するときに大変便利。

(但し、ファイルサイズが大きくなるのがネックであるが…)

  1. 必要なファイル一式を http://search.cpan.org/dist/PAR/ からダウンロード。
  2. ファイルを解凍して適当な場所に置く
  3. 以下の 4 つのコマンドを実行
    1. % perl Makefike.PL
    2. % dmake
    3. % dmake test
    4. % dmake install

注意しないといけないのが、"dmake" を使用すること。

READMEでは ウインドウズ環境では "make" の代わりに "nmake" を使用せよとあるが、"nmake" ではコンパイルが通らない。

"dmake" ではコンパイルが通るようになるが、原因は不明。

最尤推定と EM アルゴリズム

最尤推定と EM アルゴリズムのまとめ。

基本的には、最尤推定の発展バージョンが EM アルゴリズム

言い換えれば、EM アルゴリズム最尤推定が基本にあるために、EM アルゴリズムを理解するためには最尤推定を理解することが必須。

最尤推定

最尤という言葉のせいで難しいイメージがあるが、極めて簡単。

表が 0.3 の確率で出るコイン A と表が 0.8 の確率で出るコイン B があるとする。

今、A か B か分からないがどちらかのコインを 3 回続けて投げたら、表、裏、表という順番で出た。

さあ、どっちのコインを投げたでしょう?

このときに最尤推定を使えば簡単に分かる。(というか、最尤推定使わなくても感覚で分かるけど…)


コイン A を使ったときの確率(=尤度)は、

   0.3 × (1−0.3) × 0.3 = 0.063

コイン B を使ったときの確率(=尤度)

   0.8 × (1−0.8) × 0.8 = 0.128


コイン B を使ったときのほうが確率(=尤度)が高いので正解はコイン B。


これだけ。

EM アルゴリズム

さっきは 3 回とも同じコインで投げたという前提条件があった。

しかし、毎回コイン A、コイン B のどちらも使う可能性がある場合はどうなるだろうか?

A もしくは B が使われる確率を知りたい。

その時に使うのが EM アルゴリズム


今、コイン A が使われる確率(パラメータ)をθと置く。

θというのはそのモデル(ここではコイン)が使用される確率を指す。

EM アルゴリズムではパラメータの初期値を設定しなければならず、この初期値の決め方が重要である。

普通最適な初期値の決め方は誰にも分からないので、適当(ランダム)に設定する。

ここでは仮に θ=0.6 と設定する。


そうすると、表、裏、表という順番で出たときに、コイン A が使われた回数の期待値は、

   \frac{0.6 * 0.3}{0.6 * 0.3 + (1-0.6) * 0.8} + \frac{0.6*(1-0.3)}{0.6 * (1-0.3) + (1-0.6) * (1-0.8)} + \frac{0.6 * 0.3}{0.6 * 0.3 + (1-0.6) * 0.8}

つまり、1.56 になる。

これを観測データの個数 3 で割ると 0.52 となる。

これを θ'=0.52 として、再びコイン A が使われた回数の期待値を計算する。

以下同様に計算してくと θ''、θ''' が次々と求まり、真の値に近づいていく。

真の値に近づく(収束する)のは数式で証明されている。


これだけ。


(注釈)
初期値の決め方が重要であると書いたが、初期値の決め方が悪ければ局所解しか求まらない場合がある。

そのときは幾つかの初期値を取って計算する。

EM アルゴリズムの初期値の決定方法が 1 つの論文になるほど、実は奥が深い世界である。

EM アルゴリズムの応用

この EM アルゴリズムを応用したのが隠れマルコフモデル(HMM)である。

で、HMM は形態素解析音声認識バイオインフォマティクス等の様々な分野に応用されている。

論文 個人適応型クエリ推薦

題名

HITSに基づくWikipedia ランキングアルゴリズムとユーザ履歴を用いた個人適応型クエリ推薦
http://www.ieice.org/~de/DEWS/DEWS2008/proceedings/files/b2/b2-4.pdf

著者

NTT のサイバーソリューション研究所

手法の概略

キーワード重要度を算出して、キーワード重要度が高いものをユーザに推薦する。

キーワードは Wikipedia の見出し語をそのまま流用。

キーワード重要度には、ユーザに依らない普遍的な固有重要度とユーザ毎に変化するユーザ毎重要度からなる。

   キーワード重要度 = 固有重要度 + ユーザ毎重要度

固有重要度

Wikipedia のリンク構造を利用した HIT 数をもとに算出。
基本的には、 authority の計算には Wikipedia のテキスト量、hub の計算にはリンク数と被リンク数を用いている。
但し、Wikipedia 特有の問題からそれぞれ補正をかけている。

ユーザ毎重要度

ユーザが見たページから抽出されたキーワードは高く設定。
その際に、閲覧時間と局所性を考慮。
それだけ。

結果と考察

それなりに良いキーワードを推薦できた。
Wikipedia の見出し語をキーワードとして用いるので、ユーザの興味を幅広く網羅できている。
しかし、ユーザの嗜好は思ったよりも複雑で、興味の粒度も細かい。

Pocket Wifi & OS 再起動

今まで自宅では NTT 東日本のフレッツ光を使っていたんだけど、イーモバイルPocket Wifi を購入&契約したのでフレッツ光は 11 月で解約することにした。
で、11 月の下旬はフレッツ光Pocket Wifi の両方の環境が使えてて、Pocket Wifi も問題なく動作していてよしよしと思ってた。


ところが、いざ 12月 になってみると Pocket Wifi が使えなくなった…。
正確に言うと接続はできているんだけど、通信ができなくなった。
IP アドレスは問題なく取得できているんだけど、HTTP リクエストのところでエラーが発生する状況。
半月ほど原因を探してみたが、Pocket Wifi の問題か OS の問題かそれとも他のソフトが問題なのか結局分からなかった…。
セキュリティソフトが怪しかったけど、アンインストールしても問題は解決せず。


ということで、仕方なく OS を再起動。
その結果、何事もなくネットにつなげるようになった。
でも、問題の原因は最後まで分からず…。
さらに、OS の再起動して諸々の Windows Update や必要なソフトインストールするのに丸2日ほどかかった。。


そろそろ、Windows から Mac に切り替えようかな。

ブログ検索

最近というか前から Google サービスには色々な機能があって、その中にブログ検索ってのがあるんだけど、これがいまいち使えない。


そもそも、ブログ検索なのにニュース記事が出てきたり、ニュース記事のコピペそのままが出てきたり、2ちゃんのまとめサイトが出てきたり…。
いけてない。


それに比べると、まだ Yahoo! のブログ検索の方が使える。
OS 作るのはいいんだけど、ブログ検索を使えるようにして欲しい。