将 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)
如果您想使用多个稀疏矩阵进行学习/预测,您可能需要vstack
或hstack
它们。如果不了解更多关于数据的信息,我不知道是哪个。
【讨论】:
非常感谢,我不知道vstack
和hstack
。我读过分类器可以处理 csr_matrices (也用于您的示例)。我正在处理的是大量(10k+)个形状相同的稀疏矩阵(2e6)x(2e6),稀疏度> 99%。这些需要分类。
我可能会这样做:(1) 初始化每个稀疏矩阵,(2) arr.reshape(1, -1)
展平为特征向量,(3) 将输出附加/堆叠到数据矩阵 @987654335 @,然后(4)与标签向量y
配对进行分类。不过我推测,这可能必须是一个单独的问题。以上是关于将 sklearn.neural_network.MLPClassifier 与 ndarray 的 csr_matrices 一起使用的主要内容,如果未能解决你的问题,请参考以下文章