주어진 관측 세트의 평균 및 공분산 행렬을 계산하려고합니다. 점의 목록은 클래스 번호를 나타내는 첫 번째 차원, 관측 번호를 나타내는 두 번째 차원 및 좌표 번호를 나타내는 세 번째 차원이있는 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
시간을내어 보내 주셔서 감사합니다.
각 반복에서 공분산 행렬을 계산할 행렬 (mxn)을 참조하고 싶지 않으십니까? –
@diophantine 각 클래스의 공분산 행렬을 포인트 목록을 기반으로 계산하고 싶습니다. pointList는 3D 배열이므로 classCtr을 지정하면 간단한 관찰 행렬을 얻을 수 있습니다. 나는이 관찰을 인수로 cov 메소드를 호출하고있다. 어딘가 잘못 가고 있니? – Arani