2017-11-29 30 views
0

私は、データを分類するためのガウスクラス条件付きモデルを訓練するEMアルゴリズムを実装しようとしています。現時点では、共分散行列を計算する方法がわからないので、私はMステップで立ち往生しています。大きなデータセットと異なる平均のためのMatlabの共分散の計算

問題は大きなデータセットがあり、forループを使用して各ポイントを通過するのが遅くなることです。私は、この式を用いて算出した平均を使用する必要があるので、私はまた、共分散関数COV()を使用することはできません(ミューシンボル1)

M-step

はにCOV()を調整する方法はあります私が望む平均を使用しますか?あるいは、私はループのないこれを行うことができる別の方法はありますか?

編集:データマトリックスがどのようなものか説明するのを忘れました。そのnx3は各行がデータポイントです。

技術的には一般的なケースnxmで動作する必要がありますが、nは通常は非常に大きく(1000以上)、mは比較的小さいです。

+0

ループで動作している(遅いですが)バージョンを含めるように投稿を編集できますか?パフォーマンスの最適化を見つけるための出発点となります。 – mikkola

+0

@mikkola申し訳ありませんが、私はそのコードを持っていません。あまりにも時間がかかるので、データをループすることができないことを明示しました。私が探しているのはforループの代わりです。 – user1804234

答えて

0

手動で共分散行列を計算することができます。次のように進んで、カスタムの意味mudataは、(例えば、[x y])すべての変数を含む行列とすると:私はBessel's Correctionを使用

n = size(data,1); 
data_dem = data - (ones(n,1) * mu); 
cov_mat = (data_dem.' * data_dem) ./ (n - 1); 

お知らせ(代わりにnn-1)Matlabのcov機能を使用するため、また、あなたが1である第3の引数を指定しない限り:

cov_mat = cov(x,y,1); 

C = COV(___、W)foを正規化重みを指定以前の構文 のいずれか。 w = 0(デフォルト)の場合、Cは観測値-1の数値 で正規化されます。 w = 1の場合は、 個の観測値で正規化されます。

+0

申し訳ありませんが、データセットのサイズが何であるか説明するのを忘れました。元の投稿を編集しましたが、各行がデータポイントであるnx3の行列です。このメソッドは、このようなデータマトリックスで機能しますか?私が共分散を理解していること(時には私を混乱させるほどではない)から、この方法はうまくいかないかもしれませんが、私は間違っている可能性があります。 – user1804234

関連する問題