Использование Scikit-learn (v 0.15.2) для неотрицательной матричной факторизации на большой разреженной матрице (менее 1% значений > 0). Я хочу находить факторы, минимизируя ошибки только для ненулевых значений матрицы (т. е. не вычисляя ошибки для элементов, равных нулю) и отдавая предпочтение разреженности. Я не уверен, что что-то не так с тем, что я пытаюсь. Раньше у меня хорошо работали NMF и ProjectedGradientNMF пакета scikit-learn. Но кажется, что при увеличении размера матрицы факторизация происходит ужасно медленно.
Я говорю о матрицах с > 10^10 ячейками. Для матрицы с ~ 10 ^ 7 ячейками время выполнения мне кажется хорошим.
Я использовал следующие параметры: nmf_model = NMF(n_components = 100, init='nndsvd', random_state=0, tol = 0.01, sparseness='data')
.
Когда я попробовал немного другие параметры (изменить на init=random
), я получил следующее предупреждение. После предупреждения выполнение скрипта останавливается.
/lib/python2.7/site-packages/sklearn/decomposition/nmf.py:252: UserWarning: Iteration limit reached in nls subproblem.
warnings.warn("Iteration limit reached in nls subproblem.")
Есть ли способ сделать это быстрее и решить вышеуказанную проблему? Я пытался использовать разреженную матрицу numpy (разреженная по столбцам и строкам), но, что удивительно, она медленнее в тесте, который я провел с меньшей матрицей (~ 10 ^ 7 ячеек).
Учитывая, что для такой факторизации пришлось бы выполнять несколько итераций (для выбора идеального числа факторов и k-кратной перекрестной проверки), весьма желателен более быстрый способ решения этой проблемы.
Я также открыт для предложений пакетов/инструментов, которые не основаны на sklearn или Pyhon. Я понимаю, что вопросы о выборе пакета/инструмента не поощряются, но для такого конкретного случая использования было бы очень полезно знать, какие методы используют другие в этой области.