Я ищу быструю реализацию NMF для разреженных матриц в R.
Пакет R NMF
состоит из ряда алгоритмов, ни один из которых не впечатляет с точки зрения времени вычислений.
NNLM::nnmf()
кажется современным в R на данный момент, особенно method = "scd"
и loss = "mse"
, реализованные как чередующиеся наименьшие квадраты, решаемые последовательным спуском по координатам. Однако этот метод довольно медленный на очень больших и очень разреженных матрицах.
Функция rsparse::WRMF
очень быстрая, но это связано с тем, что только положительные значения в A
используются для построчного вычисления W
и H
. Без коллинеарной оптимизации/штрафа за отсутствующие значения это приводит к некоторой внутренней нестабильности функции потерь и неоптимальному достижению цели.
Есть ли какой-нибудь общий метод решения NMF на разреженной матрице?
Есть ли эквивалент scikit-learn
в R? См. этот вопрос
Существуют различные рабочие функции, такие как fnnls
, tsnnls
в R, ни одна из которых не превосходит nnls::nnls
(написана на Фортране). Мне не удалось закодировать ни одну из этих функций в более быструю структуру NMF.