我想对sklearn
的{{1}}的某些数据打包为RandomForestClassifier
,而这些数据恰好是稀疏的。
调用numpy.ndarray
会得到fit
。从其他帖子中,我了解到随机森林无法处理稀疏数据。
我希望该对象具有ValueError: setting an array element with a sequence.
方法,但没有。
todense
我尝试用SciPy >>> 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'>
将其包装起来,但这也会产生错误。
有什么方法可以使随机森林接受此数据? (不确定密集存储是否会真正适合内存,但这是另一回事...)
编辑1
产生错误的代码就是这样:
csr_matrix
关于使用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)
的建议,ndarray没有这种方法。
toarray()
此外,如上所述,对于此特定数据,我将需要TB级的内存来保存该数组。是否可以使用稀疏数组运行AttributeError: 'numpy.ndarray' object has no attribute 'toarray'
?
编辑2
似乎应该使用此处Save / load scipy sparse csr_matrix in portable data format中所述的SciPy稀疏来保存数据。 使用NumPy的保存/加载时,应保存更多数据。
答案 0 :(得分:1)
我相信您正在寻找documentation中所示的toarray
方法。
因此,您可以这样做,例如X_dense = X_train.toarray()
。
当然,然后您的计算机将崩溃(除非您具有必需的22 TB的RAM?)。
答案 1 :(得分:1)
>>> X_train
array(<1443899x1936774 sparse matrix of type '<class 'numpy.float64'>'
with 141256894 stored elements in Compressed Sparse Row format>,
dtype=object)
表示您的代码或其调用已完成np.array(M)
,其中M
是csr
稀疏矩阵。它只是将该矩阵包装在对象dtype数组中。
要在不采用稀疏矩阵的代码中使用稀疏矩阵,必须先将它们转换为密集矩阵:
arr = M.toarray() # or M.A same thing
mat = M.todense() # to make a np.matrix
但是考虑到非零元素的尺寸和数量,这种转换很可能会产生memory error
。
答案 2 :(得分:0)
似乎应该使用此处Save / load scipy sparse csr_matrix in portable data format中所述的SciPy稀疏来保存数据。使用NumPy的保存/加载时,应保存更多数据。
nonce
可以使用这种格式的数据运行。
该代码现在已经运行了1:30h,所以希望它实际上可以完成:-)
答案 3 :(得分:0)
由于您使用 np.load 加载了 csr 矩阵,因此您需要将其从 np 数组转换回 csr 矩阵。你说你尝试用 csr_matrix 包装它,但这不是数组的内容,你需要所有的 .all()
temp = csr_matrix(X_train.all())
X_train = temp.toarray()