Ява Джама матрица - PullRequest
       46

Ява Джама матрица

2 голосов
/ 29 января 2011

Я работаю с Jama Matrix . Я использовал это для LSI. Работает все отлично. Однако, когда я передаю большую матрицу, например, 8000x8000, это убивает всю мою систему. Я просто звоню в SVD, затем уменьшаю размер матрицы и суммирую. Ничего больше !

Есть идеи? Как я могу решить эту проблему?

core2du

Ram = 10GB

Настройка времени выполнения Java

-Xmx5000M

Пока я выполняю матричный код Jama, не выполняется другая программа

Ответы [ 4 ]

2 голосов
/ 14 апреля 2011

Я также использую Jama для SVD и имею ту же проблему при решении большой матрицы. Чтобы уменьшить количество случаев переполнения памяти, я настроил SingularValueDecomposition.java на компактный. Настройка заключается в том, что в матрице A она имеет так много значений 0 (ноль), что компакт для всех используемых матриц, таких как A, U, V, Work и т. Д., Только позволяет памяти для доступного значения, которое больше 0. Прежде чем использовать компактный SVD, вы должны сделать матричный файл, такой как r / t c / t value / n r / t c / t value / n ... '/ t' и '/ n' означают табуляцию и новую строку соответственно.

примеры, (0, 0, 0), (0, 1, 0,5), (0, 2, 0), (0, 3, 0,2), (1, 0, 1), (1, 1, 0), (1, 2, 0), (1, 3, 0.3) и размер матрицы 2 * 4 (R * C), тогда вы просто создаете файл как MATRIXSIZE / т 2 / т 4 / н 0 / т 1 / т 0,5 / н 0 / т 3 / т 0,2 / н 1 / т 0 / т 1 / н 1 / т 3 / т 0,3 / н

Если вы хотите его использовать, сообщите мне свой адрес электронной почты (mg.hwang@gmail.com). Я дам более подробную информацию, чтобы использовать его по электронной почте.

Я проверил, что результат был правильным. Однако я не уверен, насколько он эффективен для компьютера. Во всяком случае, это работает и показывает лучше, даже если не сильно.

1 голос
/ 29 января 2011

Возможно, вы столкнулись с проблемой нехватки памяти. Возможно, вы захотите увеличить объем памяти, доступной для вашей JVM, с помощью опции -Xmx, например, Xm256m даст вашей JVM 256 МБ вместо значения по умолчанию 64 МБ.

Вы можете также рассмотреть возможность использования альтернативных библиотек, которые обрабатывают представления матрицы с эффективным использованием памяти, используя модели для разреженных матриц, такие как COO, DOK, CSR и т. Д. Для получения более подробной информации найдите в записи Википедии «разреженная матрица».

Эта тема предоставляет несколько альтернатив Джаме, возможно, это вам тоже поможет.

0 голосов
/ 17 марта 2011

Если вы занимаетесь LSI, вы можете сделать две важные оптимизации. Во-первых, ваша матрица разрежена (предполагается, что вы используете матрицу по каждому документу). JAMA работает с плотными матрицами, поэтому вы можете захотеть найти другое представление. Как упоминал Лоло, это значительно уменьшит ваши накладные расходы.

Во-вторых, LSI требует, чтобы вычислялись только верхние k единичных векторов. JAMA вычисляет все значения в единственном числе, что в вашем случае не нужно. Более того, если вам нужно только самое большое k, вы можете оптимизировать работу с помощью тонкого SVD, который имеет значительно меньшую нагрузку на память. Вычисление полного SVD для LSI станет практически невозможным для больших коллекций документов, поэтому в конечном итоге вам придется переключиться на что-то другое, чем JAMA, если вы хотите масштабировать.

SVDLIBJ - это одна из возможностей для выполнения тонкого SVD в Java. Пакет S-Space также имеет оболочку SVDLIBJ и инструмент командной строки, а также реализацию LSI / LSA, если вы хотите вообще избежать написания LSI.

0 голосов
/ 30 января 2011

Питер Тейлор абсолютно прав.

Это экспоненциальная большая проблема.В конце концов, вычисление SVD матрицы 8000 X 8000 не является простым делом, поскольку вы говорите о 64 000 000 элементов!

Если вы запускаете JAMA MagicSquareExample, с:

32x32время ожидания матрицы составляет 0,062 с.
64x64 возрастет до 0,0328 с
96x96 пройдет через 1,889 с
128x128 через 4,5 с
160x160 через 11,109 с
192x192 за 24,063 с
224x224 за 46,063 с
256x256 за 83,625 с
512x512 за 1716,719 с

enter image description here

...