Использование FastICA в Matlab для разделения смеси матриц Гаусса и Пуассона

Мне нужно сгенерировать матрицу с распределением Гаусса (со значениями, разбросанными в основном от -5 до 5), матрицу Пуассона, смешать их и передать в качестве входных данных в Matlab FastICA.

Я новичок в Matlab, дистрибутивах и ICA, поэтому несколько указателей действительно помогут. Я очень старался, но не знаю, на правильном ли я пути.

Чтобы сгенерировать матрицы Гаусса и Пуассона, я создал два массива:

s2 = poissrnd(2, 1, 40000); %Poisson distribution with lambda 2
s1 = rand(size(s2)) * 10 - 5; %Gaussian distribution and values ranging from -5 to 5

Затем я использую функцию reshape для создания двух матриц 200x200. При использовании изображения я получаю следующие изображения:

  введите описание изображения здесь

Мой первый вопрос: это правильный способ создания матриц Гаусса и Пуассона в Matlab? Или есть какие-то встроенные функции, которые фактически генерируют матрицы, вместо того, чтобы создавать и изменять массивы?

Теперь вторая проблема: использование FastICA.

Ссылаясь на очень хороший ответ по адресу: ICA (независимый анализ компонентов) fast- алгоритм с фиксированной точкой, в нем упоминается, что FastICA нужен каждый сигнал подряд.

Поэтому я генерирую свою матрицу сигналов с помощью:

S(1,:) = s1; %row 1
S(2,:) = s2; %row 2

Затем я генерирую матрицу микширования, добавляю немного шума и передаю полученную матрицу в качестве входных данных для функции fastica ().

У меня вопрос: можно ли передавать 2D-данные напрямую в FastICA? Что, если у вас есть изображение с множеством смешанных сигналов, и вы хотите передать его ICA, чтобы он смог найти независимые компоненты?

Ссылка на учебник, объясняющий, как использовать FastICA на разных входах, была бы очень полезна.

Заранее благодарим всех, кто читает этот пост и пытается помочь. И извините за длинный вопрос, я хотел убедиться, что он хорошо понят!


person Rachel    schedule 17.12.2011    source источник


Ответы (1)


Как создать смешанный сигнал? FastICA попытается оценить матрицу, которую вы использовали для смешивания (исходные компоненты). Пока у вас есть достаточное количество измерений для ваших наблюдений (сигналов), FastICA может расшифровать любое количество смешанных сигналов. Видите ли, в ответе, на который вы связались, четыре сигнала смешиваются и разлагаются.

Данные, которые вы помещаете в FastICA, уже являются 2D (m x n), только что преобразованными в другой размер (1 x mn).

person Tobold    schedule 17.12.2011
comment
Я генерирую случайную матрицу 2x2 (A), а затем использую X = A * S для смешивания сигналов. Затем я использую команду ica = fastica (X) и получаю матрицу 2 * 40000. Если я правильно понял, каждая строка матрицы ica должна соответствовать одной из исходных матриц. Это верно? - person Rachel; 17.12.2011
comment
Я думаю, что я неправильно смешал сигнал. На самом деле мне нужна матрица 200x200, которая представляет собой смесь матриц Гаусса и Пуассона. Я создал такую ​​матрицу с помощью команды M = rand (200) * s1M + rand (200) * s2M; (где s1M и s2M - исходные матрицы). Однако, когда я использую ica = fastica (M), я получаю матрицу 199 * 200 и не знаю, как получить от нее исходные сигналы. - person Rachel; 17.12.2011
comment
Нет. Ваш первый подход был правильным (матрица 2x2). M = rand (200) * s1M + rand (200) * s2M; это не способ сделать это. Вы должны понимать, как работает ICA. Если вы хотите успешно разделить два сигнала, вам необходимо провести как минимум два измерения. Вы искусственно производите эти измерения, вычисляя X = A * S. Результат, который вы получаете от ICA (2 * 40000), должен быть тем, что вы хотели (измените форму строк на 200 x 200). Если вас интересует только оценка A, используйте [A, ~] = FASTICA (X). - person Tobold; 17.12.2011
comment
О, хорошо, теперь я понял! Потому что нам действительно нужны два «смешанных» изображения, а не одно. И последний вопрос: правильно ли я получаю изображения Гаусса и Пуассона? Создание массива и его изменение? Или в Matlab есть другой способ? - person Rachel; 17.12.2011
comment
Да, вам нужны два измерения вашего изображения, которые вы помещаете в векторную форму в ICA. - person Tobold; 17.12.2011
comment
Хорошо, спасибо большое, теперь я понимаю. Правильно ли я генерирую матрицы Гаусса и Пуассона? - person Rachel; 17.12.2011
comment
По поводу раздач: думаю по пуассону вы правильно делаете. Однако для гауссовского языка использование rand неверно, поскольку предполагает равномерное распределение (не нормальное). Таким образом, вам нужно будет учитывать среднее значение и дисперсию для создания гауссовского шума (sqrt (variance) * rand () + mean в псевдокоде) - person Tobold; 17.12.2011
comment
Я только что видел, что вы используете randn, основанный на стандартном нормальном распределении. Так что вы правы, извините. - person Tobold; 17.12.2011
comment
На самом деле нет, я не прав, потому что использую rand. Что я знаю о гауссовых распределениях, так это то, что подавляющее большинство значений будет в пределах 3 стандартных отклонений для среднего. Как теперь рассчитать дисперсию, если я хочу, чтобы (большинство) мои значения находились в диапазоне [-5, 5]? Я не думаю, что sqrt (10) * rand () - это то, что я хочу, потому что, когда я попробовал, у меня не было значений -ve, а максимальное значение в матрице было 3,1623. - person Rachel; 17.12.2011
comment
Предположим, что среднее значение равно 0. randn () * 5: 68% значений в [-5,5], randn () * 10: 95% в [-5,5], randn () * 15: 99,7% в [-5,5]. - person Tobold; 17.12.2011
comment
На самом деле нет, я думал, что это сработает, но не вышло. Когда я выполняю randn () * 15, большинство значений выходит за пределы диапазона [-5, 5]. - person Rachel; 17.12.2011
comment
Да, извините, вы правы. 3 * sigma должно быть равно 5. Итак, 5/3 * randn () дает 99,7% в [-5,5]. - person Tobold; 17.12.2011
comment
Да, это то, что я хочу !! Большое спасибо за вашу помощь и терпение. Мне было трудно изучить и найти очень наглядные примеры, особенно для использования FastICA. Спасибо еще раз. - person Rachel; 17.12.2011