Использование Scikit-learn (v 0.15.2) для неотрицательной матричной факторизации на большой разреженной матрице (менее 1% значений> 0). Я хочу найти факторы, минимизируя ошибки только при ненулевых значениях матрицы (т. Е. Не вычисляя ошибки для записей, которые равны нулю), и в пользу разреженности. Я не уверен, что что-то не так с тем, что я пытаюсь. NMF и проект ProjectGradientNMF для 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. Я понимаю, что вопросы о выборе пакета/инструмента не поощряются, но для такого конкретного случая использования, зная, какие методы могут использовать другие в полевых условиях, очень полезно.
Является ли метод NMF scipy вычислением ошибок только для ненулевых записей матрицы? Нулевые записи означают пропущенные значения. Используется ли регуляризация для обеспечения разреженности решения? Я не нашел подробностей в документации. Возможно, нужно копать в коде. Общий прецедент, также включающий термин-частоту, но также такие вещи, как теги элементов. Эта матрица очень скудная. Ваше решение звучит нормально, но когда матрица огромна, она все еще не масштабируема. Предположим, я хочу узнать элементы, помеченные менее чем в 2 раза, или теги, которые относятся к менее чем 5 элементам. Как их отфильтровать? – vpk
Предполагаю, вы имеете в виду метод NMF scikit, а не scipy? Как алгоритм десорбции разреженности может быть задан параметризацией «разреженности». Это в документации. Для этих последних двух случаев я не понимаю, почему вы использовали NMF для этого. Я бы подумал, что для этого есть другие более подходящие инструменты. – wonderkid2
Да, scikit. О каких других инструментах вы говорите? – vpk