ICA - Kovaryans Matrisinin İstatistiksel Bağımsızlığı ve Özdeğerleri


14

Şu anda Matlab'ı kullanarak farklı sinyaller oluşturuyorum, bunları bir karıştırma matrisi A ile çarparak karıştırıyorum ve daha sonra FastICA kullanarak orijinal sinyalleri geri almaya çalışıyorum .

Şimdiye kadar, kurtarılan sinyaller orijinal sinyallerle karşılaştırıldığında gerçekten kötü, bu beklediğim değildi.

Yanlış bir şey yapıp yapmadığımı görmeye çalışıyorum. Ürettiğim sinyaller şunlardır:

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

Orijinal Sinyaller

ICA'nın başarılı olması için bir koşul, en fazla bir sinyalin Gauss olması ve bunu sinyal üretimimde gözlemledim.

Bununla birlikte, başka bir koşul, tüm sinyallerin istatistiksel olarak bağımsız olmasıdır.

Tek bildiğim, bunun, iki A ve B sinyali verildiğinde, bir sinyalin bilinmesi diğeriyle ilgili herhangi bir bilgi vermediği anlamına gelir, yani: P (A | B) = P (A), burada P olasılıktır .

Şimdi sorum şu: Sinyallerim istatistiksel olarak bağımsız mı? Bunu belirlememin bir yolu var mı? Belki de gözlemlenmesi gereken bazı özellikler?

Fark ettiğim başka bir şey, kovaryans matrisinin (karışık sinyalleri içeren matris için hesaplanan) özdeğerlerini hesapladığımda , eigenspektrumun sadece bir (ana) ana bileşen olduğunu gösteriyor gibi görünüyor . Bu gerçekten ne anlama geliyor? 5 (sözde) bağımsız sinyale sahip olduğum için 5 olmamalı mı?

Örneğin, aşağıdaki karıştırma matrisini kullanırken:

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

Özdeğerler: 0.0000 0.0005 0.0022 0.0042 0.0345(sadece 4!)

Karıştırma matris olarak kimlik matrisi kullanıldığında (yani, karışık sinyalleri orijinal olanlar ile aynıdır), eigenspectrum olup: 0.0103 0.0199 0.0330 0.0811 0.1762. Hala diğerlerinden çok daha büyük bir değer var.

Yardımın için teşekkürler.

Sorularımın cevapları acı verici bir şekilde açıksa özür dilerim, ancak istatistikler, ICA ve Matlab için gerçekten yeniyim. Tekrar teşekkürler.

DÜZENLE

Her sinyalden [0.2, 100] aralığında 0.2'lik adımlarla 500 örneğim var, yani x = 0: 0.1: 100.

Ayrıca, ICA Modeli göz önüne alındığında: X = As + n (şu anda herhangi bir gürültü eklemiyorum), X'in, yani eig (cov (X ')) devri eigenspektrumundan bahsediyorum.

GÜNCELLEME

Önerildiği gibi (yorumlara bakın), FastICA'yı sadece 2 sinyal üzerinde denedim . Sonuçlar oldukça iyiydi (aşağıdaki resme bakınız). Kullanılan karıştırma matrisi idi A = [0.75 0.25; 0.25 0.75]. Bununla birlikte, eigenspectrum 0.1657 0.7732hala sadece bir ana ana bileşen gösterdi.

Dolayısıyla sorum şu şekilde kayboluyor: Bir dizi sinyal vektörünün istatistiksel olarak bağımsız olup olmadığını kontrol etmek için hangi işlevi / denklemi / özelliği kullanabilirim?

Sinüs ve Gauss - FastICA


1
Mükemmel soru. Yani, iki sinyal burada (bağımsız olup olmadıklarını öğrenmek nasıl hakkında istedi dsp.stackexchange.com/questions/1242/... ) ama çok uzakta bununla alamadım. :-) Ayrıca ICA için yeniyim ama biraz ışık tutabilirim.
Spacey

@Mohammad Hala bu soruya bir cevapla ilgileniyor musunuz? İlgi çekmek için memnuniyetle bir ödül koyacağım.
Phonon

@Mohammad Sorunu iptal ettim. Umarım iyi bir cevap alırsınız, bu gerçekten benimkiyle ilgilidir. Bu konudaki yorumları okudum ve anlamadığım birçok istatistik var. İki sinyalin bağımsız olup olmadığını belirlemek için kesin bir yol bulmayı başardınız mı?
Rachel

