遅れ馳せながら、明けましておめでとうございます :)
三ヶ日も終わり、正月気分なのは僕だけでしょうか?
昨年を振り返ると、研究会、Workshopや勉強会に複数参加をする等、アクティブに動けた1年だったと思います。
今年最初の仕事は、そういった研究成果をしっかりとまとめ、業績とすること!
残り少ない学生生活…締切に追われる毎日ですが、大いに楽しみたいと思います!
追伸
卒業後は研究からは離れますが、興味のある論文やその実装、技術に関してメモをするこのblogは、続けたいなと思っています
2010年1月4日月曜日
2009年11月28日土曜日
Probabilistic Latent Semantic Analysis : PLSA (Rで実装)
前回のエントリからはや一ヶ月。月日が立つのは早いものです。
修論に向け、bag-of-featuresの実装をもくろんでおりますが、その一環としてPLSAを試してみました。
参考文献はこちら(リンク先pdf)。
T. Hofmann. Probabilistic latent semantic analysis. In Proceedings of the 15th Conference on Uncertainty in AI, 1999.
ちょうど10年前に提案されたモデルですが、LDAの元となったり、現在でも多くの論文が発表されたりと、良い言語モデルのようです。
これをRで素直に実装したのがこちら。
素直に参考文献の式(3)~(6)を実装したものになります。推定アルゴリズムはTemperature EMアルゴリズムで、温度スケジューリングは簡単のため
用いたデータは以下のような12×9の行列データです。
目視で確認できるように、左側・中央・右側に出現頻度が偏った、いわば3クラスが含まれるデータになります。
これを、以下のようにしてplsiを実行します。
各クラスからの文章の出現確率、すなわちp(d|z)は、以下によって取得できます(見やすさのため小数点以下二桁で丸めています)。
同様にして、各クラスからの単語の出現確率p(w|z)は、以下によって取得できます。
初期値やK/epsの値によってかなり推定精度にバラつきがありますが、シンプルな理論/実装で動くモデルなので良いですね。例によって、間違い、またより良い実装方法がございましたらご指摘ください。
修論に向け、bag-of-featuresの実装をもくろんでおりますが、その一環としてPLSAを試してみました。
参考文献はこちら(リンク先pdf)。
T. Hofmann. Probabilistic latent semantic analysis. In Proceedings of the 15th Conference on Uncertainty in AI, 1999.
ちょうど10年前に提案されたモデルですが、LDAの元となったり、現在でも多くの論文が発表されたりと、良い言語モデルのようです。
これをRで素直に実装したのがこちら。
plsi <- function(x, K=10, eps=0.9, max_itr=200,...){
#logsumexp
logsumexp<-function(x,y,flg){
if(flg){
return(y)
}
if(x == y){
return(x + 0.69314718055)
}
vmin = min(x,y)
vmax = max(x,y)
if(vmax > (vmin + 50.0)){
return(vmax)
}else{
return(vmax + log(exp(vmin - vmax) + 1.0))
}
}
#random variable from Dirichlet distribution
rdirichlet<-function(alpha,prec=0,...){
if(prec != 0){
x<-rgamma(length(alpha),alpha*prec,1.0)
}else{
x<-rgamma(length(alpha),alpha,1.0)
}
return (x/sum(x))
}
#initialize
D <- dim(x)[1]
W <- dim(x)[2]
T <- 1 #temperature
pllik <- 0
#parameters
pz_dw <- list()
for(k in 1:K){
pz_dw[[k]] <- matrix(0, D, W)
}
pz <- rep(1/K, length=K)
pd_z <- matrix(0, K, D)
pw_z <- matrix(0, K, W)
unigram <- 1/W * apply(x,2,sum)
for(k in 1:K){
pd_z[k,] <- rdirichlet(rep(1/D, length=D))
pw_z[k,] <- rdirichlet(unigram)
}
##############################
for(t in 1:max_itr){
cat("Iteration : ",t," Temperature : ",T," ")
#E-step
#initialize expected count
cz <- rep(0, length=K)
cd_z <- matrix(0, K, D)
cw_z <- matrix(0, K, W)
for(d in 1:D){
for(w in 1:W){
z <- 0
for(k in 1:K){
pz_dw[[k]][d,w] <- T * ( log(pz[k]) + log(pd_z[k,d]) + log(pw_z[k,w]) )
z <- logsumexp(z, pz_dw[[k]][d,w], (k==1))
}
for(k in 1:K){
pz_dw[[k]][d,w] <- exp(pz_dw[[k]][d,w] - z)
if(x[d,w] != 0){
cz[k] <- cz[k] + x[d,w] * pz_dw[[k]][d,w]
cd_z[k,d] <- cd_z[k,d] + x[d,w] * pz_dw[[k]][d,w]
cw_z[k,w] <- cw_z[k,w] + x[d,w] * pz_dw[[k]][d,w]
}
}
}
}
#M-step
pz <- cz / sum(cz)
for(k in 1:K){
pd_z[k, ] <- cd_z[k, ] / sum(cd_z[k, ])
pw_z[k, ] <- cw_z[k, ] / sum(cw_z[k, ])
}
#converged?
llik <- 0
for(d in 1:D){
for(w in 1:W){
if(x[d,w] != 0){
l <- 0
pdw <- 0
for(k in 1:K){
l <- log(pz[k]) + log(pd_z[k,d]) + log(pw_z[k,w])
pdw <- logsumexp(pdw, l, (k==1))
}
llik <- llik + x[d,w] * pdw
}
}
}
cat(" log-likelihood : ",llik, " PPL : ",- 1/W * llik,"\n")
if(t > 1){
if( abs((llik - pllik) / llik) < 1e-5 || pllik > llik){
cat("Converged.\n")
break
}
}
pllik <- llik
T <- eps * T
}
return(list("pz_dw"=pz_dw, "pz"=pz, "pd_z"=pd_z, "pw_z"=pw_z))
}
素直に参考文献の式(3)~(6)を実装したものになります。推定アルゴリズムはTemperature EMアルゴリズムで、温度スケジューリングは簡単のため
- 温度T=1.0からスタート
- EMアルゴリズムの各反復において, T = eps × T (eps < 1.0)で更新
用いたデータは以下のような12×9の行列データです。
1 2 2 0 0 0 0 0 0 2 1 3 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 1 3 1 0 0 0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 2 3 3 0 0 0 0 0 0 3 2 2 0 0 0 0 0 0 2 1 3 0 0 0 0 0 0 1 1 4これがテキストデータであるとすると、データ数が12、単語数が9、行列要素はデータ内で観測された頻度に相当します。
目視で確認できるように、左側・中央・右側に出現頻度が偏った、いわば3クラスが含まれるデータになります。
これを、以下のようにしてplsiを実行します。
> opt <- plsi(x, K=3, eps=0.95)オプションKはクラス数、epsはTEMの温度に関するパラメータです。これにより、以下のような出力がされます。
Iteration : 1 Temperature : 1 log-likelihood : -277.8714 Iteration : 2 Temperature : 0.9 log-likelihood : -275.7771 Iteration : 3 Temperature : 0.81 log-likelihood : -274.7316 Iteration : 4 Temperature : 0.729 log-likelihood : -272.8197 Iteration : 5 Temperature : 0.6561 log-likelihood : -268.9356 Iteration : 6 Temperature : 0.59049 log-likelihood : -265.5543 Iteration : 7 Temperature : 0.531441 log-likelihood : -264.1783 Iteration : 8 Temperature : 0.4782969 log-likelihood : -264.3499 Converged.最後の反復で若干対数尤度が悪化しているのは玉に傷です。
各クラスからの文章の出現確率、すなわちp(d|z)は、以下によって取得できます(見やすさのため小数点以下二桁で丸めています)。
> round(opt$pd_z,2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.3 0.26 0.22 0.22
[2,] 0.28 0.33 0.22 0.17 0.00 0.00 0.00 0.00 0.0 0.00 0.00 0.00
[3,] 0.00 0.01 0.00 0.00 0.22 0.22 0.27 0.27 0.0 0.00 0.00 0.00
行がクラス、列がデータを表しています。概ね正しく3つのクラスに分類できていることが伺えます。同様にして、各クラスからの単語の出現確率p(w|z)は、以下によって取得できます。
> round(opt$pw_z,2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0.00 0.00 0.00 0.00 0.00 0.00 0.3 0.26 0.44
[2,] 0.33 0.22 0.44 0.00 0.00 0.00 0.0 0.00 0.00
[3,] 0.01 0.00 0.01 0.27 0.38 0.33 0.0 0.00 0.00
行がクラス、列が単語を表しています。こちらも概ね正しく各クラスからの単語の出現確率を推定できていることが伺えます。初期値やK/epsの値によってかなり推定精度にバラつきがありますが、シンプルな理論/実装で動くモデルなので良いですね。例によって、間違い、またより良い実装方法がございましたらご指摘ください。
2009年10月29日木曜日
Tweetup with @syou6162
本日、素敵なTweetupを@syou6162さんとご一緒しました。
Web上でも、現実でも、精力的に活動されている姿は尊敬するばかりです。
ところで、日本国籍でない友人に日本人の悪い点を聞くと、すぐにtoo shyと返ってきました。
国民性や個人の性格的なものは無理に変える必要はないと考えていますが、それでもコミュニティに対して何らかのコミットをするのは、コミュニティにとっても、自身にとっても有益なものとなる場合が多いように思います。
しかしながら、そういった行動をおこすには、またそういった方々とお近づきになるには、それなりの労力が必要です。
Twitterに限らず、SNSやWebは、それらの敷居を下げる良い道具ではないかと思います。
抽象的ではありましたが、非常にポジティブな気持ちを想起させる、そんなTweetupでした。
より詳細な会話の内容が知りたい方、また、R, C++, Emacs etc...の良質なtipsをご覧になりたい方は、こちらのサイトをどうぞ。
Seeking for my unique color.
Seeking for my unique color.:@TakaakiTalkさんとお食事
Thanks a lot @syou6162!
Web上でも、現実でも、精力的に活動されている姿は尊敬するばかりです。
ところで、日本国籍でない友人に日本人の悪い点を聞くと、すぐにtoo shyと返ってきました。
国民性や個人の性格的なものは無理に変える必要はないと考えていますが、それでもコミュニティに対して何らかのコミットをするのは、コミュニティにとっても、自身にとっても有益なものとなる場合が多いように思います。
しかしながら、そういった行動をおこすには、またそういった方々とお近づきになるには、それなりの労力が必要です。
Twitterに限らず、SNSやWebは、それらの敷居を下げる良い道具ではないかと思います。
抽象的ではありましたが、非常にポジティブな気持ちを想起させる、そんなTweetupでした。
より詳細な会話の内容が知りたい方、また、R, C++, Emacs etc...の良質なtipsをご覧になりたい方は、こちらのサイトをどうぞ。
Seeking for my unique color.
Seeking for my unique color.:@TakaakiTalkさんとお食事
Thanks a lot @syou6162!
2009年10月27日火曜日
RとImageMagickで混合分布推定アニメーション
EMアルゴリズムや変分ベイズ、MCMCでは最適化やサンプリングを繰り返すことで確率分布を求めます。
その過程を可視化する際のtipsをまとめてみます。
Rの他に必要なのはこちら。
MacPortでしたら
でインストール可能です。
動画作成までの道のりは以下のとおりです。
1. Rプログラムの反復演算の都度画像を生成する
2. ImageMagickで連結・mpeg変換を行う
いやぁ、簡単。このままではtipsにならないので、サンプルとその生成方法を記載してみます。
まずRにおいて、以下のような画像生成項目を記載します。
尚、tは反復回数t回目を表します。これによりimgフォルダにt=1から(任意の)収束回数までの連番pngファイルが生成されます。
続いて、imgフォルダ内に以下のようなシェルスクリプトを保存します。
名前をconv.shとしましょう。また、t=100で収束したとします。その際、実行権限を与えた後、以下のように実行します。
これにより、opt.mpgができあがります。表示間隔はdelayの引数を変えることで調整できます。
混合ガウス分布の推定を行った結果がこちら。
ImageMagick自体は検索すれば多くのtipsが出てきますが、Rのtipsとして参考にしたのはこちら。
RjpWiki:グラフィックス参考実例集:自作グラフィックス投稿欄:GIFアニメーション
一枚一枚画像を生成するので非常に時間がかかります(MCMCでやることは考えたくないです)が、視覚的に確認できると楽しいですね。是非お試しあれ。
その過程を可視化する際のtipsをまとめてみます。
Rの他に必要なのはこちら。
MacPortでしたら
sudo port install ImageMagick +lcms +jpeg2 sudo port install ffmpeg
でインストール可能です。
動画作成までの道のりは以下のとおりです。
1. Rプログラムの反復演算の都度画像を生成する
2. ImageMagickで連結・mpeg変換を行う
いやぁ、簡単。このままではtipsにならないので、サンプルとその生成方法を記載してみます。
まずRにおいて、以下のような画像生成項目を記載します。
name = paste(t, ".png" , sep="")
png(file = paste("img/", name, sep=""), sep="")
#プロットしたい図のplot
dev.off()
尚、tは反復回数t回目を表します。これによりimgフォルダにt=1から(任意の)収束回数までの連番pngファイルが生成されます。
続いて、imgフォルダ内に以下のようなシェルスクリプトを保存します。
#!/bin/bash
num=${1:?"Usage: $./conv.sh npics"}
for((i=1;i<$(($1+1));++i))
do
name+=$i.png" "
done
#echo $name
`convert -delay 15 -quality 100% -antialias -compress None $name opt.mpg`
名前をconv.shとしましょう。また、t=100で収束したとします。その際、実行権限を与えた後、以下のように実行します。
chmod u+x conv.sh ./conv.sh 100
これにより、opt.mpgができあがります。表示間隔はdelayの引数を変えることで調整できます。
混合ガウス分布の推定を行った結果がこちら。
ImageMagick自体は検索すれば多くのtipsが出てきますが、Rのtipsとして参考にしたのはこちら。
RjpWiki:グラフィックス参考実例集:自作グラフィックス投稿欄:GIFアニメーション
一枚一枚画像を生成するので非常に時間がかかります(MCMCでやることは考えたくないです)が、視覚的に確認できると楽しいですね。是非お試しあれ。
2009年10月15日木曜日
統計のための線形代数 in C++ (Boost uBLASの参考サイトとtipsまとめ)
2009年9月24日木曜日
Snow Leopard導入記録その2 その後
つい先日、高校の部活仲間2人が婚約したとメールをくれました。
本当におめでとう。
前回のエントリ然り、ここへきて僕の周りでは色々変化があるようです。
さて、GoogleAnalyticsでこのblogの動向を見ていると、Snow LeopardにおけるTex環境整備について書いたエントリの注目度が高いです。
おおまかに書いたため対応しきれていない可能性が高いですが、お気づきの点等あればコメントいただければ幸いです。
では、iMac(Mid 07)にインストールしたSnow Leopardのその後を少し。
・MacPortで入れたlftpが動かない
→upgradeを試みるとncurseswとncursesに"+darwin_10"が
matchしないよと警告される
→ncurseswとncursesを再インストール
⇒lftpを再インストールでfix
・e-mobileが動かないらしい
参考:理系学生日記:E-mobile のモデムが Snow Leopard で
使用できなくなったあなたへ
⇒32bitモードで起動とのこと
・Cyberduckが起動しない
⇒対応バージョンを再インストール
・Preview.appでTexが壊れる
参考:Snow LeopardのプレビューだとLaTeXで書いた数式が
こんな風に見えます。
⇒とりあえずAdobe Acrobat Readerで開く
・TimeMachineがLeopard時に比べ非常に早い!
・劇的ではないが以前より動作が軽い
僕の以前の環境にも依存するのでなんとも言えませんが、メインで研究等に使用しているMacへのインストールは未だ不安かもしれません。
個人的にはiPhone OS 3.1へのアップグレードの方が恩恵を大きく感じました。
これは速度改善に依るものが大きかったため、ラップトップでこそSnow Leopardが生きてくるのかもしれません。
環境整備に時間がかかるやもしれませんが、自身で問題なく対応できる、もしくは十分に時間のとれる方は検討してみては。
本当におめでとう。
前回のエントリ然り、ここへきて僕の周りでは色々変化があるようです。
さて、GoogleAnalyticsでこのblogの動向を見ていると、Snow LeopardにおけるTex環境整備について書いたエントリの注目度が高いです。
おおまかに書いたため対応しきれていない可能性が高いですが、お気づきの点等あればコメントいただければ幸いです。
では、iMac(Mid 07)にインストールしたSnow Leopardのその後を少し。
・MacPortで入れたlftpが動かない
→upgradeを試みるとncurseswとncursesに"+darwin_10"が
matchしないよと警告される
→ncurseswとncursesを再インストール
⇒lftpを再インストールでfix
・e-mobileが動かないらしい
参考:理系学生日記:E-mobile のモデムが Snow Leopard で
使用できなくなったあなたへ
⇒32bitモードで起動とのこと
・Cyberduckが起動しない
⇒対応バージョンを再インストール
・Preview.appでTexが壊れる
参考:Snow LeopardのプレビューだとLaTeXで書いた数式が
こんな風に見えます。
⇒とりあえずAdobe Acrobat Readerで開く
・TimeMachineがLeopard時に比べ非常に早い!
・劇的ではないが以前より動作が軽い
僕の以前の環境にも依存するのでなんとも言えませんが、メインで研究等に使用しているMacへのインストールは未だ不安かもしれません。
個人的にはiPhone OS 3.1へのアップグレードの方が恩恵を大きく感じました。
これは速度改善に依るものが大きかったため、ラップトップでこそSnow Leopardが生きてくるのかもしれません。
環境整備に時間がかかるやもしれませんが、自身で問題なく対応できる、もしくは十分に時間のとれる方は検討してみては。
2009年9月8日火曜日
帰省をしておりました
2009年8月30日日曜日
Snow Leopard導入記録その1 MacPort関連簡易メモ
Pre-orderの甲斐あって、きっかり発売日(8月28日)に到着致しました。
MacOS 10.6 Snow Leopardです。
早速メインのiMacに
・バックアップはTimeCapsule任せ
・上書き(通常)インストール
を慣行。時間がなかったので強行軍でした。
で、Apple純正ソフト以外で通常どおり動いたもの(○)、動きそうなもの(△)、動かなかったもの(×)はこんな感じ
・Chrome 4.*** ◎
・Firefox 3.*** ◎
・R 2.8-2.9.2 ◎
・Adobe CS3 Illustrator Photoshop ○
・TexShop *** ×(pTexに問題あり)
・LatexI 1.16*** ×(pTexに問題あり)
・MacPort *** ×
・Parallels Desktop for Mac 3.*** ×
MacPort、Parallelsはともかく、Tex関連はそのまま動いてて欲しかった...
Tex関連のMacPortによるSnow Leopard環境構築(簡易表記版)は以下
1. MacPortの再インストール
こちらを参考に
2. Tex環境の再構築(E:error, S:solution)
E1 とりあえずsudo port upgrade outdated
→fontconfigのアップデートでXMLがおかしいよと怒られる
S1 XML関連ライブラリ(libxml?)のアップデート
→sudo port upgrade fontconfigでfix
E2 再度sudo port upgrade outdated
→libpngのアップデートでzlibが見つからないよ!と怒られる
S2 こちらを参考にzlibを+universalで再インストール
さらにsudo port edit libpngでconfigureの引数に--libdir=
MacOS 10.6 Snow Leopardです。
早速メインのiMacに
・バックアップはTimeCapsule任せ
・上書き(通常)インストール
を慣行。時間がなかったので強行軍でした。
で、Apple純正ソフト以外で通常どおり動いたもの(○)、動きそうなもの(△)、動かなかったもの(×)はこんな感じ
・Chrome 4.*** ◎
・Firefox 3.*** ◎
・R 2.8-2.9.2 ◎
・Adobe CS3 Illustrator Photoshop ○
・TexShop *** ×(pTexに問題あり)
・LatexI 1.16*** ×(pTexに問題あり)
・MacPort *** ×
・Parallels Desktop for Mac 3.*** ×
MacPort、Parallelsはともかく、Tex関連はそのまま動いてて欲しかった...
Tex関連のMacPortによるSnow Leopard環境構築(簡易表記版)は以下
1. MacPortの再インストール
こちらを参考に
2. Tex環境の再構築(E:error, S:solution)
E1 とりあえずsudo port upgrade outdated
→fontconfigのアップデートでXMLがおかしいよと怒られる
S1 XML関連ライブラリ(libxml?)のアップデート
→sudo port upgrade fontconfigでfix
E2 再度sudo port upgrade outdated
→libpngのアップデートでzlibが見つからないよ!と怒られる
S2 こちらを参考にzlibを+universalで再インストール
さらにsudo port edit libpngでconfigureの引数に--libdir=
/opt/local/libを加える(不要?)
⇒sudo port upgrade libpngでfix
E3 再度sudo port upgrade outdated
→pTexのアップデートでkpathsea.aがないよと怒られる
S3 sudo port edit pTexでconfigureの引数に--libdir=
E3 再度sudo port upgrade outdated
→pTexのアップデートでkpathsea.aがないよと怒られる
S3 sudo port edit pTexでconfigureの引数に--libdir=
/opt/local/libを加える
⇒sudo port upgrade pTexでfix
3. こちらからTexShopをダウンロード・アップデート
でうまくいきまいした。要点をまとめると
⇒sudo port upgrade pTexでfix
3. こちらからTexShopをダウンロード・アップデート
でうまくいきまいした。要点をまとめると
- インストールしてあるライブラリがおかしいと怒られたら
- とりあえず怒られたライブラリ側をアップデート/再インストール
- それでもダメなら
- +universalをつけて怒られたライブラリをアップデート/再インストール
- インストールしてあるライブラリがないよと言われたら
- sudo port edit パッケージ名 でライブラリの場所を追加して(configure.argsに書いて)やる
の3点です。パッケージソフトの利点は何処へ...
詳細なエラー内容、アップデート前後のバージョン、対応等、実機から離れてしまっているため不備が多いです。参考程度として下さい。
何かあればtwitterでお気軽に。
詳細なエラー内容、アップデート前後のバージョン、対応等、実機から離れてしまっているため不備が多いです。参考程度として下さい。
何かあればtwitterでお気軽に。
2009年8月26日水曜日
真の夏休み突入
すっかりご無沙汰になりました。
特に山梨に潜伏しているわけではございません。
7月〜8月は通常時より大学(研究室)に顔を出しておりました。
細かい調整はさておき、協力させていただいていた論文がやっと一段落です。
結局以前のエントリのとおりに事が進んでいるということですね。
良かった良かった。
今後は
・9月〜10月にTechnical Reportを報告
・12月迄に後輩と学会
・3月までに論文投稿
なんてできたらいいなと思っています。
積み重ねているものがあるわけではないので、このうち1〜2つ実践できれば万々歳でしょう。
さて、Blogを書かないうちに色々面白げなガジェットの噂/詳細が出ていました。
最初の動画はfakeですが、よくできているなぁ。
iPhoneを持ち始めてから感じたのですが、良いUIを持つデバイスは生活を変えますね。
twitterとyoutubeはiPhoneから利用する方が便利かもしれません。
そういった意味ではNokiaのNetbookは特にUIにこだわっているわけではありませんが、世界で実績のあるメーカがNetbookに進出ということで、期待を込めて。12hバッテリっていいな!Ovi servicesってどうなの?
今週末からは息抜きとして、興味のあることだけをする1週間にします。
特に山梨に潜伏しているわけではございません。
7月〜8月は通常時より大学(研究室)に顔を出しておりました。
細かい調整はさておき、協力させていただいていた論文がやっと一段落です。
結局以前のエントリのとおりに事が進んでいるということですね。
良かった良かった。
今後は
・9月〜10月にTechnical Reportを報告
・12月迄に後輩と学会
・3月までに論文投稿
なんてできたらいいなと思っています。
積み重ねているものがあるわけではないので、このうち1〜2つ実践できれば万々歳でしょう。
さて、Blogを書かないうちに色々面白げなガジェットの噂/詳細が出ていました。
Leaked Mac Tablet?
Sony Ericsson Rachael UI
Nokia Booklet 3G first video
最初の動画はfakeですが、よくできているなぁ。
iPhoneを持ち始めてから感じたのですが、良いUIを持つデバイスは生活を変えますね。
twitterとyoutubeはiPhoneから利用する方が便利かもしれません。
そういった意味ではNokiaのNetbookは特にUIにこだわっているわけではありませんが、世界で実績のあるメーカがNetbookに進出ということで、期待を込めて。12hバッテリっていいな!Ovi servicesってどうなの?
今週末からは息抜きとして、興味のあることだけをする1週間にします。
2009年7月24日金曜日
ベータ分布の最尤推定(Rで実装)
研究の息抜きに実装してみました。
参考文献は有名なこちらです。
Estimating a Dirichlet distribution (T.Minka, 2003)
二項分布の共役事前分布であるベータ分布
から、n個の確率
が生成されたとします。
この確率ベクトルからベータ分布のパラメータaとbを最尤推定にて求める関数が以下です。
newton_beta<-function(x,shape1=1.0,shape2=1.0,eps=0.0001){
euqlid<-function(y){
return(sqrt(sum(y*y)))
}
N <- length(x)
alpha <- c(shape1,shape2)
pn <- 0
while(TRUE){
palpha <- alpha
#gradient
g <- c(N * digamma(sum(alpha)) - N * digamma(alpha[1]) + sum(log(x)) , N * digamma(sum(alpha)) - N * digamma(alpha[2]) + sum(log(1 - x)))
#Parameters for Hessian
q <- c(- N * trigamma(alpha[1]) , - N * trigamma(alpha[2]))
z <- N * trigamma(sum(alpha))
#Update
b <- sum(g/q) / ( 1/z + sum(1/q))
alpha <- palpha - (g - b)/q
n <- euqlid(alpha)
print(alpha)
print(n)
if( abs(pn - n)/pn < eps ){
break
}
pn <- n
}
return(list("shape1"=alpha[1],"shpae2"=alpha[2]))
}
厳密には閉じた形では解けないので、ニュートン法を用いて求めます。
ベータ分布(ディリクレ分布)で効率的に計算を行うための工夫をしているところがポイントのようです。
百聞は一見にしかずということで、ためしにやってみましょう。
まず、適当なベータ分布から確率ベクトルを作ります。
a <- 3
b <- 5
x <- rbeta(100,a,b)
真のパラメータが
のベータ分布
は以下のようになります。

発生させた確率ベクトルよりパラメータを推定するとこんな感じで計算します。
newton_beta(x)
[1] 1.377578 1.730856
[1] 2.212144
[1] 1.916810 2.800353
[1] 3.393544
[1] 2.487916 3.960042
[1] 4.676715
[1] 2.833155 4.670363
[1] 5.462514
[1] 2.907663 4.824839
[1] 5.633256
[1] 2.910250 4.830231
[1] 5.63921
[1] 2.910253 4.830237
[1] 5.639217
$shape1
[1] 2.910253
$shpae2
[1] 4.830237
これは推定されたパラメータが
であることを表しています。概ねよさげですが、ちょっと精度が悪い?
このパラメータを持つベータ分布は以下のようになります。

初期値を変えると結果も変わるかもしれません。ベータ分布のように、二つのパラメータを初期値にとることができます。
newton_beta(x,初期値1,初期値2)
間違い等ございましたらご指摘ください。
ところで、Bloggerでソースを貼付ける良い方法、何かないですか?
参考文献は有名なこちらです。
Estimating a Dirichlet distribution (T.Minka, 2003)
二項分布の共役事前分布であるベータ分布
この確率ベクトルからベータ分布のパラメータaとbを最尤推定にて求める関数が以下です。
newton_beta<-function(x,shape1=1.0,shape2=1.0,eps=0.0001){
euqlid<-function(y){
return(sqrt(sum(y*y)))
}
N <- length(x)
alpha <- c(shape1,shape2)
pn <- 0
while(TRUE){
palpha <- alpha
#gradient
g <- c(N * digamma(sum(alpha)) - N * digamma(alpha[1]) + sum(log(x)) , N * digamma(sum(alpha)) - N * digamma(alpha[2]) + sum(log(1 - x)))
#Parameters for Hessian
q <- c(- N * trigamma(alpha[1]) , - N * trigamma(alpha[2]))
z <- N * trigamma(sum(alpha))
#Update
b <- sum(g/q) / ( 1/z + sum(1/q))
alpha <- palpha - (g - b)/q
n <- euqlid(alpha)
print(alpha)
print(n)
if( abs(pn - n)/pn < eps ){
break
}
pn <- n
}
return(list("shape1"=alpha[1],"shpae2"=alpha[2]))
}
厳密には閉じた形では解けないので、ニュートン法を用いて求めます。
ベータ分布(ディリクレ分布)で効率的に計算を行うための工夫をしているところがポイントのようです。
百聞は一見にしかずということで、ためしにやってみましょう。
まず、適当なベータ分布から確率ベクトルを作ります。
a <- 3
b <- 5
x <- rbeta(100,a,b)
真のパラメータが

発生させた確率ベクトルよりパラメータを推定するとこんな感じで計算します。
newton_beta(x)
[1] 1.377578 1.730856
[1] 2.212144
[1] 1.916810 2.800353
[1] 3.393544
[1] 2.487916 3.960042
[1] 4.676715
[1] 2.833155 4.670363
[1] 5.462514
[1] 2.907663 4.824839
[1] 5.633256
[1] 2.910250 4.830231
[1] 5.63921
[1] 2.910253 4.830237
[1] 5.639217
$shape1
[1] 2.910253
$shpae2
[1] 4.830237
これは推定されたパラメータが
このパラメータを持つベータ分布は以下のようになります。

初期値を変えると結果も変わるかもしれません。ベータ分布のように、二つのパラメータを初期値にとることができます。
newton_beta(x,初期値1,初期値2)
間違い等ございましたらご指摘ください。
ところで、Bloggerでソースを貼付ける良い方法、何かないですか?
2009年7月21日火曜日
夏休み突入
上半期最後のゼミ発表、毎年恒例のB4ゼミ合宿と、ゼミ関連のイベントが目白押しで忙しく過ごしていました。
僕が指導を担当した後輩達の発表では、自分が発表するときよりも緊張。
きっと僕の上司もそう思っているのでしょう(いつもありがとうございます)。
指導担当といっても実質的には助手の方に任せっきりでありました。
より一層精進せねば。
ところで、今日でひとしきりイベントに片がつきました。
学生として最後の夏休みの始まりです。
同期に夏の予定を聞いたところ、「バイトと研究」だそうです。
僕はとりあえず「論文執筆と研究」です。
普段と変わらない...(普段より研究するかも...)
僕が指導を担当した後輩達の発表では、自分が発表するときよりも緊張。
きっと僕の上司もそう思っているのでしょう(いつもありがとうございます)。
指導担当といっても実質的には助手の方に任せっきりでありました。
より一層精進せねば。
ところで、今日でひとしきりイベントに片がつきました。
学生として最後の夏休みの始まりです。
同期に夏の予定を聞いたところ、「バイトと研究」だそうです。
僕はとりあえず「論文執筆と研究」です。
普段と変わらない...(普段より研究するかも...)
2009年7月8日水曜日
Mozila Open Web Tools Directory
こちらの記事より
FireFoxで有名なMozilaがWeb上のツールを集めてくれています。

ほとんどシラナイ・・・。
開発者とは到底呼べない僕ですが、いくつかを自在に操り面白いものを作れたらいいなと思ってます。
FireFoxで有名なMozilaがWeb上のツールを集めてくれています。

ほとんどシラナイ・・・。
開発者とは到底呼べない僕ですが、いくつかを自在に操り面白いものを作れたらいいなと思ってます。
2009年7月1日水曜日
イタリア所感
忘れないうちにイタリアの思い出を。
強行軍の合間を縫って、1泊2日でローマ観光。
街中に歴史的・芸術的建造物が点在する、贅沢な街でした。



滞在中に感じたのは
・所謂イタリア人のイメージ(陽気、好色 etc...)どおり
・ローマもこの時期暑いよ...
・ローマにも三越あるよ...
・あぁ、1日かけてバチカン美術館に浸りたい
・「インターネット使えます」って書いてあったじゃんかよ!
・スーパーはなんでも格安だよね
・ローマ人よりもトリノ人の方が日本人に優しいなぁ
なんてところ。
ところで、イタリアはなんといっても飯がうまい!
新鮮な魚介をメインに、ピザ、ラザニア、パスタ、ジェラート etc...を堪能してきました。
10日近くの滞在で、はずれは1回だけ!
でもやっぱりメインは学会だったかな。
家具なんて到底買いに行く暇もなく、手に入れたのはこいつだけ
ALESSIのボトルオープナーです。
1800円くらいで購入できたので、2割引くらい?
機会を作って必ずもう一回行こうと思います。
強行軍の合間を縫って、1泊2日でローマ観光。
街中に歴史的・芸術的建造物が点在する、贅沢な街でした。
ローマの街並
サン・ピエトロ寺院
コロッセオ
滞在中に感じたのは
・所謂イタリア人のイメージ(陽気、好色 etc...)どおり
・ローマもこの時期暑いよ...
・ローマにも三越あるよ...
・あぁ、1日かけてバチカン美術館に浸りたい
・「インターネット使えます」って書いてあったじゃんかよ!
・スーパーはなんでも格安だよね
・ローマ人よりもトリノ人の方が日本人に優しいなぁ
なんてところ。
ところで、イタリアはなんといっても飯がうまい!
新鮮な魚介をメインに、ピザ、ラザニア、パスタ、ジェラート etc...を堪能してきました。
10日近くの滞在で、はずれは1回だけ!
でもやっぱりメインは学会だったかな。
家具なんて到底買いに行く暇もなく、手に入れたのはこいつだけ
ALESSIのボトルオープナーです。
1800円くらいで購入できたので、2割引くらい?
機会を作って必ずもう一回行こうと思います。
2009年6月28日日曜日
無事帰国
イタリアより本日無事帰国。
これに行ってました。
http://bnpworkshop.carloalberto.org/
研究分野の大物達がひしめく学会で、芸能人ばかりに遭遇した感覚。
なんて幸せ!
ただインターネット環境が貧弱、かつタイトなスケジュールであったことにより、現地からBlogを更新できなかったことが心残り。



今回の研究成果は先人達の偉業があってこそのもの。
次は完全にオリジナルで出せるよう精進しよう。
イタリア所感はまた今度!
これに行ってました。
http://bnpworkshop.carloalberto.org/
研究分野の大物達がひしめく学会で、芸能人ばかりに遭遇した感覚。
なんて幸せ!
ただインターネット環境が貧弱、かつタイトなスケジュールであったことにより、現地からBlogを更新できなかったことが心残り。
学会会場
頑張る後輩
頑張る後輩?
今回の研究成果は先人達の偉業があってこそのもの。
次は完全にオリジナルで出せるよう精進しよう。
イタリア所感はまた今度!
2009年6月14日日曜日
出発前に色々
いよいよ来週末からイタリアへ。
ポスターは問題ないが、論文の再投稿に一枚噛むことになり、これから急いで実験。
理系学生らしい忙しさにアップアップ。
前回の海外は中国だった。昨年の10月頃。
4泊5日の日程だったが、デニム・Tシャツ2枚・パーカ+洗濯で乗り切った。
今回は8泊10日ということもあり、もう少しボリュームを増やしたいところ。
現地調達でもいいかななんて考えている。
ところで今回、Tシャツの他にも現地で調達したいものがある。

イタリアが誇る家具ブランド、DANESEの壁掛けボード。
良く行くカフェに置いてあって一目惚れ。
日本で購入するのに比べ、3〜4割は安く購入できると睨んでいる。
問題は現地での知名度(取り扱いの多さ)とそのサイズ。
ミラノを本拠地としているが、残念ながら行く時間はない。
経由地のローマや、トリノにあるかどうか。
また、例え購入できたとしても持って帰るのに一苦労。
うーん。
ポスターは問題ないが、論文の再投稿に一枚噛むことになり、これから急いで実験。
理系学生らしい忙しさにアップアップ。
前回の海外は中国だった。昨年の10月頃。
4泊5日の日程だったが、デニム・Tシャツ2枚・パーカ+洗濯で乗り切った。
今回は8泊10日ということもあり、もう少しボリュームを増やしたいところ。
現地調達でもいいかななんて考えている。
ところで今回、Tシャツの他にも現地で調達したいものがある。
DANESE PinUp

イタリアが誇る家具ブランド、DANESEの壁掛けボード。
良く行くカフェに置いてあって一目惚れ。
日本で購入するのに比べ、3〜4割は安く購入できると睨んでいる。
問題は現地での知名度(取り扱いの多さ)とそのサイズ。
ミラノを本拠地としているが、残念ながら行く時間はない。
経由地のローマや、トリノにあるかどうか。
また、例え購入できたとしても持って帰るのに一苦労。
うーん。
2009年6月8日月曜日
変分ベイズでディリクレ過程混合モデル(Blei論文を解く)
DPMに対する変分ベイズ法を書いたBleiの論文、Variational inference for Dirichlet Process mixturesを解いてみました。
ざっと書き上げたまま確認をしておりませんので、間違いがあればご指摘ください。
式展開だけ妙に丁寧にしていますが、全体的に分かりにくい文だなぁ...
https://www.box.net/shared/2e6k7abce5
Google DocumentsがPDF Web共有できればいいのに!
ざっと書き上げたまま確認をしておりませんので、間違いがあればご指摘ください。
式展開だけ妙に丁寧にしていますが、全体的に分かりにくい文だなぁ...
https://www.box.net/shared/2e6k7abce5
Google DocumentsがPDF Web共有できればいいのに!
2009年6月1日月曜日
線形代数事始め
統計をたしなむ以上避けて通れない線形代数。
高校依頼避け続けてきたけどそろそろ限界だなぁ。
統計のための行列代数(参考書)
統計のための行列代数 上 (1)
Invertible matrix:Wikipedia
http://en.wikipedia.org/wiki/Invertible_matrix
Woodbury matrix identity:Wikipedia
http://en.wikipedia.org/wiki/Woodbury_matrix_identity
米国の学生は上記参考書を授業で使うらしい。
まずいぞ日本の学生!
高校依頼避け続けてきたけどそろそろ限界だなぁ。
統計のための行列代数(参考書)
Invertible matrix:Wikipedia
http://en.wikipedia.org/wiki/Invertible_matrix
Woodbury matrix identity:Wikipedia
http://en.wikipedia.org/wiki/Woodbury_matrix_identity
米国の学生は上記参考書を授業で使うらしい。
まずいぞ日本の学生!
2009年5月31日日曜日
Japanimation
僕は夢中になると疲れを感じない体質なのですが、その分遊びに集中すると仕事は多いに後回しです。
このエントリも後回しにした学会ポスター作成の後に書いています。
本日の遊びはこちら。
FLCL Fooly Cooly
手塚治虫,火の鳥
Japanimation万歳!!
片やエヴァで一世を風靡したGAINAX制作アニメ、片や巨匠手塚治虫のLifeworkと、新旧の名作を堪能(?)致しました。
FLCLは動画サイト、火の鳥は漫画を借りるとエコな遊びでしたが、決めました。どちらも買います。
どちらも古いため新古・中古がよさげ。
このエントリも後回しにした学会ポスター作成の後に書いています。
本日の遊びはこちら。
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なんてのがあるようです。
お試しあれ。
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で書いた方が良いなんて記事を読んだけど、本当でしょうか?
以下やったこと。
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で書いた方が良いなんて記事を読んだけど、本当でしょうか?
登録:
投稿 (Atom)
