mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2014年10月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

2014年10月28日(火) [n年日記]

#1 ガンマ一般化線形モデル

共同研究の関係で必要になったので, ガンマ分布の一般化線形モデルのC++ソフトウェア を公開しました。

ガンマ一般化線形モデルは, 以下のようなモデルです。

一般化線形モデル自体の説明については, 大慈さんの講義スライド などがわかりやすいと思います。

普通, 言語処理などでは次のようなデータファイルを使って

1  w0|の p0|助詞 w-1:家 p-1|名詞
0  w0|人 p0|名詞 w-1:の p-1|助詞
先頭の二値の観測値をSVMやロジスティック回帰で予測します。しかし, この観測値が 0/1ではなく, 0以上の実数である場合も普通にありえます。
この場合, 観測値がガンマ分布 Ga(a,b) に従うとするのが自然なモデル化の一つで, a > 0, b > 0であるため, ロジスティック回帰のように a = exp(<w,f>), b = exp(<v,f>) のように指数の肩に乗せてやることができます。 *1 上の gamglm はこのためのソフトウェアで,
y  feature_1 feature_2 feature_3 .. feature_n
のようなデータファイルに対して動きます。yは任意の正の実数です。

ガンマ一般化線形モデルはRの glm() で推定できるような気がしてしまいますが, パラメータ w に対して凸ではないため, Webで例にあるような説明変数の数が たかだか1個か2個の場合ではなく, 何百, 何千とある場合はまともに動きません (のはず)。実際, 微分を計算して L-BFGS で最適化するプログラムを最初書いたところ, すぐ局所解にはまってしまい, 変数の数が増えると結果がほとんど0になるなど, 使いものにならない結果となることがわかりました。

このため, 上の gamglm では, 地道なランダムウォークMCMCでパラメータを推定して います。ただし, 特徴の数が数千を超えると尤度の計算が非常に遅くなるため, 特徴が多くの場合疎であることを利用して, 現在更新する特徴が現れているデータ だけを利用してMetropolis-Hastingsの尤度計算をする, ということをしています。
やっていることは簡単ですが, 効率的に実装するには結構時間もかかり, 一般的な問題でもあるので, 公開することにしました。
SVMのようなデータで正の実数を回帰するプログラムとして, 使われることがあれば よいなと思っています。


*1: 一般にR等でガンマ線形モデルのリンク関数は逆数 1/x にすることが多いようですが, これは正値であることを何ら保証しないので, 変量の数が1や2ではない場合は使いものにはならない気がします。

1 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project