質問を簡単にするために、ここでダミーの問題を作成します。それぞれ 1 と 2 のラベルが付いた 2 つのトレーニング データ セットがあります。両方のトレーニング データセットは、ガウス分布の混合に従うと想定されています。Matlab ツールボックス関数 (gmdistribution.fit) を使用して、平均と共分散を簡単に推定できます。
次に、トレーニング データセット 2 と同様の MoG で作成されたと想定されるいくつかのテスト データセットがありますが、ノイズがあります。テスト データセットがトレーニング データセット 2 の MoG を使用して生成される可能性が高い確率のようなものを計算したいと思います。つまり、テスト データセットがラベル 2 を持つ可能性を取得したいと考えています。
これを行う方法を教えてください。どうもありがとう。
注意:
- 2 つのトレーニング データセットのサイズが異なります。
- 2 つのトレーニング データセットの分布は重複しています。
- テスト データセットのサイズは、トレーニング データセットよりもはるかに小さいです。
いくつかの Matlab コード:
%% Mixture of Gassian 1 (Training set 1)
mean1 = [1 -2];
cov1 = [2 0; 0 .5];
mean2 = [0.5 -5];
cov2 = [1 0; 0 1];
trainingDataset1 = [mvnrnd(mean1, cov1, 1000); mvnrnd(mean2, cov2, 1000)];
MoGOptions = statset('Display', 'final');
MoGObj1 = gmdistribution.fit(trainingDataset1, 2, 'Options', MoGOptions);
figure,
scatter(trainingDataset1(:,1), trainingDataset1(:,2), 10, '.')
hold on
ezcontour(@(x,y)pdf(MoGObj1,[x y]), [-8 6], [-8 2]);
%% Mixture of Gassian 2 (Training set 2)
mean4 = [0.5 -1];
cov4 = [1.5 0; 0 .8];
mean5 = [-2 -3];
cov5 = [1 0; 0 1];
mean6 = [-4 -2];
cov6 = [1 0; 0 1];
trainingDataset2 = [mvnrnd(mean4, cov4, 500); mvnrnd(mean5, cov5, 500); mvnrnd(mean6, cov6, 500)];
MoGOptions = statset('Display', 'final');
MoGObj2 = gmdistribution.fit(trainingDataset2, 2, 'Options', MoGOptions);
figure,
scatter(trainingDataset2(:,1), trainingDataset2(:,2), 10, '.')
hold on
ezcontour(@(x,y)pdf(MoGObj2,[x y]), [-8 6], [-8 2]);
%% Test set
mean7 = [1.1 -2.1];
cov7 = [2.2 0; 0 .4];
mean8 = [0.3 -5.4];
cov8 = [1.2 0; 0 1.1];
testingDataset1 = [mvnrnd(mean7, cov7, 100); mvnrnd(mean8, cov8, 100)];
figure,
scatter(testingDataset1(:,1), testingDataset1(:,2), 10, '.')