ICA-공분산 행렬의 통계적 독립성 및 고유 값


14

현재 Matlab을 사용하여 다른 신호를 만들고 믹싱 매트릭스 A에 곱하여 믹싱 한 다음 FastICA를 사용하여 원래 신호를 다시 얻으려고합니다 .

지금까지 복구 된 신호는 원래 신호와 비교할 때 실제로 나빴습니다.

내가 잘못하고 있는지 확인하려고합니다. 내가 생성하는 신호는 다음과 같습니다.

s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(size(x, 2), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth

원본 신호

ICA가 성공하기위한 한 가지 조건은 최대 하나의 신호가 가우시안이고 신호 생성에서이를 관찰했습니다.

그러나 다른 조건은 모든 신호가 통계적으로 독립적이라는 것입니다.

내가 아는 것은 두 개의 신호 A & B가 주어지면 한 신호를 아는 것은 다른 신호와 관련하여 어떤 정보도 제공하지 않는다는 것을 의미합니다. P (A | B) = P (A) 여기서 P는 확률 입니다.

이제 내 질문은 이것입니다. 신호가 통계적으로 독립적입니까? 이것을 결정할 수있는 방법이 있습니까? 아마도 지켜봐야 할 몇 가지 속성이 있습니까?

내가 주목 한 또 다른 것은 공분산 행렬의 고유 값을 계산할 때 (혼합 신호를 포함하는 행렬에 대해 계산 됨) 고유 스펙트럼은 하나의 (주) 주성분 만 있음을 보여줍니다 . 이것이 실제로 무엇을 의미합니까? 5 개의 독립 신호가 있기 때문에 5가 없어야합니까?

예를 들어, 다음 믹싱 매트릭스를 사용하는 경우 :

A =

0.2000    0.4267    0.2133    0.1067    0.0533
0.2909    0.2000    0.2909    0.1455    0.0727
0.1333    0.2667    0.2000    0.2667    0.1333
0.0727    0.1455    0.2909    0.2000    0.2909
0.0533    0.1067    0.2133    0.4267    0.2000

고유 값은 다음과 같습니다. 0.0000 0.0005 0.0022 0.0042 0.0345(단 4!)

동일 행렬을 혼합 행렬로 사용할 때 (즉, 혼합 신호는 원래 신호와 동일 함) 고유 스펙트럼은 다음과 같습니다 0.0103 0.0199 0.0330 0.0811 0.1762. 여전히 다른 것보다 훨씬 큰 값이 있습니다.

도와 주셔서 감사합니다.

내 질문에 대한 답변이 고통 스럽지만 사과하지만 통계, ICA 및 Matlab에 익숙하지 않습니다. 다시 감사합니다.

편집하다

0.2 단계, 즉 x = 0 : 0.1 : 100 범위에서 [0.2, 100] 범위의 각 신호에 대해 500 개의 샘플이 있습니다.

또한 ICA 모델 : X = As + n (현재 노이즈를 추가하지 않음)을 감안할 때 X의 전치의 고유 스펙트럼, 즉 eig (cov (X '))를 참조합니다.

최신 정보

제안 된대로 (댓글 참조), 나는 단지 2 개의 신호로 FastICA 를 시도 했습니다 . 결과는 꽤 좋았습니다 (아래 그림 참조). 사용 된 혼합 매트릭스는이었다 A = [0.75 0.25; 0.25 0.75]. 그러나, 고유 스펙트럼은 0.1657 0.7732여전히 하나의 주요 주성분만을 보여 주었다.

따라서 제 질문은 다음과 같이 요약됩니다 . 많은 신호 벡터가 통계적으로 독립적인지 확인하기 위해 어떤 함수 / 방정식 / 속성을 사용할 수 있습니까?

사인 및 가우스-FastICA


1
훌륭한 질문입니다. 여기서 두 신호가 독립적 일 때 ( dsp.stackexchange.com/questions/1242/… ) 어떻게 알 수 있는지에 대해 물 었지만, 너무 멀지 않았습니다. :-) 나는 또한 ICA를 처음 사용하지만 약간의 빛을 비출 수 있습니다.
Spacey

@Mohammad 아직도 그 질문에 대한 답변에 관심이 있습니까? 관심을 끌기 위해 기꺼이 현상금을 드리겠습니다.
Phonon

@Mohammad 질문을 올렸습니다. 좋은 답변을 얻을 수 있기를 바랍니다. 실제로 내 것과 관련이 있습니다. 나는 지금까지 그것에 대한 의견을 읽었으며 이해하지 못하는 많은 통계가 진행되고 있습니다. 두 신호가 독립적인지 아닌지를 결정하는 확실한 방법을 생각해 냈습니까?
Rachel

@Rachel 아직은 아니지만, 조금 더 연구해서 알려 드리겠습니다. 매우 중요한 개념으로, 유감스럽게 생각되는 개념입니다.
Spacey

@Mohammad 감사합니다. 나는 동의한다. 독립적 인 신호는 E (s1, s2) = E (s1) x E (s2)라는 속성을 관찰하지만 실제 신호에 대해 실제로 계산하는 방법을 모르겠습니다.
Rachel

답변:


8

신호 3과 5는 서로 상관이있는 것으로 보입니다. 첫 번째 고조파를 공유합니다. 두 가지 혼합물을 주었을 때 분리 할 수 ​​없을 경우 공통 고조파를 하나의 신호로, 더 높은 고조파를 두 번째 신호로두기를 원할 것입니다. 그리고 나는 틀릴 것이다! 누락 된 고유 값을 설명 할 수 있습니다.

신호 1과 2도 독립적으로 보이지 않습니다.

두 시리즈의 독립성을위한 빠르고 더러운 "위생성 검사"는 한 신호를 다른 신호에 대해 (x, y) 플롯을 수행하는 것입니다.

plot (sig3, sig5)

그리고 하나의 신호가 섞인 동일한 (x, y) 플롯을 수행하십시오.

indices = randperm(length(sig3))
plot(sig3(indices), sig5)

두 플롯의 모양이 다른 경우 신호가 독립적이지 않습니다. 더 일반적으로, 데이터의 (x, y) 플롯에 "기능", 비대칭 등이 표시되면 이는 나쁜 징조입니다.

적절한 독립성 테스트 (및 ICA 최적화 루프에서 사용되는 목적 함수)에는 예를 들어 상호 정보가 포함됩니다.

ICA는 가장 독립적 인 신호를 선형 믹싱하여 입력 데이터를 생성합니다 . ICA 구현에 사용 된 최적화 기준에 따라 신호가 최대로 독립적 인 경우에만 신호 분리 방법으로 작동하고 원래 신호를 복구합니다.


1
질문 : 만약 그녀의 사례에서 5 가지 신호가 모두 독립적이라면, 우리는 주성분이 정확하지 않을 것으로 기대합니까? 즉, 모든 고유 값은 동일합니다. 기하학적으로, 우리는 5 차원의 가우시안 구름을 가질 것입니다.
Spacey

또한 혼합물에서 두 개의 정현파를 제거하는 것에 대해 ICA의 저자에게 연락했으며 실제로 ICA로 할 수 있다고 말했습니다. 이것은 신호 3과 5와 관련하여 말한 내용에 따라 약간 혼란 스럽습니다. 왜냐하면 신호가 상관되어 있기 때문입니다.
Spacey

@ pichenettes 나는 당신이 제안한대로 그 그래프를 플로팅했습니다-플롯은 실제로 다른 모양을 가지고 있습니다. 불행히도 나는 독립성을 테스트하는 방법에 여전히 붙어 있습니다. 통계적으로 독립적 인 신호를 생성하여 FastICA의 성능을 평가할 수있는 방법이 필요합니다.
Rachel

@Rachel 아마도 통계적으로 독립적 인 신호를 만들기 위해 현재 시도 할 수있는 가장 빠른 방법은 다음과 같습니다. MATLAB에서는 'wavrecord'명령을 사용할 수 있습니다. 그 벡터를 저장하고x1[n]x2[n]

@Mohammad 나는 자신의 목소리를 녹음하지 않았지만 Sinusodial과 Gaussian 신호를 혼합하여 FastICA를 사용해 보았습니다. 나는 그것들이 독립적이라고 생각할 것입니다. FastICA는 꽤 잘 수행했지만 고유 스펙트럼은 여전히 ​​이상합니다. 결과를 보여주기 위해 질문을 업데이트하겠습니다.
Rachel

7

저는 ICA의 전문가는 아니지만 독립성에 대해 조금 말씀 드릴 수 있습니다.

일부 의견에서 언급했듯이, 두 랜덤 변수 간의 통계적 독립성은 대략 "한 변수를 관찰하면 다른 변수에 대해 제공하는 정보의 양"으로 해석 될 수 있습니다.

XYXYp(x,y)XYp(x,y)=p(x)p(y)

p(x,y)

XYX와이(엑스=나는,와이=제이)=나는제이(엑스=나는)=나는(와이=제이)=제이

나는(엑스,와이)=나는제이나는제이로그나는제이나는제이

다음은 구성된 관절 분포에서 2 개의 독립적 인 신호를 생성하고 비 독립 관절 분포에서 2 개의 독립적 인 신호를 생성 한 다음 관절의 상호 정보를 계산하는 matlab 코드입니다.

"computeMIplugin.m"함수는 위의 요약 공식을 사용하여 상호 정보를 계산하는 간단한 함수입니다.

Ndist = 25;
xx = linspace(-pi, pi, Ndist);

P1 = abs(sin(xx)); P2 = abs(cos(xx)); 
P1 = P1/sum(P1); P2 = P2/sum(P2); % generate marginal distributions

%% Draw independent samples.
Nsamp = 1e4;
X = randsample(xx, Nsamp, 'true', P1);
Y = randsample(xx, Nsamp, 'true', P2);

Pj1 = P1'*P2;
computeMIplugin(Pj1)

% I get approx 8e-15 ... independent!

% Now Sample the joint distribution 
cnt = {}; cnt{1} = xx; cnt{2} = xx; % bin centers
Pj1_samp= hist3([X' Y'],cnt); Pj1_samp = Pj1_samp/sum(Pj1_samp(:));
computeMIplugin(Pj1_samp)
% I get approx .02; since we've estimated the distribution from
% samples, we don't know the true value of the MI. This is where
% a confidence interval would come in handy. We'd like to know 
% whether value of MI is significantly different from 0. 

% mean square difference between true and sampled?
% (this is small for these parameter settings... 
% depends on the sample size and # bins in the distribution).
mean( (Pj1_samp(:) - Pj1(:)).^2)

%% Draw samples that aren't independent. 

tx = linspace(0,30,Nsamp);
X = pi*sin(tx);
Y = pi*cos(tx);

% estimate the joint distribution
cnt = {}; cnt{1} = xx; cnt{2} = xx; % bin centers
Pj2= hist3([X' Y'],cnt); Pj2 = Pj2/sum(Pj2(:));
computeMIplugin(Pj2)

% I get 1.9281  - not independent!

%% make figure
figure(1); 
colormap gray
subplot(221)
imagesc(xx,xx,Pj1_samp)
title('sampled joint distribution 1')
subplot(222)
imagesc(xx,xx,Pj2)
title('sampled joint distribution 2')
subplot(223)
imagesc(xx,xx,Pj1)
title('true joint distribution 1')

다시 말하지만, 이것은 다른 분포 가정과 함께 관절 분포의 추정치가 양호하다고 가정하지만 경험상 일반적으로 유용합니다.


좋은 답변 sydeulissie 덕분에 조금 더 깊이 조사해야합니다.
Spacey

우선, 긴 답변에 감사드립니다. 매우 유익했습니다. 몇 가지 질문이 있습니다. 카이 제곱 테스트 사용을 언급했습니다. 나는 그것을 조사하고 정말로 흥미로워 보이지만 신호에 어떻게 사용할 수 있습니까? 범주 형 데이터에만 적용 할 수 없습니까?
Rachel

또한 Pj1 = P1 '* P2를 사용하여 관절 분포를 계산하고 있습니까? 그러나 기술적으로는 이것이 불가능하다고 생각합니다. 아마도 원래 신호가 독립적이므로 결과가 유지된다고 가정하기 때문에 그렇게하고 있습니까? 그러나 결과는 공동 분포에 따라 다르므로 어떻게 상호 정보를 계산할 수 있습니까? 내가 잘못 이해했을 수도 있지만 설명을 부탁드립니다.
Rachel

나는 행복 할 것입니다-비록 시간을 갖기 전에 조금만있을 것입니다 :).
yep

@sydeulissie 감사합니다. 공동 분포에 대한 지식이 있다고 생각하지 않는 답변을 원합니다.
Rachel

3

위에서 언급 한 바와 같이, 신호 3과 5는 모두 매우 상관 관계가 있고 유사한주기를 갖는 것으로 보인다.

소스 중 하나를 왼쪽 또는 오른쪽으로 이동하고 다른 소스의 상단에 맞도록 진폭을 증가 또는 감소시킬 수 있다면 두 신호가 상관되어 있다고 생각할 수 있습니다. 우리는 소스의 주파수를 변경하지 않고 단지 위상과 진폭 이동을 수행하고 있습니다.

위의 경우 소스 3을 이동하여 피크가 소스 5와 일치하도록 할 수 있습니다. 이는 독립 가정으로 인해 ICA를 사용할 때 소스 추출을 망칠 것입니다.

참고 : 위 개념의 좋은 예는 두 개의 정현파를 생각하는 것입니다. 이들은 모두 결정 론적입니다. 둘 다 동일한 빈도 (상이 다른 단계 일지라도)이면 완벽하게 상관되며 ICA는 이들을 분리 할 수 ​​없습니다. 대신에 서로 다른 정수 배수가 아닌 다른 주파수를 갖는 경우, 독립적 이며 분리 될 수 있습니다.

다음은이 코드를 직접 확인할 수있는 Matlab 코드입니다.

%Sine waves of equal frequency
X = 1:1000;
Y(1,:) = sin(2*pi*X*10/1000);
Y(2,:) = sin(1+2*pi*X*10/1000);

figure
subplot(3,2,1)
plot(Y(1,:))
title('Initial Source 1')
subplot(3,2,2)
plot(Y(2,:))
title('Initial Source 2')
A = [1, 2; 4, -1];
Y = A*Y;
subplot(3,2,3)
plot(Y(1,:))
title('Signal 1')
subplot(3,2,4)
plot(Y(2,:))
title('Signal 2')

Z = fastica(Y);

subplot(3,2,5)
plot(Z(1,:))
title('Source 1')
subplot(3,2,6)
plot(Z(2,:))
title('Source 2')

%Sine waves of different frequency
X = 1:1000;
Y(1,:) = sin(2*pi*X*10/1000);
Y(2,:) = sin(1+2*pi*X*8/1000);

figure
subplot(3,2,1)
plot(Y(1,:))
title('Initial Source 1')
subplot(3,2,2)
plot(Y(2,:))
title('Initial Source 2')
A = [1, 2; 4, -1];
Y = A*Y;
subplot(3,2,3)
plot(Y(1,:))
title('Signal 1')
subplot(3,2,4)
plot(Y(2,:))
title('Signal 2')

Z = fastica(Y);

subplot(3,2,5)
plot(Z(1,:))
title('Source 1')
subplot(3,2,6)
plot(Z(2,:))
title('Source 2')

동일한 주파수의 웨이브의 경우 ICA는 입력 신호 만 반환하지만 다른 주파수의 경우 원래 소스를 반환합니다.


2

레이첼,

내 연구에서 지금까지 ' Ci-Squared Test For Independence ' 를 찾을 수 있었지만 현재 어떻게 작동하는지 잘 모르겠지만 살펴볼 가치가 있습니다.


카이 제곱 테스트를 수행하는 방법을 설명하는이 두 개의 자습서 ( ling.upenn.edu/~clight/chisquared.htm & math.hws.edu/javamath/ryan/ChiSquare.html)를 찾았습니다 . 그러나 범주 형 데이터에 대해서만 테스트를 수행 할 수 있습니다. 이것이 우리의 신호 관측에 적용될 수 있는지 모르겠습니다 ..
Rachel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.