2009年5月31日日曜日

Japanimation

僕は夢中になると疲れを感じない体質なのですが、その分遊びに集中すると仕事は多いに後回しです。
このエントリも後回しにした学会ポスター作成の後に書いています。

本日の遊びはこちら。

FLCL Fooly Cooly

手塚治虫,火の鳥


Japanimation万歳!!
片やエヴァで一世を風靡したGAINAX制作アニメ、片や巨匠手塚治虫のLifeworkと、新旧の名作を堪能(?)致しました。
FLCLは動画サイト、火の鳥は漫画を借りるとエコな遊びでしたが、決めました。どちらも買います。


どちらも古いため新古・中古がよさげ。

2009年5月29日金曜日

Native Google Chrome for Mac OSX

Windows版の軽快な動作から、Mac版にも期待しているGoogle Chromeですが、Nativeの開発版が既にあるようですね。

 DOWNLOAD UPDATED NATIVE GOOGLE CHROME FOR MAC OS X

早速ダウンロードしてインストール...

 おぉ 動いてる

やっぱり軽い・速いように思います。
他にもMac上の仮想環境(?)のひとつ、Cross Overで動くCross Over Chromiumなんてのがあるようです。

お試しあれ。

2009年5月27日水曜日

海外学会ポスター作成メモ

来月のWorkshopに向けてポスター作成を開始。
以下やったこと。

 1. MS PowerPointで作成開始
  →A0サイズがうまくpdf化されない
  →Macじゃ見れないじゃないか
  ⇒Illustrator作成に変更

 2. Illustratorで作成開始
  →フォントに悩む

 3. Illustrator CS3にTexのフォントを入れてみる
  →Texの数式をDTPソフトに
  →BoldならBoldフォント、ItalicならItalicフォントを利用する…
  →なんだかスマートじゃない
  ⇒却下

 4. 一般的なフォントを利用する
  →What are the best fonts to use for a presentation?
  →Wikipedia:Sans-serif
  →Arialは好きじゃない
  ⇒Sans-selfじゃないけどTimes New Romanでいっかー

 5. ポスター下書き.pdfを先生に送る
  →いやpptで送ってよ
  ⇒1に戻る

作成の過程でPowerPointにepsを貼付けたくなりました。
OSX CS3からは

 別名で保存
  →フォーマット:Illustrator eps
  →EPSオプション:
    バージョン:Illustrator 10 eps
    プレビュー:TIFF 8ビットカラー

でEPSを保存しておいてやれば問題なく貼付けできました。
海外ではMacユーザは少ないからPowerPointで書いた方が良いなんて記事を読んだけど、本当でしょうか?

2009年5月25日月曜日

BloggerはFireFoxが便利?

最近は専らSafariを使っておりますが、Bloggerの編集だけはFirefoxが良いようで。
いかんせんSafariだと画像のアップロードができなかったりします。

また、かの強力アドオンGreasemonkeyでLatexまで!

 クリボウのBlogger Tips
 Blogger に LaTeX 数式を挿入するユーザースクリプト
 http://www.kuribo.info/2009/05/blogger-latex-latex-for-blogger.html

試しに...

 

ベイズの定理だってこのとおり!

昨夜は実家の両親とskypeでビデオ通話をしてみたり。
オンライン環境の進歩は目を見張るものがありますね。

2009年5月24日日曜日

ガウス過程事始め

夏のゼミに向けて、ガウス過程(Gaussian Process)の勉強を開始。
資料のメモ。

 Mackay, Introduction to Gaussian Process
 http://www.inference.phy.cam.ac.uk/mackay/gpB.pdf

 正田備也, ガウス過程に関するメモ(1)
 http://www.iris.dti.ne.jp/~tmasada/2007071101.pdf

 CE Rasmussen, Gaussian Processes for Machine Learning
 (Adaptive Computation and Machine Learning)
 


