mots quotidiens. | |
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp | by hns, version 2.10-pl1. |
|
||||||||||||||||||||||||||||||||||||||||||||||
Cでプログラムを書いていて, テキスト形式でセーブされたパラメータファイルから
ベクトル/行列に読み込むという処理は非常によくあると思うのだが
(MATLABの load に相当), うっかり前に書いたコードを忘れて車輪を再発明する
ところだった。;
誰が書いても同じようなコードになると思うのだけれども, 次元を事前に指定せず,
読むのと同時に決めるコードは一瞬では書けないと思うので, せっかくなので
下に公開しておきます。(ファイルに書く方は簡単なので省略。)
loader.c
loader.h
dmatrix.c
dmatrix.h
これを使うには, 以下のようにします。
#include "loader.h" double *vector, **matrix; int dim, rows, cols; if ((vector = load_vector(file, &dim)) == NULL) { fprintf(stderr, "can't open vector from %s.\n", file); exit(1); } if ((matrix = load_matrix(file, &rows, &cols)) == NULL) { fprintf(stderr, "can't open matrix from %s.\n", file); exit(1); }
MATLABでも, Matlabコンパイラ(mcc) を使う場合には標準の load が使えない
ので, 自分でベクトルや行列をセーブ/ロードするコードを書かないといけない
のだった。少し考えないとナイーブなコードを書いてしまいがちなので, 公開した
方がいいのかなと思いますが, 微妙。もし欲しい人がいたら, ご連絡下さい。
例えば, ベクトルをMATLABでロードするコードは以下のような感じに書けます。
function v = vload(file,sep) % v = vload(file,[sep]) % load a vector v from file in ASCII format. (for mcc compiler) % output is a column vector irrespective of original. % file = filename of input, % sep = separator character in row-wise format. % Fri Feb 13 16:41:15 2004 JST daichi.mochihashi<at>atr.jp % open file fid = fopen(file,'r'); if (fid == -1) error(sprintf('vload: %s can''t be opened.',file)); end % field separator if nargin < 2 sep = ''; % null string end % read data fprintf(2,'loading from file %s..\n',file); [v,count] = fscanf(fid,sprintf('%%g%s',sep),inf); % close file fclose(fid); fprintf(2,'done.\n');研究に直接関係ないのと, それほど書くのが難しくないわりに, 皆が同じコードを 自分で考えて書かないといけない(その時, もしかするとアドホックなコードを書いて しまうかも知れない)のがムダっぽいなぁ, とは思うわけですが。 うーん。
僕も本郷の総合図書館に入った時に同じようなことを考えたことがあるが,
それは単に文学的感慨であるのに対し,
この場合は自分がイギリスのそうした科学の系譜
に連なっているということは, 科学的な生産活動に直接影響を及ぼすと思う。
藤原正彦氏も
『遥かなるケンブリッジ』
の中でそんなことを書かれていたような記憶がある。
もちろん, 現代で面白い研究やモデルの多くは, そうした伝統の全くないアメリカ
で生まれているわけで, そうした知的伝統が不可欠のものである, ということは
必ずしもないのだとは思うけれども。
Ferguson (1973) A Bayesian Analysis of Some Nonparametric Problems, The Annals of Statistics,Vol.1, No.2, 1973.と
Antoniak (1974) Mixtures of Dirichlet Processes with Applications to Bayesian Nonparametric Problems, The Annals of Statistics,Vol.2, No.6, 1974.を読むのがいいと思います。
DPは, それ自体というよりディリクレ過程混合モデルとして使う人が多いか と思うので, その場合は
Escobar and West (1995) "Bayesian Density Estimation and Inference using Mixtures", Journal of the American Statistical Association,Vol. 90, No. 430, 1995.がいい論文で, これを読むのが当面の目標ではないかと思います。 ちなみに, これを読むためには, ディリクレ過程の生成パラメータであるαの 推定が必要で, それを Beta variable を入れた augmented Gibbs でやる話で
West (1992) "Hyperparameter estimation in Dirichlet process mixture models", ISDS discussion paper 1992-03, 1992.を読む必要があります。 (Googleで探すとリンクが切れているみたいですが, 今探したら ここ にありました。)
他にも色々ありますが, とりあえず上に挙げた論文が一番基礎的だと思います。
ちなみに, Antoniak (1974)などはWeb上にはないので,
NAISTの電子図書館で複写依頼して
大川さんに自宅まで転送してもらったのだけれど, 何と
京大数理解析研究所附属図書館から, 和紙風の白い封筒で来て(2003年の7月ごろ),
文IIIだった僕がついに京大数理解析研究所ですか!と個人的に感慨にふけって
しまったのでした。
この論文では第1種 Stirling 数になる, という話が後ろの方でわりと
突然出てきますが, これがどうしてかというのは, 僕の
2005/9/6の日記
に書いておきました。結局この論文や上のものは後で東大にログインして
JSTORからPDFをゲットしたので, PDFがほしい, という方は個人的にご連絡下さい。
上の論文とは別に, スライドとしては大羽さんも紹介されていた
Ghahramani の
UAI'05のスライド
と, Jordanの
NIPS'05のスライド
が
直観的な感覚をつかむにはとてもいいと思います。
Ghahramani のスライドを見て, Base measure との関係はこんな感じか! というのが
僕はよくわかりました。
というあたりで, 参考になればと思います。
タイトル一覧 |