2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Анализ главных компонент и SVD
Сообщение23.06.2010, 09:39 


23/11/09
130
Здравствуйте уважаемые обитатели dxdy!
Реализовал метод АГК в MatCAD'e, все хорошо, сигналы разлагаются на ура, все правильно работает! Стал переносить программу на C#, тоже все казалось бы хорошо, но вот не задача! Главные компоненты получаются какие-то правильными, а какие-то инвертированными относительно горизонтальной оси координат! К примеру сумма нескольких первых главных компонент показывает непонятную кривую, оно и ясно из-за неправильной ориентации некоторых компонент. Стал разбираться и выяснил что SVD в MatCAD'е вычисляется такое же как и дают библиотеки, но!!! с разницей в некоторых знаках!!! Из-за некоторых "неправильных" знаков и некоторые компоненты инвертируются!

Уважаемые гуру, можно ли получив, с помощью библиотеки, SVD с "неправильными" знаками, как то их поправить чтобы они стали правильными?

Я пользовался следующими либами:
Math.NET Project Iridium
http://www.mathdotnet.com/
AlgLib
http://alglib.sources.ru/
Можно наверное и дальше пробовать перебирать либы, но не думаю что я получу желаемый результат.

Так же на форуме:
post242572.html?hilit=%20%D1%81%D0%B8%D0%BD%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5#p242572
Говорят о согласовании $A\vec v_k=s_k \vec u_k$, но я так понимаю это только чтобы само SVD собиралось правильно в исходную матрицу. Надо думать это мне не поможет.

И еще вопрос в нагрузку :-)
В либе AlgLib есть функция pcabuildbasis, вычисляющая базис PCA (Principal components analysis). Что это за базис?!? Как им пользоваться? Почему это вектор (S2) и матрица (V), тогда как в АГК это 2ве матрици (Матрица главных компонент, она же левые сингулярные вектора SVD разложения корреляционной матрици и генкелева, нормированная и центрированная исходной выборки, с помощью которых можно выбирать главные компоненты и восстанавливать по ним исходную выборку)?
Я знаю что PCA предполагает вычисление матрици счетов и матрици нагрузок, причем тут вектор S2?!?
Про функцию написано так:
Principal components analysis

Subroutine builds orthogonal basis where first axis corresponds to
direction with maximum variance, second axis maximizes variance in subspace
orthogonal to first axis and so on.

It should be noted that, unlike LDA, PCA does not use class labels.

INPUT PARAMETERS:
X - dataset, array[0..NPoints-1,0..NVars-1].
matrix contains ONLY INDEPENDENT VARIABLES.
NPoints - dataset size, NPoints>=0
NVars - number of independent variables, NVars>=1

ВЫХОДНЫЕ ПАРАМЕТРЫ:
Info - return code:
* -4, if SVD subroutine haven't converged
* -1, if wrong parameters has been passed (NPoints<0,
NVars<1)
* 1, if task is solved
S2 - array[0..NVars-1]. variance values corresponding
to basis vectors.
V - array[0..NVars-1,0..NVars-1]
matrix, whose columns store basis vectors.

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение23.06.2010, 10:12 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
 i  Тема переносится в "Околонаучный софт"


Так ведь главные компоненты суть собственные вектора. Они в принципе заданы с точностью до числового множителя. Можно еще потребовать, чтобы они были единичными, но неопределенности в знаке все равно не избежать. Более того, если некоторые собственные значения будут кратными, то соответствующие вектора заданы совсем неоднозначно (хотя при обработке реальных данных это можно считать практически невероятным).

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

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение23.06.2010, 13:01 


23/11/09
130
PAV в сообщении #334044 писал(а):
 i  Тема переносится в "Околонаучный софт"

Ну у меня вообще вопрос по теории а не по софту, с помощью софта я лишь проверял результат. Ну это не суть важно, вам виднее :-)

