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()