Python numpy.n将稀疏矩阵排列为稠密矩阵

Python numpy.n将稀疏矩阵排列为稠密矩阵,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我想在一些数据上运行sklearn的RandomForestClassifier,这些数据被打包为numpy.ndarray,恰好是稀疏的。 调用fit将给出ValueError:使用序列设置数组元素。。从其他帖子中我了解到随机森林无法处理稀疏数据 我希望对象有一个todense方法,但它没有 >>> X_train array(<1443899x1936774 sparse matrix of type '<class 'numpy.float64'>'

我想在一些数据上运行
sklearn
RandomForestClassifier
,这些数据被打包为
numpy.ndarray
,恰好是稀疏的。 调用
fit
将给出
ValueError:使用序列设置数组元素。
。从其他帖子中我了解到随机森林无法处理稀疏数据

我希望对象有一个
todense
方法,但它没有

>>> X_train
array(<1443899x1936774 sparse matrix of type '<class 'numpy.float64'>'
    with 141256894 stored elements in Compressed Sparse Row format>,
      dtype=object)
>>> type(X_train)
<class 'numpy.ndarray'>
至于使用
toarray()
的建议,ndarray没有这样的方法。
AttributeError:'numpy.ndarray'对象没有属性'toarray'

此外,如前所述,对于这个特定的数据,我需要TB的内存来保存阵列。是否有使用稀疏数组运行
RandomForestClassifier
的选项

编辑2


看起来数据应该使用这里提到的SciPy的sparse来保存。
使用NumPy的save/load时,应该保存更多数据。

我相信您正在寻找
toarray
方法,如中所示

所以您可以这样做,例如,
X\u dense=X\u train.toarray()

当然,你的电脑会崩溃(除非你有22兆字节的内存?)


但是,考虑到非零元素的尺寸和数量,这种转换很可能会产生
内存错误

似乎应该使用这里提到的SciPy的稀疏存储来保存数据。使用NumPy的“保存/加载”时,应保存更多数据

RandomForestClassifier
可以使用此格式的数据运行。
代码已经运行了1:30小时,所以希望它能够真正完成:-)

因为您已经使用np.load加载了csr矩阵,所以需要将它从np数组转换回csr矩阵。您说过您尝试用csr_矩阵包装它,但这不是数组的内容,您需要保存所有
.all()


请提供一个示例,以便我们可以查看导致错误的代码。现在,您只显示
X_train
的类型,但既不显示其形状,也不显示如何将其输入到
随机森林分类器中。很可能,数据的形状不正确,请参见答案。我得到的对象是
ndarray
,它没有
toarray
todense
。我看不到任何方法可以将其转换为csr_矩阵使用
X_train[()]
从数组包装器中取出错误保存的矩阵。然后使用
toarray
ndarray
不必
toarray
方法,否则我不会提出这个问题。你是对的——这个阵列需要TB(我认为“只是”2.2),这是不实际的。
X_train = np.load('train.npy') # this returns a ndarray
train_gt = pd.read_csv('train_gt.csv')

model = RandomForestClassifier()
model.fit(X_train, train_gt.target)
>>> X_train
array(<1443899x1936774 sparse matrix of type '<class 'numpy.float64'>'
    with 141256894 stored elements in Compressed Sparse Row format>,
      dtype=object)
 arr = M.toarray()    # or M.A same thing
 mat = M.todense()    # to make a np.matrix
temp = csr_matrix(X_train.all())
X_train = temp.toarray()