普段はひたすらGoogle Scholarに頼っているのだけれど、やっぱり本はいいですね。
研究室にもあるのだけれど、自費購入を検討中。

2009年5月20日水曜日

nkf拡張シェルスクリプト

普段はMac、外や研究室ではWindows、実験ではLinuxと環境を使い分けていると、文字コードに悩まされることがある。
そんなときの強い味方、Network Kanji Filter : nkfであるが、複数のファイルを一度に変換するにはいちいち面倒くさい。
どうせならフォルダ内の対応したファイルを全て変換したいっ!

そんな煩わしさを解消するシェルスクリプトを書いてみた。
ソースは続きから。


「あるディレクトリのC++ファイル(.*\.hや.*\.cpp)を全てunicodeに変換したい!」場合の使い方は以下。

 nkf.sh -w -d -r ディレクトリ名

オプション-dでディレクトリ指定を。-rで元のファイルの削除を。-w/-sでutf-8/sjisの変換を行う。
もちろん単一ファイルも対応可能で、その際は-dオプションを外せばよい。

 nkf.sh -w -r ファイル名

.*\.h、.*\.cpp、.*\.txtファイルを対象としているが、適宜ソースを編集すればOK。
nkfのオプションも適宜編集のこと。
ソースはこんな感じ。もっと短く書けるだろうなぁ。



#!/bin/sh
#extended nkf
#Author:Takaaki
#Last update:09/05/20

is_rm=0 # whether remove original files or not defalt:false
is_dir=0 # whether $1 is a directory or not defalt:false
nkf_opt="" # format for nkf
while getopts "rdsw" opt; do

case $opt in
r ) is_rm=1 ;;
d ) is_dir=1 ;;
s ) nkf_opt="-s" ;;
w ) nkf_opt="-w" ;;
\? ) echo 'usage: nkf -format [-r] [-d] args'
exit 1
esac

done

shift $(($OPTIND - 1))

if [ $nkf_opt = ""];then
 echo 'usage: -format must be given (-w / -s)'
 exit 1
fi

if [ $is_dir = 1 ];then
 for file in $(ls $1);do
  ext=`echo $file | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
  if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
   if [ $is_rm = 1 ];then
    nkf $nkf_opt $1/$file > $1/$file~
    mv $1/$file~ $1/$file
   else
    filename=`echo $file | sed -e "s/\.$ext//g"`
    nkf $nkf_opt $1/$file > $1/$filename~.$ext
   fi
  fi
 done
else
 ext=`echo $1 | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
 if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
  if [ $is_rm = 1 ];then
   nkf $nkf_opt $1 > $1~
   mv $1~ $1
  else
   filename=`echo $1 | sed -e "s/\.$ext//g"`
   nkf $nkf_opt $1 > $filename~.$ext
  fi
 fi
fi



2009年5月18日月曜日

ドクターフィッシュ

週末を利用して母校の生徒の卒論指導のため帰省。
父と出かけた日帰り温泉で初体験。


旅ぃゆけぇばぁ・・・



ひぃあぁぁぁ 喰われとるやないか



魚による不規則な吸引は、くすぐったさを余り感じない僕をもってしてでもなかなかのもの。
気持ちいいというより、面白い体験でした。

ところで、たっぷり15分間の吸引の最中、役目を終えた後の魚達のことばかりを考えていました。
食すわけにもいかないしなぁ。

2009年5月12日火曜日

変分ベイズで混合正規分布推定(Rで実装)

以前のエントリの先駆けとして簡単な実装を。
初期値と推定結果はこんな感じになる。

初期値と

推定結果

参考文献は上田さんの学会誌

 上田修功,ベイズ学習[IV・完] : 変分ベイズ学習の応用例

基本的にこのとおりに実装すれば動く。素晴らしすぎる。
他に参考文献はこの辺り

 荒木佑季,変分ベイズ学習による混合正規分布推定

ソースは続きから。

Rでのソースはこんな感じ。
2変量正規分布での実装である。
基本的に参考文献通りに計算をしているだけ。
参考文献のnotationでΣが分散共分散行列でない点に注意。

