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 .
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 las siguientes:
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
Una condición para que ICA tenga éxito es que, como máximo, 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.
Todo lo que sé es que esto significa que, dadas dos señales A y B, conocer una señal no proporciona 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: ¿son mis señales estadísticamente independientes? ¿Hay alguna forma de determinar esto? Quizás alguna propiedad que debe ser observada?
Otra cosa que he notado es que cuando calculo los valores propios de la matriz de covarianza (calculada para la matriz que contiene las señales mixtas), el espectro propio parece mostrar que solo hay un componente principal (principal) . ¿Qué significa esto realmente? ¿No debería haber 5, ya que tengo 5 (supuestamente) señales independientes?
Por ejemplo, cuando se usa 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
(¡solo 4!)
Cuando se utiliza la matriz de identidad como la matriz de mezcla (es decir, las señales mixtas son los mismos que los originales), el eigenspectrum 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 tu ayuda.
Pido disculpas si las respuestas a mis preguntas son dolorosamente obvias, pero realmente soy nuevo en estadísticas, ICA y Matlab. Gracias de nuevo.
EDITAR
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.
Además, dado el modelo ICA: X = As + n (no estoy agregando ningún ruido en este momento), me estoy refiriendo al espectro propio de la transposición de X, es decir, eig (cov (X ')).
ACTUALIZAR
Como se sugiere (consulte los comentarios), probé FastICA con solo 2 señales. Los resultados fueron bastante buenos (ver foto abajo). La matriz de mezcla utilizada fue A = [0.75 0.25; 0.25 0.75]
. Sin embargo, el espectro propio 0.1657 0.7732
todavía mostraba solo un componente principal principal.
Por lo tanto, mi pregunta se reduce a lo siguiente: ¿Qué función / ecuación / propiedad puedo usar para verificar si varios vectores de señal son estadísticamente independientes?
fuente
Respuestas:
Las señales 3 y 5 parecen estar bastante correlacionadas: comparten su primer armónico. Si me dieran dos mezclas de esas, no podría separarlas, estaría tentado a poner el armónico común como una señal y los armónicos más altos como una segunda señal. ¡Y estaría equivocado! Esto podría explicar el valor propio que falta.
Las señales 1 y 2 tampoco se ven independientes.
Un "control de cordura" rápido y sucio para la independencia de dos series es hacer un diagrama (x, y) de una señal contra la otra:
y luego hacer el mismo diagrama (x, y) con una señal mezclada:
Si las dos parcelas tienen un aspecto diferente, sus señales no son independientes. En términos más generales, si la gráfica (x, y) de los datos muestra "características", disimetrías, etc., es un mal presagio.
Las pruebas adecuadas de independencia (y esas son las funciones objetivas utilizadas en el ciclo de optimización ICA) incluyen, por ejemplo, información mutua.
ICA se está recuperando las señales más independientes, una mezcla lineal de las cuales produce sus datos de entrada . Funcionará como un método de separación de señal y recuperará las señales originales solo si esas eran máximamente independientes de acuerdo con el criterio de optimización utilizado en su implementación de ICA.
fuente
No soy un experto en ICA, pero puedo contarles un poco sobre la independencia.
Como algunos de los comentarios han mencionado, la independencia estadística entre dos variables aleatorias puede interpretarse aproximadamente como "la cantidad de información que la observación de una variable proporciona sobre otra".
Aquí hay un código matlab que generará dos señales independientes de una distribución conjunta construida, y dos de una distribución conjunta no independiente, y luego calculará la información mutua de las juntas.
La función "computeMIplugin.m" es una función simple que escribí que calcula la información mutua usando la fórmula de suma anterior.
Nuevamente, esto supone que tiene una buena estimación de la distribución conjunta (junto con otros supuestos desenfadados), pero debería ser útil como regla general.
fuente
Como se mencionó anteriormente, ambas señales 3 y 5 parecen estar bastante correlacionadas y tienen un período similar.
Podemos pensar en dos señales correlacionadas si podemos desplazar una de las fuentes hacia la izquierda o hacia la derecha y aumentar o disminuir su amplitud para que se ajuste a la otra fuente. Tenga en cuenta que no estamos cambiando la frecuencia de la fuente, solo estamos realizando un cambio de fase y amplitud.
En el caso anterior, podemos cambiar la fuente 3 para que sus picos coincidan con la fuente 5. Este es el tipo de cosa que afectará la extracción de la fuente cuando se usa ICA debido al supuesto de independencia.
Nota : Una buena ilustración del concepto anterior es pensar en dos ondas sinusoidales. Ambos son completamente deterministas. Si ambos tienen la misma frecuencia (incluso con una fase diferente), entonces están perfectamente correlacionados e ICA no podrá separarlos. Si, en cambio, tienen diferentes frecuencias (que no son múltiplos enteros entre sí), entonces son independientes y pueden separarse.
A continuación se muestra un código de Matlab para que pueda verlo usted mismo.
Tenga en cuenta que para las ondas de la misma frecuencia, ICA solo devuelve las señales de entrada, pero para diferentes frecuencias devuelve las fuentes originales.
fuente
Rachel
De mi investigación, hasta ahora he podido encontrar algo llamado ' Prueba de independencia de Chi-cuadrado ', pero no estoy seguro de cómo funciona en este momento, pero podría valer la pena echarle un vistazo.
fuente