私は HMM の初心者ですが、UCI Human Activity Recognition データ セット用に Jahmm を使用してコードを作成しようとしました。このデータ セットには 561 の特徴と 7352 行があり、加速度計とジャイロスコープの両方の xyz 慣性値も含まれており、主に 6 つのアクティビティを認識するためのものです: 歩く、上を歩く、下を歩く、座る、立つ、横になる。これまでのところ、次のことを試しました。
xyz 慣性値を使用すると、次のようになります。
- 6 つのアクティビティのそれぞれについて、対応する HMM のアクティビティ トレイン データのみを使用して、各軸 (加速度計とジャイロスコープの両方) に対して 6 つの HMM をトレーニングしました。各アクティビティについても、すべての軸の確率に等しい重みを適用し (つまり、テスト データに適用した場合)、それらをすべて加算して各アクティビティの合計を求めました。最大の確率は、選ばれたものになります。(私はこれに運がありませんでした。他のものでは同時に超低精度のアクティビティがあります。) 注: 「ObservationReal」を使用し、6 つの状態 (実際には 2 ~ 10 の状態を試しました) を均等に分割しました。 HMM の初期値。一部のアクティビティで NaN 値を取得することがあります。
- また、最初に R でデータをスケーリング (z スコア) してから、上記の方法を適用しようとしましたが、それでも役に立ちませんでした。
- また、「ObservationVector」で慣性値をコーディングしようとしましたが、最初の Opdfs を設定する方法がわかりませんでした (正定行列でなければならないと言われています)。
特徴値を使用すると、次のようになります。
- 機能セットが大きすぎて Jahmm で実行できないことがわかったので、スケーリングされたデータを使用します (正規化されていますが、すぐに使用できるデータでは適切な結果が得られなかったためです [-1,1])。 、PCA と相関のために R でデータのトレーニングとテストを実行してから、Jahmm コード (6 つの 6 状態 HMM で構成され、各アクティビティごとに、テスト データで最大確率を取得します) に入力しました。結果は次のとおりです。まだあまり良くありません。特に座っているアクティビティは、常に約 20% の精度が得られます。(上記「備考」と同じパラメータ)
- R で同じデータ (mtry=8) を使用して randomForest を実行し、重要度の値を取得しました。最初に移動活動と静的活動を 119 の変数で分離し、次に移動活動 (歩行、2 階に移動、2 階に移動) を 89 の特徴 (RF 重要度値に基づく) で分類し、静的活動 (座る、立つ、横になる) を 5 の特徴で分類しました。変数。運動活動と静的活動を分離するのは簡単ですが (2 つの状態、100%)、HMM パラメーターを調整したこの方法では、全体の精度は 86% しか得られませんでした。(第 2 レベルには 3 状態 HMM を使用)
- 6 つの状態 (1 つの論文で読んだように、1 つのアクティビティに対応) で、すべてのアクティビティに対して 1 つの HMM をトレーニングしました。しかし、その後のビタビの使い方がわかりませんでした。Viterbi には
List<Observation O>
テスト シーケンスが必要であることがわかりますが、明らかにList<List<ObservationReal>>
テスト データが必要です。
RでHMMパッケージも試しました:
- depmixS4 - ビタビがなく、テスト データで事後確率を取得する方法がわかりません (トレーニング データのみで確率が得られます)。パッケージの作成者に連絡してみましたが、彼は私を助けようとしましたが、彼が試すように言ったコードでエラーが発生しました (私はまだ彼にメールで返信していません)。
- RHmm - 最初は魔法のように機能します。すべてのトレーニング データを使用して 6 状態の HMM を 1 つだけトレーニングしましたが、nan が生成され、テスト データで不適切なビタビ シーケンスが発生しました。
これまで HMM について読んだことによると、これらの結果は HMM には低すぎます。私は何か間違ったことをしていますか?上記の手法を使用する前に、さらに前処理を行う必要がありますか? HMM/Jahmm にはデータが大きすぎますか? 私はそれを過剰に適合させていますか?私は今立ち往生していますが、私のプロジェクトではアクティビティ認識と HMM を実行する必要があります。Jahmm と R を連続 HMM で既に試した人からの提案やフィードバックをいただければ幸いです。それが最終的に機能することを意味する場合、私は他の言語を勉強することにもオープンです。