быстрая точная разреженная svd библиотека?

Я ищу быструю библиотеку SVD, в C, C ++ или Java. В конечном итоге я использую Java, но мне очень удобно использовать jna для переноса c ++, например http://github.com/hughperkins/jeigen

Я ищу быструю библиотеку SVD, которая будет обрабатывать разреженные матрицы. Чтобы сохранить эту цель, чтобы вопрос не был помечен как слишком субъективный, скажем:

  • использование таргетинга с news20.binary, например, из http://mldata.org/repository/data/viewslug/news20binary/
  • как быстро нужно бежать?
  • сколько дисперсии сохраняется, например, для матрицы S размера 6 или 20?

Я осмотрел несколько библиотек и обнаружил:

  • matlab: супер быстрый, около 10 секунд, но это не совсем «библиотека» как таковая. среднеквадратическая ошибка проекции: 0,93
  • redsvd: супер быстрый, около 1 секунды для запуска, для 6 объектов, но средняя квадратическая ошибка проецирования составляет 0,97, что очень высоко
  • Svd Эйгена и очень медленный, и только для плотных матриц
  • svdlibc: побежал в течение 28 минут, прежде чем я остановил его; Я предполагаю, что он вычисляет полный S, а не только первые 6 функций или около того

По сути, я ищу библиотеку, которая дает примерно ту же скорость и среднеквадратическую ошибку проекции, что и Matlab, или, по крайней мере, несколько сопоставимую.

3

Решение

По моему опыту, svdlibc — лучшая библиотека этих опций. Ранее я немного покопался в его коде, и я не верю, что он вычисляет полную S-матрицу (то есть это действительно «тонкий SVD»). Если вы можете управлять представлением матрицы на диске, svdlibc работает намного быстрее при использовании разреженного двоичного формата ввода из-за значительно меньших издержек ввода-вывода.

Пакет S-Space предоставил исполняемая банка вокруг SVDLIBJ Java-порт SVDLIBC. Тем не менее, они обнаружили, что он дал результаты, отличные от SVDLIBC для определенных решений ввода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]