Факторный анализ с использованием MDP в Python

#python #lsa #factor-analysis

#python #lsa #факторный анализ

Вопрос:

Извините за мое невежество, я очень новичок в Python. Я пытаюсь выполнить факторный анализ в Python с использованием MDP (хотя я могу использовать другую библиотеку, если есть лучшее решение).

У меня есть матрица m by n (называемая matrix), и я попытался сделать:

 import mdp
mdp.nodes.FANode()(matrix)
  

но я получаю сообщение об ошибке. Я предполагаю, что, возможно, моя матрица сформирована неправильно? Моя цель — выяснить, сколько компонентов содержится в данных, и выяснить, какие строки загружаются в какие компоненты.

Вот обратная трассировка:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mdp/signal_node.py", line 630, in __call__
    return self.execute(x, *args, **kwargs)
  File "mdp/signal_node.py", line 611, in execute
    self._pre_execution_checks(x)
  File "mdp/signal_node.py", line 480, in _pre_execution_checks
    self.train(x)
  File "mdp/signal_node.py", line 571, in train
    self._check_input(x)
  File "mdp/signal_node.py", line 429, in _check_input
    if not x.ndim == 2:
AttributeError: 'list' object has no attribute 'ndim'
  

Кто-нибудь имеет представление о том, что происходит, и хочет объяснить это новичку в Python?

Ответ №1:

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

 import mdp, numpy
mdp.nodes.FANode()(numpy.array(matrix))
  

Комментарии:

1. Спасибо, все еще получаю ошибки («Ковариационная матрица данных является сингулярной. Избыточные измерения необходимо удалить.») но вы правы … должно быть в форме array ()

Ответ №2:

Как сказал Стивен, данные должны представлять собой массив numpy. Точнее, это должен быть 2D-массив, с первым индексом, представляющим разные sampe, а вторым индексом, представляющим измерения данных (использование неправильного порядка здесь может привести к ошибке «сингулярная матрица»).

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

Комментарии:

1. спасибо — хотя с тех пор я решил использовать gensim для своего проекта вместо mdp, и все идет намного гладче!

2. @Jeff: MDP специально не разработан для обработки естественного языка. Итак, я могу представить, что для этого лучше подходит gensim.