在Python中使用MDP进行因素分析

1 投票
2 回答
1921 浏览
提问于 2025-04-16 18:00

请原谅我的无知,我对Python还很陌生。我想在Python中使用MDP进行因子分析(不过如果有更好的库,我也可以使用其他的)。

我有一个m行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新手解释一下?

2 个回答

4

正如斯蒂芬所说,数据必须是一个numpy数组。更准确地说,它必须是一个二维数组,第一维表示不同的样本,第二维表示数据的维度(如果顺序搞错了,可能会导致“奇异矩阵”的错误)。

你还应该看看MDP文档,里面应该能解答你所有的问题。如果这些还不够,还有MDP用户邮件列表可以求助。

4

我对mdp完全没有经验,但看起来它希望你把矩阵作为Numpy数组传入,而不是用列表。Numpy是一个用于高性能科学计算的工具包。你可以去Numpy的主页下载安装。安装完成后,试着把你的代码改成这样:

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

撰写回答