Nano Hash - криптовалюты, майнинг, программирование

Быстрая неотрицательная матричная факторизация на большой разреженной матрице

Использование 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. Я понимаю, что вопросы о выборе пакета/инструмента не поощряются, но для такого конкретного случая использования было бы очень полезно знать, какие методы используют другие в этой области.


Ответы:


1

Возможно, несколько слов о том, в чем заключается исходная проблема, могли бы помочь нам дать более точные ответы.

Матричная факторизация на очень большой матрице всегда будет медленной из-за характера проблемы.

Предложения: уменьшение n_components до ‹ 20 несколько ускорит процесс. Однако реальное улучшение скорости будет достигнуто только за счет ограничения размера матрицы. С такой матрицей, как вы описываете, можно подумать, что вы пытаетесь факторизовать матрицу частот терминов. Если это так, вы можете попробовать использовать функции векторизации в scikit-learn, чтобы ограничить размер матрицы. Большинство из них имеют параметр max_features. Пример:

vectorizer = TfidfVectorizer(
    max_features=10000,
    ngram_range=(1,2))
tfidf = vectorizer.fit_transform(data)

Это значительно ускорит решение проблемы.

Если бы я был совершенно не прав, и это не проблема частоты термина, я бы все равно искал способы ограничить исходную матрицу, которую вы пытаетесь разложить на множители.

23.07.2015
  • Метод scipy NMF вычисляет ошибки только для ненулевых элементов матрицы? Нулевые записи означают пропущенные значения. Используется ли регуляризация для обеспечения разреженности решения? Подробностей в документации не нашел. Возможно, нужно покопаться в коде. Общий вариант использования, также включающий частоту терминов, а также такие вещи, как теги элементов. Эта матрица очень разреженная. Ваше решение звучит нормально, но когда матрица огромна, все равно не масштабируется. Допустим, я хочу найти элементы, которые были помечены менее 2 раз, или теги, которые принадлежат менее чем 5 элементам. Как отфильтровать их все? 24.07.2015
  • Я предполагаю, что вы имеете в виду метод NMF scikit, а не метод scipy? То, как алгоритм обрабатывает разреженность, может быть установлено параметром 'sparseness'. Это в документации. Что касается последних двух случаев, я не понимаю, почему вы должны использовать для этого NMF. Я бы подумал, что для этого есть другие более подходящие инструменты. 26.07.2015
  • Да, скит. О каких еще инструментах вы говорите? 26.07.2015
  • Я говорю о scikit-learn. Ты был тем, кто упомянул scipy. 27.07.2015
  • Я имел в виду scikit-learn. извините за путаницу. scipy даже не имеет NMF. 27.07.2015

  • 2

    Возможно, вы захотите взглянуть на эту статью, в которой обсуждаются более современные методы NMF: http://www.cc.gatech.edu/~hpark/papers/nmf_blockpivot.pdf

    Идея состоит в том, чтобы работать только с ненулевыми элементами для факторизации, что сокращает время вычислений, особенно когда задействованная матрица/матрицы очень разрежены.

    Также один из авторов той же статьи создал на github реализации NMF, в том числе упомянутые в их статье. Вот ссылка: https://github.com/kimjingu/nonnegfac-python

    Надеюсь, это поможет.

    14.12.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..