Здравствуйте уважаемые обитатели 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Говорят о согласовании
, но я так понимаю это только чтобы само 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.