@Rachel Henüz değil, ama biraz daha araştıracağım ve size bildireceğim. Bu çok önemli bir kavram, sanırım genellikle ne yazık ki sırlanmış.
Spacey

Teşekkürler @Mohammad. Katılıyorum. Bağımsız sinyaller E (s1, s2) = E (s1) x E (s2) özelliğini gözlemler, ancak gerçek sinyaller için gerçekte nasıl hesaplayacağımı bilmiyorum.
Rachel

Yanıtlar:


8

3 ve 5 numaralı sinyaller oldukça ilişkili görünmektedir - ilk harmoniklerini paylaşırlar. Eğer bunlardan iki karışım verildiysem, bunları ayıramazdım, ortak harmoniği bir sinyal olarak ve daha yüksek harmonikleri ikinci bir sinyal olarak koymaya cazip olurdu. Ve yanılırım! Bu, eksik öz değeri açıklayabilir.

Sinyal 1 ve 2 de bağımsız görünmüyor.

İki serinin bağımsızlığı için hızlı ve kirli bir "sağlık kontrolü", bir sinyalin diğerine karşı (x, y) grafiğini yapmaktır:

plot (sig3, sig5)

ve sonra bir sinyal karıştırılarak aynı (x, y) grafiğini yapmak için:

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

Eğer iki parsel farklı bir görünüme sahipse, sinyalleriniz bağımsız değildir. Daha genel olarak, verilerin (x, y) grafiği "özellikler", disimetriler vb. Gösteriyorsa, bu kötü bir alamettir.

Bağımsızlık için uygun testler (ve bunlar ICA optimizasyon döngüsünde kullanılan nesnel işlevlerdir), örneğin karşılıklı bilgileri içerir.

ICA, lineer karıştırmanın giriş verilerinizi veren en bağımsız sinyalleri geri kazanmaktadır . Bir sinyal ayırma yöntemi olarak çalışır ve orijinal sinyalleri yalnızca ICA uygulamanızda kullanılan optimizasyon ölçütüne göre maksimum bağımsız olduklarında kurtarır.


1
Soru: Onun durumunda 5 sinyalin aslında hepsi bağımsız olsaydı, o zaman HİÇBİR ana bileşenin doğru olmasını beklemez miydik? (Başka bir deyişle, tüm özdeğerler biraz aynı olacaktır). Geometrik olarak, 5 boyutta bir guassian 'bulutu' olurdu, katılıyor musunuz?
Spacey

Ayrıca, iki sinüzoidin bir karışımdan çıkarılması hakkında ICA hakkında bir yazarla temasa geçtim ve aslında ICA ile yapılabileceğini söyledi. Bu, sinyal 3 ve 5 ile ilgili söylediklerinize dayanarak beni biraz karıştırıyor çünkü (size katılıyorum) birbirleriyle ilişkili görünüyorlar.
Spacey

@pichenettes Bu grafikleri önerdiğiniz gibi planladım - ve grafikler gerçekten farklı bir görünüme sahip. Ne yazık ki hala bağımsızlık testinin nasıl yapıldığına bağlı kaldım. FastICA'nın performansını değerlendirebilmem için istatistiksel olarak bağımsız sinyaller üretmenin bir yoluna ihtiyacım var.
Rachel

x1[n]x2[n]

@Mohammad Kendi sesimi kaydetmedim, ancak Sinusodial ve Gauss sinyallerinin bir karışımında FastICA'yı kullanmayı denedim. Bağımsız olduklarını DÜŞÜNÜYORUM .. FastICA oldukça iyi bir performans sergiledi ama özvektör hala tuhaftı. Sonuçları göstermek için sorumu güncelleyeceğim.
Rachel

7

ICA konusunda uzman değilim, ama size biraz bağımsızlıktan bahsedebilirim.

Yorumlardan bazılarının belirttiği gibi, iki rastgele değişken arasındaki istatistiksel bağımsızlık kabaca "bir değişkeni gözlemlemenin diğeri hakkında verdiği bilgi miktarı" olarak yorumlanabilir.

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

p(x,y)

XYXYp(X=i,Y=j)=pijP(X=i)=piP(Y=j)=pj