Цитата:
Так ведь главные компоненты суть собственные вектора. Они в принципе заданы с точностью до числового множителя. Можно еще потребовать, чтобы они были единичными, но неопределенности в знаке все равно не избежать. Более того, если некоторые собственные значения будут кратными, то соответствующие вектора заданы совсем неоднозначно (хотя при обработке реальных данных это можно считать практически невероятным).

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


Так в том то и вопрос, как их направить чтобы АГК давал правильно ориентированные компоненты, а не инвертированные. SVD MatCAD'a почему-то дает правильные стандартной функцией svd, я не думаю что в нее разработчики специально забивали такие условия специально для АГК! SVD не только же для АГК можно применять.

Кто-нибудь знает какие условия выдвигает АГК для SVD?

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение25.06.2010, 17:45 


29/05/06
92
logout2d в сообщении #334104 писал(а):
их направить чтобы АГК давал правильно ориентированные компоненты

Вы сначала должны сформулировать, что считать "правильно ориентированным".

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение05.07.2010, 09:43 


23/11/09
130
Метод АГК (Анализ Главных Компонент) разлагает сигнал на компоненты.
Например есть сигнал $Sin(...) + Sin(...)$, метод позволяет разделить его на составляющие (компоненты) первый синус отдельно и второй синус можно получить отдельно, то есть выделить составляющие сигнала.
Так вот выделенные компоненты должны совпадать с исходными, по крайней мере с небольшой ошибкой из этого и должно вытекать условие (я не знаю какое). А у меня некоторые получаются инвертированными, то есть в сигнале содержится $Sin$ после выделения получается $-Sin$, иногда происходит и того хуже, компонента получается кривая расплющенная, лишь отдаленно напоминающая синус.
Для тестирования я беру сигнал как раз в виде суммы синусов, в теории АГК написано что такой случай будет идеально разлагаться, что я и вижу в MatCAD'e.
А когда начинаю применять SVD из библиотек вижу что разлагается все не так (знаки абы какие, но SVD правильный в смысле что $U*S*V^{T}$ дает правильную исходную матрицу).
Кстати проверил, разные либы выдают SVD с разными знаками, как вы и написали определенности нет. Очень странно что в MatCAD'e все нормально, ведь я там не задавал никаких доп условий, он видимо сам изначально вычисляет SVD с какими-то условиями.
Вот и получается что надо направить знаки, только как? что за условие?

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение05.07.2010, 11:22 
Аватара пользователя


20/12/08
236
изниоткуда
В определении сингулярного разложения ничего не сказано про направление векторов. Если соответствующее представление $A=USV^T$ найдено, U, V унитарные и S диагональная, значит, сингулярное разложение верно.

Фактически, АГК - это задача на собственные значения соответствующей матрицы корреляции, так? SVD решает эту задачу без явного вычисления матрицы корреляции. Сингулярные значения - это собственные значения матрицы корреляции, левые сингулярные вектора - ее собственные вектора.

Просто представьте, что вы решаете АГК с помощью другого метода, например, преобразования карунена-лоэва. Так что суть претензии пока не ясна.

(Оффтоп)

Хотя я сам когда-то давно задавался похожим вопросом на этом форуме :D

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение05.07.2010, 17:43 


29/05/06
92
allchemist в сообщении #337344 писал(а):
Фактически, АГК - это задача на собственные значения соответствующей матрицы корреляции, так?

Хм.. А разве не матрицы ковариации..?
И преобразование Кархунена-Лоэва это, я так понимаю, просто другое название анализа главных компонент (PCA).

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение05.07.2010, 19:37 


23/11/09
130
Цитата:
Фактически, АГК - это задача на собственные значения соответствующей матрицы корреляции, так?

Да.
АГК подразумевает вычисление корреляционной матрици а потом ее SVD разложение или иной метод нахождения собственных векторов и собственных значений.
Цитата:
Хм.. А разве не матрицы ковариации..?

Матрица ковариации используется в преобразовании Кархунена-Лоэва.
Цитата:
И преобразование Кархунена-Лоэва это, я так понимаю, просто другое название анализа главных компонент (PCA).

