今回EMアルゴリズムのプログラムを作るに当たって、
SWING の JTextField の代わりに JFormattedTextField を使ってみた。
JFormattedTextField に NumberFormatter を組み合わせて使うことで、
数値を表す文字列の処理を追加することができる。
JTextField と NumberFormat を単に足したものではなく、
フォーカスが失われたときに、規定の値の場合だけ値を更新するような
validator や直接オブジェクトして書かれた値を取得する機能
などが実装されている。
これを使って、必ず0以上の値を入力するところの指定などが可能になる。
つまり、負の値や数値と解釈できないような文字列が書かれた場合は、
データを更新しない。
Microsoft の MFC の DDX/DDV と似ている。(構文は全然違うが、
やろうとしていることが似ている、と言う意味)
posted at 23:54 |
category: /Java |
固定リンク(NumberFormatter)
EMアルゴリズムを実装してみた。2項の混合正規分布をひとつ与え、
その分布に従うサンプルをいくつか作り、初期値とそのサンプルから
元の混合正規分布を学習するプログラムである。
例によって Java Web Start で作った。
jnlpファイル
で起動してみてください。
answer が学習の対象となる混合正規分布。それぞれの項の標準偏差(σ)と平均(μ)
および第1項が選ばれる確率をαで与える。
同様に mix に学習の初期値を与える。
sample には学習の材料となるサンプルの個数を与える。
INIT ボタンを押すと、赤色で answer の確率分布、青色で mix の確率分布が
表示され、answer に従うサンプルのヒストグラムがそれに重ねて書かれる。
STEP ボタンを押すたびに一回EMアルゴリズムを実行する。mix には実行後の
混合正規分布の標準偏差、平均が表示される。
結構収束は速い。
posted at 23:40 |
category: /Math/InfoGeom |
固定リンク(EMアルゴリズム(続))