Ich erstelle derzeit mit Matlab verschiedene Signale, mische sie, indem ich sie mit einer Mischmatrix A multipliziere, und versuche dann, die ursprünglichen Signale mit FastICA wiederzuerlangen .
Bisher sind die wiederhergestellten Signale im Vergleich zu den ursprünglichen Signalen wirklich schlecht, was nicht das war, was ich erwartet hatte.
Ich versuche zu sehen, ob ich etwas falsch mache. Die Signale, die ich generiere, sind die folgenden:
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
Eine Voraussetzung für den Erfolg von ICA ist, dass höchstens ein Signal Gauß ist, und das habe ich bei meiner Signalerzeugung beobachtet.
Eine andere Bedingung ist jedoch, dass alle Signale statistisch unabhängig sind.
Ich weiß nur, dass dies bedeutet, dass bei zwei Signalen A & B das Wissen um ein Signal keine Informationen bezüglich des anderen gibt, dh: P (A | B) = P (A) wobei P die Wahrscheinlichkeit ist .
Meine Frage ist nun: Sind meine Signale statistisch unabhängig? Kann ich das irgendwie feststellen? Vielleicht eine Eigenschaft, die beachtet werden muss?
Eine andere Sache, die mir aufgefallen ist, ist, dass wenn ich die Eigenwerte der Kovarianzmatrix (berechnet für die Matrix mit den gemischten Signalen) berechne, das Eigenspektrum zu zeigen scheint, dass es nur eine (Haupt-) Hauptkomponente gibt . Was heißt das eigentlich? Sollte es nicht 5 geben, da ich 5 (angeblich) unabhängige Signale habe?
Zum Beispiel bei Verwendung der folgenden Mischmatrix:
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
Die Eigenwerte sind: 0.0000 0.0005 0.0022 0.0042 0.0345
(nur 4!)
Wenn die Einheitsmatrix als Mischmatrix (dh die gemischten Signale die gleiche wie die Originale sind), ist das Eigenspektrum: 0.0103 0.0199 0.0330 0.0811 0.1762
. Es gibt immer noch einen Wert, der viel größer ist als der Rest.
Danke für deine Hilfe.
Ich entschuldige mich, wenn die Antworten auf meine Fragen schmerzlich offensichtlich sind, aber ich bin wirklich neu in Statistik, ICA und Matlab. Danke noch einmal.
BEARBEITEN
Ich habe 500 Abtastwerte von jedem Signal im Bereich [0,2, 100] in Schritten von 0,2, dh x = 0: 0,1: 100.
Unter Berücksichtigung des ICA-Modells: X = As + n (ich füge im Moment kein Rauschen hinzu) beziehe ich mich auch auf das Eigenspektrum der Transponierten von X, dh eig (cov (X ')).
AKTUALISIEREN
Wie vorgeschlagen (siehe Kommentare), habe ich FastICA auf nur 2 Signalen ausprobiert . Die Ergebnisse waren recht gut (siehe Bild unten). Die verwendete Mischmatrix war A = [0.75 0.25; 0.25 0.75]
. Das Eigenspektrum 0.1657 0.7732
zeigte jedoch nur eine Hauptkomponente.
Meine Frage beschränkt sich daher auf Folgendes: Mit welcher Funktion / Gleichung / Eigenschaft kann ich prüfen, ob eine Reihe von Signalvektoren statistisch unabhängig sind?
quelle
Antworten:
Die Signale 3 und 5 scheinen ziemlich korreliert zu sein - sie teilen ihre erste Harmonische. Wenn ich zwei Mischungen von diesen erhalten hätte, wäre ich nicht in der Lage, diese zu trennen. Ich wäre versucht, die gemeinsame Harmonische als ein Signal und die höheren Harmonischen als ein zweites Signal zu setzen. Und ich würde mich irren! Dies könnte den fehlenden Eigenwert erklären.
Die Signale 1 und 2 sehen auch nicht unabhängig aus.
Ein schneller und unsauberer "Sanity-Check" für die Unabhängigkeit zweier Serien besteht darin, ein (x, y) Diagramm eines Signals gegen das andere zu erstellen:
und dann das gleiche (x, y) Diagramm mit einem Signal zu machen, das gemischt wird:
Wenn die beiden Darstellungen unterschiedlich aussehen, sind Ihre Signale nicht unabhängig. Im Allgemeinen ist es ein schlechtes Omen, wenn die (x, y) -Darstellung der Daten "Merkmale", Disymmetrien usw. zeigt.
Geeignete Tests für die Unabhängigkeit (und dies sind die Zielfunktionen, die in der ICA-Optimierungsschleife verwendet werden) umfassen beispielsweise gegenseitige Informationen.
ICA stellt die unabhängigsten Signale wieder her, deren lineares Mischen Ihre Eingabedaten ergibt . Es funktioniert als Signaltrennungsmethode und stellt die ursprünglichen Signale nur dann wieder her, wenn diese gemäß dem in Ihrer ICA-Implementierung verwendeten Optimierungskriterium maximal unabhängig waren.
quelle
Ich bin kein Experte für ICA, aber ich kann Ihnen ein bisschen über Unabhängigkeit erzählen.
Wie in einigen Kommentaren erwähnt, kann die statistische Unabhängigkeit zwischen zwei Zufallsvariablen grob als "die Informationsmenge interpretiert werden, die die Beobachtung einer Variablen über eine andere ergibt".
Hier ist ein Matlab-Code, der zwei unabhängige Signale aus einer konstruierten Gelenkverteilung und zwei aus einer nicht unabhängigen Gelenkverteilung generiert und dann die gegenseitigen Informationen der Gelenke berechnet.
Die Funktion "computeMIplugin.m" ist eine einfache Funktion, die ich geschrieben habe und die die gegenseitigen Informationen unter Verwendung der obigen Summenformel berechnet.
Dies setzt wiederum voraus, dass Sie eine gute Schätzung der Gelenkverteilung haben (zusammen mit anderen guten Annahmen), aber dies sollte als Faustregel nützlich sein.
quelle
Wie oben erwähnt, scheinen beide Signale 3 und 5 ziemlich korreliert zu sein und eine ähnliche Periode aufzuweisen.
Wir können uns vorstellen, dass zwei Signale korreliert sind, wenn wir eine der Quellen nach links oder rechts verschieben und ihre Amplitude erhöhen oder verringern können, sodass sie auf die andere Quelle passt. Beachten Sie, dass wir die Frequenz der Quelle nicht ändern, sondern lediglich eine Phasen- und Amplitudenverschiebung durchführen.
Im obigen Fall können wir die Quelle 3 so verschieben, dass ihre Spitzen mit der Quelle 5 übereinstimmen. Dies ist die Art von Dingen, die die Quellenextraktion bei Verwendung von ICA aufgrund der Unabhängigkeitsannahme durcheinander bringen.
Hinweis : Eine schöne Illustration des obigen Konzepts ist die Betrachtung von zwei Sinuswellen. Diese sind beide vollständig deterministisch. Wenn beide dieselbe Frequenz haben (auch mit unterschiedlicher Phase), sind sie perfekt korreliert und ICA kann sie nicht trennen. Wenn sie stattdessen unterschiedliche Frequenzen haben (die keine ganzzahligen Vielfachen voneinander sind), sind sie unabhängig und können getrennt werden.
Nachfolgend finden Sie einen Matlab-Code, mit dem Sie sich selbst davon überzeugen können
Beachten Sie, dass ICA für Wellen derselben Frequenz nur die Eingangssignale zurückgibt, für verschiedene Frequenzen jedoch die ursprünglichen Quellen.
quelle
Rachel,
Aufgrund meiner Recherchen konnte ich bisher etwas namens " Chi-Quadrat-Test für Unabhängigkeit " finden, aber ich bin nicht sicher, wie es im Moment funktioniert, aber es könnte einen Blick wert sein.
quelle