I(X,Y)=ijpijlogpijpipj

Burada, yapılandırılmış bir eklem dağıtımından iki bağımsız sinyal ve bağımsız olmayan bir eklem dağıtımından iki bağımsız sinyal üretecek ve daha sonra eklemlerin karşılıklı bilgilerini hesaplayacak bazı matlab kodu.

"ComputeMIplugin.m" işlevi, yukarıdaki toplama formülünü kullanarak karşılıklı bilgileri hesaplayan basit bir işlevdir.

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')

Yine, bu, ortak dağılım hakkında iyi bir tahmininiz olduğunu varsayar (diğer blithe varsayımlarıyla birlikte), ancak genel bir kural olarak yararlı olmalıdır.


Bu iyi bir cevap sydeulissie teşekkürler, biraz daha derinlemesine bakmak zorunda kalacağım.
Spacey

Her şeyden önce, uzun cevap için teşekkür ederim, çok bilgilendiriciydi. Birkaç sorum var. Ki kare testi kullanarak bahsettiniz. Buna baktım ve gerçekten ilginç görünüyor, ama sinyallerde nasıl kullanabilirim? Yalnızca kategorik verilere uygulanamaz mı?
Rachel

Ayrıca, eklem dağılımını hesaplamak için Pj1 = P1 '* P2 kullanıyorsunuz, değil mi? Ancak teknik olarak bunun yapılamayacağına inanıyorum. Belki bunu yapıyorsunuz, çünkü orijinal sinyallerin bağımsız olduğunu varsayıyorsunuz ve sonuç böyle oluyor? Ama sonra karşılıklı bilgiyi nasıl hesaplayabilirsiniz - sonuç ortak dağıtımına bağlı olduğundan ..? Bir şeyi yanlış anlamış olabilirim, ama açıklama yapmak istiyorum, lütfen.
Rachel

Memnun olacağım - zaman bulamadan biraz da olsa :).
Evet

Teşekkürler @sydeulissie. Ortak dağıtım hakkında bilgim olduğunu varsaymayan bir cevap istiyorum, lütfen.
Rachel

3

Yukarıda belirtildiği gibi, her iki sinyal 3 ve 5 oldukça korelasyonlu ve benzer bir süreye sahiptir.

Kaynaklardan birini sola veya sağa kaydırabilir ve genliğini artırabilir ya da azaltabilir, böylece diğer kaynağın üstüne sığacak şekilde iki sinyalin birbiriyle ilişkili olduğunu düşünebiliriz. Kaynağın frekansını değiştirmediğimizi, sadece bir faz ve genlik kayması gerçekleştirdiğimizi unutmayın.

Yukarıdaki durumda, kaynak 3'ü tepe noktalarının kaynak 5 ile çakışması için kaydırabiliriz. Bu, bağımsızlık varsayımı nedeniyle ICA kullanılırken kaynak çıkarmayı bozacak bir şeydir.

Not : Yukarıdaki kavramın güzel bir örneği, iki sinüzoidal dalgayı düşünmektir. Bunlar tamamen belirleyicidir. Her ikisi de aynı frekansa sahipse (farklı fazda bile) o zaman mükemmel bir şekilde ilişkilidir ve ICA bunları ayıramaz. Bunun yerine farklı frekansları varsa (birbirinin tam sayı katları değildir), bağımsızdırlar ve ayrılabilirler.

Bunu kendiniz görmeniz için bazı Matlab kodu aşağıdadır

%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')

Aynı frekanstaki dalgalar için ICA'nın sadece giriş sinyallerini döndürdüğünü, ancak farklı frekanslar için orijinal kaynakları döndürdüğünü unutmayın.


2

Rachel

Araştırmamdan şimdiye kadar ' Chi-Squared Bağımsızlık Testi ' adlı bir şey bulabildim , ancak şu anda nasıl çalıştığından emin değilim, ama bir göz atmaya değer olabilir.


Chi-squared testinin nasıl yapılacağını açıklayan şu iki öğreticiyi buldum: ling.upenn.edu/~clight/chisquared.htm & math.hws.edu/javamath/ryan/ChiSquare.html . Bununla birlikte, test sadece kategorik veriler üzerinde gerçekleştirilebilir. Bunun sinyal gözlemlerimize uygulanıp uygulanamayacağını bilmiyorum ..
Rachel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.