ICA - статистическая независимость и собственные значения ковариационной матрицы - PullRequest
5 голосов
/ 21 февраля 2012

В настоящее время я создаю различные сигналы, используя Matlab, смешиваю их, умножая их на матрицу микширования A, а затем пытаюсь вернуть исходные сигналы, используя FastICA .

Пока что восстановленные сигналы действительно плохи по сравнению с исходными, что было не так, как я ожидал.

Я пытаюсь понять, делаю ли я что-то не так. Я генерирую следующие сигналы: (Амплитуды находятся в диапазоне [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

Одним из условий успеха 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. Еще раз спасибо.

РЕДАКТИРОВАТЬ - У меня есть 500 выборок каждого сигнала в диапазоне [0,2, 100] с шагом 0,2, т. Е. x = 0:0.1:100.

РЕДАКТИРОВАТЬ - Учитывая модель ICA: X = As + n (сейчас я не добавляю шума), но я имею в виду собственный спектр транспонирования X, то есть eig(cov(X')).

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Ваши сигналы коррелированы (не независимы). Сразу же, пилообразная пила и синус одинаковы. Скажи мне ценность одного, я скажу тебе ценность другого, идеальная корреляция.

Если вы измените период одного из них, это сделает его более независимым.

Также S1 и S2 вроде как коррелируют.

Что касается собственных значений, прежде всего ваши сигналы не являются независимыми (см. Выше).

Во-вторых, ваша матрица фильтра А также не очень хорошо подготовлена, что еще больше расширяет ваши собственные значения.

Даже если бы вы передавали пять полностью независимых (iid, yada yada) сигналов, ковариация была бы:

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

Собственные значения этого:

eig(A*A')
ans =

   0.000167972216475
   0.025688510850262
   0.035666735304024
   0.148813869149738
   1.042451912479502

Таким образом, вы действительно фильтруете / разбиваете все сигналы на одну базовую функцию / степень свободы, и, конечно, их будет трудно восстановить, каким бы методом вы ни пользовались.

0 голосов
/ 21 февраля 2012

Чтобы определить, являются ли сигналы взаимно независимыми, вы можете взглянуть на методы, описанные здесь В общем случае две случайные величины являются независимыми, если они ортогональны. Это означает, что: E {s1 * s2} = 0 Это означает, что ожидание случайной величины s1, умноженной на случайную величину s2, равно нулю. Это условие ортогональности чрезвычайно важно в статистике и вероятности и проявляется везде. К сожалению, это относится к 2 переменным одновременно. Есть многофакторные методы, но я бы не рекомендовал ни одну из них. Еще одна ссылка, которую я выкопал, была эта одна , не знаю, какое у вас заявление, но эта бумага очень хорошо сделана.

Когда я вычисляю ковариационную матрицу, я получаю:

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

С собственными векторами, V и значениями 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

Вот мой код:

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

Дайте мне знать, смогу ли я чем-нибудь помочь, или я неправильно понял.

РЕДАКТИРОВАТЬ Правильно отнесены к собственным значениям и векторам, используется код интервала выборки 0,2, добавлен код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...