特定の観測値のセットの平均と共分散行列を計算しようとしています。点のリストは 3 次元配列で、最初の次元はクラス番号を表し、2 番目の次元は観測数を表し、3 番目の次元は座標番号を表します。平均を計算することはできましたが、共分散に問題があるようです (現在、ゼロ行列を取得しています)。どなたか直し方教えていただけるとありがたいです。
function [ meanEst, covEst, priorProbEst, classMem ] = estimateParams( trainingSet, classList )
%estimateParams estimate all parameters for each class
numRows = size(trainingSet, 1);
numClasses = max(classList.');
%pointList = zeros(numClasses, numRows, 2);
classMem = zeros(numClasses, 1);
for rowCtr = 1:numRows
curClass = classList(rowCtr, 1);
classMem(curClass) = classMem(curClass) + 1;
pointList(curClass, classMem(curClass), 1) = trainingSet(rowCtr, 1);
pointList(curClass, classMem(curClass), 2) = trainingSet(rowCtr, 2);
end
meanEst = zeros(numClasses, 2);
covEst = zeros(numClasses, 2, 2);
priorProbEst = zeros(numClasses, 1);
tot = zeros(numClasses, 2);
for classCtr = 1:numClasses
for pointCtr = 1:classMem(classCtr)
tot(classCtr, 1) = tot(classCtr, 1) + pointList(classCtr, pointCtr, 1);
tot(classCtr, 2) = tot(classCtr, 2) + pointList(classCtr, pointCtr, 2);
end
meanEst(classCtr, 1) = tot(classCtr, 1) / classMem(classCtr);
meanEst(classCtr, 2) = tot(classCtr, 2) / classMem(classCtr);
covEst(classCtr) = cov(pointList(classCtr));
priorProbEst(classCtr) = classMem(classCtr) / numRows;
end
end
これに時間を割いていただきありがとうございます!