将 sklearn.neural_network.MLPClassifier 与 ndarray 的 csr_matrices 一起使用

Posted

技术标签:

【中文标题】将 sklearn.neural_network.MLPClassifier 与 ndarray 的 csr_matrices 一起使用【英文标题】:Use sklearn.neural_network.MLPClassifier with ndarray of csr_matrices 【发布时间】:2021-08-09 17:29:16 【问题描述】:

所以我面临以下分类问题:我有很多不同的(大型)二维矩阵,其中包含许多零条目(因此使用稀疏矩阵可能有意义),需要对其进行分类。

我想测试 sklearn 的各种分类器,但它们似乎只能将 np.ndarrays 用作 X_train 数据(至少根据 the documentation)

我想做以下事情(最小的例子):

data=np.ndarray(2);
data[0] = sparse.csr_matrix((x_d, (x_r, x_c)), shape=(x_size, y_size))

但这给了我以下错误:

ValueError: setting an array element with a sequence.

知道如何处理这个问题吗?我还没有真正找到任何关于对许多稀疏矩阵进行分类的输入。

【问题讨论】:

【参考方案1】:

完整的错误回溯应该提示问题所在:

TypeError: float() argument must be a string or a number, not 'csr_matrix'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/hayesall/teaching/sparse_matrix.py", line 11, in <module>
    data[0] = X
ValueError: setting an array element with a sequence.

线条:

data = np.ndarray(2)
data[0] = sparse.csr_matrix((x_d, (x_r, x_c)), shape=(x_size, y_size))

...用随机内存内容初始化一个数组(通常不推荐),然后尝试将第一个条目设置为稀疏矩阵的结果(这会引发TypeError + ValueError):

>>> import numpy as np
>>> np.ndarray(10)
array([6.92548229e-310, 6.92548229e-310, 3.60419659e-306, 1.60105975e+002,
       1.74568648e-309, 1.05751040e+007, 5.79612503e+017, 7.93549630e-301,
       4.17034227e+021, 2.03099725e+026])

sklearn 分类器通常可以处理稀疏矩阵输入。例如,这使多层感知器适合稀疏 XOR 分类问题:

from sklearn.neural_network import MLPClassifier
import numpy as np
from scipy.sparse import csr_matrix

i_pointer = np.array([1, 3, 2, 3])
j_pointer = np.array([0, 0, 1, 1])
values = np.array([1.0, 1.0, 1.0, 1.0])

X = csr_matrix((values, (i_pointer, j_pointer)))
y = np.array([0.0, 1.0, 1.0, 0.0])

print(X.todense())

clf = MLPClassifier()
clf.fit(X=X, y=y)

如果您想使用多个稀疏矩阵进行学习/预测,您可能需要vstackhstack 它们。如果不了解更多关于数据的信息,我不知道是哪个。

【讨论】:

非常感谢,我不知道vstackhstack。我读过分类器可以处理 csr_matrices (也用于您的示例)。我正在处理的是大量(10k+)个形状相同的稀疏矩阵(2e6)x(2e6),稀疏度> 99%。这些需要分类。 我可能会这样做:(1) 初始化每个稀疏矩阵,(2) arr.reshape(1, -1) 展平为特征向量,(3) 将输出附加/堆叠到数据矩阵 @987654335 @,然后(4)与标签向量y配对进行分类。不过我推测,这可能必须是一个单独的问题。

以上是关于将 sklearn.neural_network.MLPClassifier 与 ndarray 的 csr_matrices 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn.neural_network 中初始化权重

如何在 MLPClassifier 中设置初始权重?

将自己的博客园,打造成个人知乎

如何将thinkcmf导入eclipse

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等