ちなみに、plot.gaussは2次元プロット上に正規分布をplotするための関数。
パッケージにもあった気がするが使い勝手が悪く実装した。


vb<-function(x,K=10,maxItr=100,cirCol="red",...){
source("plot.gauss.r")

#initialize
N <- dim(x)[1]
d <- dim(x)[2]
phi_0 <- N / K
xi_0 <- 1.0
eta_0 <- d + 2
nu_0 <- c(mean(x[,1]),mean(x[,2]))
SS_0 <- matrix(c(var(x[,1]),0,0,var(x[,2])),2,2)
B_0 <- SS_0

x_h<-cbind(rep(0,K),rep(0,K)) #R^K*2
N_h <- rep(N/K,length=K)
phi <- rep(phi_0,length=K)
eta <- rep(eta_0,length=K)
p<-rep(1/K,length=K)
f <- eta_0 + N_h + 1 - d #R^K
mu <- list()
B <- list()
sigma <- list()
C_h <- list()
S <- list() #precision matrix
SS <- list() #variance covariance matrix
for(k in 1:K){
mu[[k]]<-c(rnorm(1,nu_0[1],2),rnorm(1,nu_0[2],2))
B[[k]]<-B_0
sigma[[k]] <- B[[k]]/(f[k] * (N_h[k] + xi_0))
C_h[[k]]<-matrix(0,2,2)
S[[k]] <- (eta_0 + N_h[k]) * solve(B[[k]])
SS[[k]] <- solve(S[[k]])
}
#print(list("N_h"=N_h,"phi"=phi,"mu"=mu,"eta"=eta,"f"=f,"B"=B,"sigma"=sigma,"S"=S,"SS"=SS))

#plot input data
#x11()
plot(x,main="Training data & initial points",...)
plot.gauss(p,mu,SS,add=T,col=cirCol,xlab="",ylab="",xaxt="n",yaxt="n",...)



#########################################################

for(t in 1:maxItr){
cat("Iteration ",t,"\n")
#VB-Estep
A0 <- digamma(phi_0 + N_h) - digamma(K*phi_0 + sum(N_h))
A1 <-0
for(j in 1:d){
A1 <- A1 + digamma((eta_0+N_h+1-j)/2)
}

gamma<-matrix(0,N,K)
for(k in 1:K){
for(n in 1:N){
gamma[n,k] <- A0[k] + 1/2 * A1[k] - 1/2 * log(det(B[[k]])) - 1/2 * sum(diag( (eta_0 + N_h[k]) * solve(B[[k]]) %*% ( f[k]/(f[k]-2) * sigma[[k]] + matrix(x[n,]-mu[[k]]) %*% t(matrix(x[n,]-mu[[k]])) ) ))
}
}
z0<-exp(gamma)
z1<-rep(0,N)
for(n in 1:N){z1[n]<-sum(z0[n,])}
z_h<-z0/z1 #R^N*K

#VB-Mstep
for(k in 1:K){
#N_h and x_h must calc at first
N_h[k] <- sum(z_h[,k]) #R^K
x_h[k,] <- c((sum(z_h[,k]*x[,1]) / N_h[k]) , (sum(z_h[,k]*x[,2]) / N_h[k])) #R^K*2

C_h[[k]]<-matrix(0,2,2)
for(n in 1:N){
C_h[[k]] <- C_h[[k]] + z_h[n,k] * matrix(x[n,] - x_h[k,]) %*% t(matrix(x[n,] - x_h[k,]))
}

mu[[k]] <- (N_h[k] * x_h[k,] + xi_0 * nu_0) / (N_h[k] + xi_0)
B[[k]] <- B_0 + C_h[[k]] + (N_h[k] * xi_0)/(N_h[k] + xi_0) * matrix(x_h[k,] - nu_0) %*% t(matrix(x_h[k,] - nu_0))
}

phi <- phi_0 + N_h
eta <- eta_0 + N_h
f <- eta + 1 - d

for(k in 1:K){
sigma[[k]] <- B[[k]]/(f[k] * (N_h[k] + xi_0))
S[[k]] <- (eta_0 + N_h[k]) * solve(B[[k]])
SS[[k]] <- solve(S[[k]])
}
#print(list("N_h"=N_h,"x_h"=x_h,"phi"=phi,"mu"=mu,"eta"=eta,"f"=f,"C_h"=C_h,"B"=B,"sigma"=sigma,"S"=S,"SS"=SS))
}

#plot estimates
pz<-K*phi_0 + sum(N_h)
for(k in 1:K){
p[k]<-(phi_0+N_h[k])/pz
}
print(list("Mixing parameter"=p))

#quartz()
#x11()
quartz()
plot(x,main="Estimated value (VB)",...)
plot.gauss(p,mu,SS,add=T,col=cirCol,xlab="",ylab="",xaxt="n",yaxt="n",...)

return(list("N_h"=N_h,"x_h"=x_h,"phi"=phi,"mu"=mu,"eta"=eta,"f"=f,"C_h"=C_h,"B"=B,"sigma"=sigma,"S"=S,"SS"=SS,"weights"=p))
}