Другое название преобразования Кархунена-Лоэва это PCA. Но это не АГК в русской литературе. Оба метода очень похожи (если не одно и тоже, я правда этот момент туманно понимаю).
PCA подразумевает получение матрицы счетов T и матрицы нагрузок P, а АГК подразумевает получение матрицы главных компонент и матрици сибственных векторов.
Я не очень понимаю, может это просто термины разные а имеется ввиду одно и тоже.
Причем связь PCA с SVD такая:
если $X=USV^{T}$ то: $T = US$ и $P = V$
А в АГК для получения матрицы главных компонент надо корреляционную матрицу умножить на U, далее производится отсев компонент и восстанавливается ряд.
В принципе если так подумать, то эти манипуляции похожи, может просто термины и расчет разные.

Цитата:
В определении сингулярного разложения ничего не сказано про направление векторов. Если соответствующее представление $A=USV^T$ найдено, U, V унитарные и S диагональная, значит, сингулярное разложение верно.

Фактически, АГК - это задача на собственные значения соответствующей матрицы корреляции, так? SVD решает эту задачу без явного вычисления матрицы корреляции. Сингулярные значения - это собственные значения матрицы корреляции, левые сингулярные вектора - ее собственные вектора.

Да, абсолютно верно (как я понимаю). Проблема в том что формулировка SVD не определяет направление векторов, и для того чтобы это стало методом АГК нужно их направить. В этом и заключается мой вопрос, как их направить чтобы собственные вектора стали главными компонентами, без этого это просто SVD. Вообще я допускаю что у меня может просто ошибка в коде из за которой часть компонент получаются кривыми, но проверил уже сто раз каждый шаг.

Цитата:
Так что суть претензии пока не ясна.

С природой спорить себе дороже, поэтому это вопрос а не претензия :-)

Цитата:
Хотя я сам когда-то давно задавался похожим вопросом на этом форуме :D

Покажите пожалуйста в какой ветке если не затруднит, почитаю межет что прояснится в голове :-)

Вообще с подачи вашего поста кое что понял спасибо :-) (Quote: Просто представьте, что вы решаете АГК с помощью другого метода), проверю правильность расчета как если бы это был PCA (несколько по другому предлагается вычислять)

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение06.07.2010, 00:30 
Аватара пользователя


20/12/08
236
изниоткуда
да, в преобразовании карунена-лоэва матрица ковариации. я ошибся.

Цитата:
И преобразование Кархунена-Лоэва это, я так понимаю, просто другое название анализа главных компонент (PCA)

не совсем. PCA - это много разных методов с общим названием. Иногда очень непохожих. Мне вот, например, GHA нравится, или, там, карты Кохонена :D

Преобразование Карунена-Лоэва, я так понимаю, сейчас не используется из-за неэффективности. Из пакетных методов наиболее оптимален SVD, из адаптивных - сложно сказать, вероятно, тот же GHA.

По поводу направления векторов - я просто не могу представить, как это будет влиять на результат. В любом случае получатся декоррелированные данные, при желании, меньшей размерности. А что еще нужно от PCA? Если есть ошибка, то скорее всего не здесь.

 Профиль  
                  
 
 Re: Анализ главных компонент и SVD
Сообщение06.07.2010, 10:14 


23/11/09
130
Всем ответившим спасибо, разобрался :D
Для интересующихся:
Проблема была в очередной опечатке учебника (пока писал программу несколько опечаток уже было выявлено). Когда я разлагал ряд и получал главные компоненты я пользовался левыми векторами svd, а когда я обратно восстанавливал ряд после отбора компонент я пользовался теми же левыми векторами, а нужно было правыми! Соответственно на правильность знаков компонент надеяться не приходилось :-)
Цитата:
Просто представьте, что вы решаете АГК с помощью другого метода, например, преобразования карунена-лоэва. Так что суть претензии пока не ясна.

Все таки полезно иногда поговорить с собеседником, хоть вы по сути ничего нового для меня не сказали, зато после вашего поста я пришел к верным мыслям подойти к проблеме иначе, что привело к желаемому результату. Спасибо :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group