2017-11-29 15 views
0

그래서 데이터 분류를위한 Gaussian Class Conditional 모델을 훈련시키는 EM 알고리즘을 구현하려고합니다. 나는 공분산 행렬을 계산하는 방법을 알 수 없기 때문에 지금은 M 단계에 머물러 있습니다.대형 데이터 세트와 다른 평균에 대한 Matlab의 공분산 계산

문제는 큰 데이터 세트가 있고 for 루프를 사용하면 각 지점을 통과하는 것이 느려질 수 있습니다. 난이 식을 이용하여 계산 된 평균을 사용하는 것이 필요하기 때문에 또한, 공분산 함수 COV()를 사용할 수 없다 (MU 심볼 일)

M-step

는에 COV()을 조절하는 방법이 내가 원하는 것을 사용 하는가? 아니면 루프를 사용하지 않고도이 작업을 수행 할 수있는 또 다른 방법이 있습니까?

편집 : 데이터 매트릭스가 무엇인지 설명하는 것을 잊어 버렸습니다. 각 행이 데이터 포인트 인 nx3입니다.

기술적으로는 일반적인 경우 nxm에서 작동해야하지만 n은 일반적으로 매우 크고 (1000 이상) m은 비교적 작습니다.

+0

루프를 사용하여 작동하는 (느리지 만) 버전을 포함하도록 게시물을 편집 할 수 있습니까? 이는 성능 최적화를 찾는 좋은 출발점이 될 것입니다. – mikkola

+0

@mikkola 죄송하지만 그 코드는 없습니다. 너무 오랜 시간이 걸리므로 데이터를 루프 할 수 없다는 점을 분명히 들었습니다. 내가 찾고있는 건 for 루프의 대안이다. – user1804234

답변

0

수동으로 공분산 행렬을 계산할 수 있습니다. 다음과 같이 진행 data 사용자 지정이 말은 모든 변수를 포함 매트릭스 (예를 들어, [x y]) 및 mu하자 : 나는 Bessel's Correction (대신 nn-1)를 사용

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

공지 사항 Matlab의 cov 기능 사용하기 때문에 그것은 않는 한 1로 세 번째 인수를 지정

cov_mat = cov(x,y,1); 

C = COV (___, w) fo를 정규화 가중치를 지정 이전 구문 인 중 하나. w = 0 (기본값) 일 때, C는 관측 -1의 수 에 의해 정규화됩니다. w = 1 일 때, 이는 관측치의 수로 정규화된다.

+0

죄송합니다. 그러나 데이터 세트의 크기가 무엇인지 설명하는 것을 잊었습니다. 원래 게시물을 편집했지만 각 행이 데이터 포인트 인 nx3 매트릭스입니다. 이러한 데이터 매트릭스에 대해이 방법이 작동합니까? 내가 공분산을 이해하는 것에서 (때로는 혼란 스럽기 때문에),이 방법이 효과가 없어야한다. – user1804234