2014 dxdy logo

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

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




 
 Библиотеки С++ для разложения на главные компоненты (PCA)
Сообщение02.07.2019, 20:27 
Подскажите библиотеки для C++ для быстрого разложения матриц порядка 500х2000 на небольшое число главные компоненты (10-20). При этом разложение будет использоваться внутри итерационного цикла. Требуется быстродействие. Для матричных вычислений на данный момент я пока использую только Eigen. В Eigen вроде бы есть встроенные алгоритмы, но они выполняют полное разложение, что очень долго и не нужно. Написал свою функцию разложения по NIPALS под Eigen, но там есть две проблемы. У меня опыт С++ полгода и потому я просто уверен, что функция не оптимизирована по быстродействию. Плюс сравнение результатов разложения для Eigen с данными Unscrambler и такой же процедурой в Wolfram Mathematica показывают, что для некоторых ГК моя функция может давать ошибку в счетах до 5%, что не очень хорошо.
Можете ли вы дать мне какие-то рекомендации по библиотекам?

 
 
 
 Re: Библиотеки С++ для разложения на главные компоненты (PCA)
Сообщение03.07.2019, 14:40 
McConst в сообщении #1402729 писал(а):
В Eigen вроде бы есть встроенные алгоритмы, но они выполняют полное разложение, что очень долго и не нужно. Написал свою функцию разложения по NIPALS под Eigen


RedSVD делает SVD с заданным (меньшим, чем полное) количеством компонентов. Что даст PCA, сделанный на его основе?

McConst в сообщении #1402729 писал(а):
уверен, что функция не оптимизирована по быстродействию.


Что говорит profiler?

 
 
 
 Re: Библиотеки С++ для разложения на главные компоненты (PCA)
Сообщение03.07.2019, 15:14 
Большое спасибо за ссылки!!!

 
 
 
 Posted automatically
Сообщение03.07.2019, 15:28 
 i  Тема перемещена из форума «Искусственный интеллект и Машинное обучение» в форум «Программирование»
Причина переноса: пожалуй, это скорее сюда.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group