gpt4 book ai didi

python - numpy.ndarray 稀疏矩阵到密集

转载 作者:行者123 更新时间:2023-12-04 00:27:01 38 4
gpt4 key购买 nike

我想对一些打包为 numpy.ndarray 的数据运行 sklearnRandomForestClassifier,而这些数据恰好是稀疏的。调用 fit 会给出 ValueError: setting an array element with a sequence.。从其他帖子中我了解到随机森林无法处理稀疏数据。

我希望该对象有一个 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'>

我尝试用 SciPy csr_matrix 包装它,但这也会产生错误。

有没有办法让随机森林接受这些数据?(不确定密集是否真的适合内存,但这是另一回事......)

编辑 1

产生错误的代码是这样的:

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)

至于建议使用toarray(),ndarray没有这种方法。AttributeError: 'numpy.ndarray' 对象没有属性 'toarray'

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

编辑 2

似乎应该使用 SciPy 的稀疏保存数据,如此处所述 Save / load scipy sparse csr_matrix in portable data format .当使用 NumPy 的保存/加载时,应该保存更多数据。

最佳答案

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

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

关于python - numpy.ndarray 稀疏矩阵到密集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55637498/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com