簡體   English   中英

將稀疏矩陣轉換為密集矩陣時的MemoryError? (numpy,scikit)

[英]MemoryError while converting sparse matrix to dense matrix? (numpy, scikit)

lr = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001, 
                             C=1, fit_intercept=True, intercept_scaling=1.0, 
                             class_weight=None, random_state=None)

rd = AdaBoostClassifier( base_estimator=lr, 
                                           learning_rate=1, 
                                           n_estimators=20, 
                                           algorithm="SAMME")
##here, i am deleting unnecesseary objects
##print X.shape
##(7395, 412605)
print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=20, scoring='roc_auc'))

當我運行這個我得到這個錯誤:

TypeError:傳遞了稀疏矩陣,但需要密集數據。 使用X.toarray()轉換為密集的numpy數組。

然后,我改變了我的代碼:

print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X.toarray(), y, cv=20, scoring='roc_auc'))

現在,我有以下例外:

  File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 559, in toarray
    return self.tocoo(copy=False).toarray(order=order, out=out)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/coo.py", line 235, in toarray
    B = self._process_toarray_args(order, out)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 628, in _process_toarray_args
    return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError

有什么建議可以解決這個問題?

MemoryError意味着系統上沒有足夠的RAM來分配矩陣。 為什么? 好吧, 7395 x 412605矩陣有3,051,213,975個元素。 如果它們在默認的float64 (通常是C中的double )數據類型中,則為22.7GB。 如果轉換為精度較低的float32 (通常是C中的float ),則為11.4GB; 也許這可以在你的機器上操作。 不過,它仍然會很慢。

似乎AdaBoostClassifier不支持稀疏輸入(正如您在此處的代碼中所見)。 我不知道算法是否需要密集表示,或者只是實現假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM