属性決定修正

 前回問題になった、複数の隠れ状態が一つの属性に集約されてしまうという問題を解決するため、隣接ベクトルの合計値で同じ値をもつ要素があった場合、それまでに決定した属性とかぶらないようにチェックするようにコードを書き換えました。

if ($attr[$j] > $hu0) {
$hu0 = $attr[$j]; #最大値を与える属性を取っておく
$hu1 = $j;
}
elsif ($attr[$j] == $hu0) { #最大値と同じものがあったら
foreach $u (@stateAttr) {
if ($u == $hu1 +1) { #既に同じ属性が決定されていたら
$hu1 = $j; #変更
last;
}
}
}

これによりだいぶ精度よく属性が決定されるようになりました。今回はこのコードにより出力される状態→属性のようすをいろいろなレビューについて眺めていましたが、遷移確率が低かったり出現確率が低かったりする部分で、決定された属性を変更するようにすれば、もっと精度を上げられるように思いました。
 次回は確率の値に注意しながら、さらに精度を上げられる部分を探して、コードを追加していこうと思います。