ちなみに、このエントリを記載中にVB for GMMのパッケージを発見

 vabayelMix

マジかよ、、、
パフォーマンスチェックをした上で、分があればちゃんと公開しよう。

2009年5月10日日曜日

物件探し その1

ゼミ発表も無事終わり、弟と物件探しへ不動産屋へ。
親戚のアパートに転がり込んで早5年。
不動産屋を訪ねて物件を探すのはこれが初めてである。

引越先では弟と完全に同居の予定。
当初の条件は2DK、2部屋は完全セパレート、バス・トイレ別、都心アクセスそこそこ良好。
Webで目星をつけた物件は残念ながら既に入居済みであったので、店舗にていくつかピックアップの後にいざ内見へ。


最初の物件は一軒家、11万5千円の破格物件。
逐年数は古く間取りも独特。風呂追い炊きの操作装置はあるが肝心の本体がない等どこかチグハグ。
しかし都心に近い一軒家物件などそうない。住めば都にしてしまえばいい。
そう心で自身に言い聞かせていた矢先、担当者が怪訝な顔で

「すみません。僕も知らなかったのですが、窓の向こうはとんでもないビューが・・・。」
「!((初回から隣が墓地物件))」

引きの強さ(?)をひしひしと感じる。
これからの季節にはもってこいだ。いつだって涼しく快眠だろう。
もしかしたら永久に目を覚まさないやもしれん。
遊びにも事欠かないだろう。卒塔婆でチャンバラする機会なんて地元でもなかった。
極めつけはその物件担当者の言葉。

「いやぁ、でもまずい話は聞かないですけどねぇ。」

聞いてたら困る。


気を取り直して2件目、3件目へ。
いずれも申し分ない物件であったが、「完全セパレート」の実現が難しい。
引越は夏までにするとして、気長に探す事にしよう。

2009年5月7日木曜日

連休明け

6月末にイタリアで開かれるNonparametric Bayes Workshopの手続きのため、1時間睡眠で家を出てつい先程帰宅。

昼過ぎでも慌ただしい銀行員を眺めつつ今日から仕事始まりであることに気づく。
この辺りは学生の特権か。

仮眠をとって明日のゼミ準備。




2009年5月6日水曜日

変分ベイズでディリクレ過程混合モデル(現状)

Bleiの論文が2004年、持橋さんが2006年だからもう最先端ではないのかな?
理由あって後2日以内にフォローしなければなりません。

現状:
実装済み・テスト未済
VBフォロー済み・DPVBフォロー未済


読んでいる論文:
Variational Inference for Dirichlet Process Mixtures

無限混合ディリクレ文書モデル


全て終わったら色々UPします。