2012-02-21 19 views
5

Actualmente estoy creando diferentes señales usando Matlab, mezclándolas multiplicándolas por una matriz de mezcla A, y luego tratando de recuperar las señales originales usando FastICA.ICA - Independencia estadística y autovalores de la matriz de covarianza

Hasta ahora, las señales recuperadas son realmente malas en comparación con las originales, que no era lo que esperaba.

Estoy tratando de ver si estoy haciendo algo mal. Las señales que estoy generando son los siguientes: (. Amplitudes están en el intervalo [0,1])

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 

Original Signals

Una condición para ICA para tener éxito es que a lo sumo una señal es gaussiana , y he observado esto en mi generación de señal.

Sin embargo, otra condición es que todas las señales son estadísticamente independientes.

Lo único que sé es que esto significa que, dadas dos señales A & B, sabiendo una señal no da ninguna información con respecto a la otra, es decir: P (A | B) = P (A) donde P es la probabilidad.

Ahora mi pregunta es esta: ¿Mis señales son estadísticamente independientes? ¿Hay alguna manera de que pueda determinar esto? Tal vez alguna propiedad que debe ser observada?

Otra cosa que he notado es que cuando puedo calcular los valores propios de la matriz de covarianza (calculado para la matriz que contiene las señales mixtas), la eigenspectrum parece demostrar que sólo hay una (principal) de componentes principales. ¿Qué significa esto realmente? ¿No debería haber 5, ya que tengo 5 señales (supuestamente) independientes?

Por ejemplo, cuando se utiliza la siguiente matriz de mezcla:

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 

Los valores propios son: 0.0000 0.0005 0.0022 0.0042 0.0345 (Sólo 4)

Cuando se utiliza la matriz de identidad como la matriz de mezcla (es decir, las señales mixtas son al igual que los originales), el espectro propio es: 0.0103 0.0199 0.0330 0.0811 0.1762. Todavía hay un valor mucho más grande que el resto ..

Gracias por su ayuda.

Me disculpo si las respuestas a mis preguntas son dolorosamente obvias, pero soy realmente nuevo en estadísticas, ICA y Matlab. Gracias de nuevo.

EDIT - Tengo 500 muestras de cada señal, en el rango [0.2, 100], en pasos de 0.2, es decir, x = 0:0.1:100.

EDITAR - Dado el modelo ICA: X = As + n (no estoy añadiendo cualquier ruido en el momento), pero me refiero a la eigenspectrum de la transpuesta de X, es decir eig(cov(X')).

Respuesta

0

Para encontrar si las señales son mutuamente independientes, puede consultar las técnicas descritas here En general, dos variables aleatorias son independientes si son ortogonales.Esto significa que: E {s1 * s2} = 0 Significa que la expectativa de la variable aleatoria s1 multiplicada por la variable aleatoria s2 es cero. Esta condición de ortogonalidad es extremadamente importante en estadística y probabilidad y se muestra en todas partes. Desafortunadamente se aplica a 2 variables a la vez. Hay técnicas multivariables, pero ninguna que me gustaría recomendar. Otro enlace que desenterré fue este one, no estoy seguro de cuál es su aplicación, pero ese documento es muy bien hecho.

Cuando puedo calcular la matriz de covarianza me sale:

cov(A) = 
0.0619 -0.0284 -0.0002 -0.0028 -0.0010 
-0.0284 0.0393 0.0049 0.0007 -0.0026 
-0.0002 0.0049 0.1259 0.0001 -0.0682 
-0.0028 0.0007 0.0001 0.0099 -0.0012 
-0.0010 -0.0026 -0.0682 -0.0012 0.0831 

Con vectores propios, V y valores D:

[V,D] = eig(cov(A)) 

V = 

-0.0871 0.5534 0.0268 -0.8279 0.0063 
-0.0592 0.8264 -0.0007 0.5584 -0.0415 
-0.0166 -0.0352 0.5914 -0.0087 -0.8054 
-0.9937 -0.0973 -0.0400 0.0382 -0.0050 
-0.0343 0.0033 0.8050 0.0364 0.5912 
D = 
0.0097   0   0   0   0 
    0 0.0200   0   0   0 
    0   0 0.0330   0   0 
    0   0   0 0.0812   0 
    0   0   0   0 0.1762 

Aquí está mi código:

x = transpose(0.2:0.2:100); 
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(length(x), 1); % gaussian 
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth 
A = [s1 s2 s3 s4 s5]; 
cov(A) 
[V,D] = eig(cov(A)) 

Avísame si Puedo ayudar más, o si no entendí bien.

EDIT Correctamente referido a valores propios y vectores, utilizado 0.2 intervalo de muestreo código agregado.

+0

Utilicé x = 0.2: 0.2: 100 (Acabo de agregar este detalle a mi pregunta original, gracias por señalarlo). ¿Cómo llegó a esa matriz de covarianza? La matriz de covarianza para la matriz de mezcla A que publiqué en la pregunta es diferente. Además, al usar eig (cov (A)) se obtienen los valores propios, no los vectores propios, de la matriz. Aparte de esto, no me estaba refiriendo a los valores propios de la matriz de covarianza de A, sino a los valores propios de la matriz de covarianza de las señales mixtas. Agregaré esto a mi pregunta para hacerlo más claro. – Rachel

+0

Ah, y gracias por el enlace, pero ¿pueden explicarlo más? Como dije, soy un novato en estadísticas. Me gustaría saber si hay un método general que se usa para verificar si un número de señales son estadísticamente independientes o no. – Rachel

+0

Gracias por su comentario, sin embargo, realmente no me ha llegado a ninguna parte. Mi problema no era calcular los valores propios, sino más bien por qué los valores propios son lo que son. Puedes ver que uno de los valores propios es relativamente grande.Creo que para las señales estadísticamente independientes, los valores propios serían más o menos iguales, y me gustaría saber si esto es cierto. Además, todavía no he encontrado una manera concreta de verificar si mis señales son independientes o no. – Rachel

1

Sus señales están correlacionadas (no son independientes). Desde el principio, el diente de sierra y el seno son el mismo período. Dime el valor de uno. Te diré el valor de la otra correlación perfecta.

Si cambia el período de uno de ellos que los hará más independientes.

También S1 y S2 están un poco correlacionados.

En cuanto a los valores propios, en primer lugar, sus señales no son independientes (consulte más arriba).

En segundo lugar, su matriz de filtro A tampoco está bien acondicionada, extendiendo aún más sus valores propios.

Incluso si usted fuera a la tubería en cinco totalmente independientes (IID, bla, bla) señala la covarianza sería:

E[ A y y' A' ] = E[ A I A' ] = A A' 

Los valores propios de los que son:

eig(A*A') 
ans = 

    0.000167972216475 
    0.025688510850262 
    0.035666735304024 
    0.148813869149738 
    1.042451912479502 

Así que eres realmente filtra/aplasta todas las señales en una función básica/grado de libertad y, por supuesto, será difícil recuperarlas, sea cual sea el método que utilice.

+0

Gracias por su comentario @Nate. Tengo algunas preguntas, si no te importa. En primer lugar, ¿qué quiere decir con "cinco señales totalmente independientes (iid, yada yada)". ¿Cómo sabría si las señales son realmente independientes? ¿Y qué es (iid, yada, yada)? – Rachel

Cuestiones relacionadas