2013-10-09 106 views
2
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')) 

當我運行此我得到這個錯誤:將稀疏矩陣轉換爲稠密矩陣時的MemoryError? (numpy的,scikit)

TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

然後,我改變了我這樣的代碼:

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 

任何建議來解決這個問題?

回答

10

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

看起來AdaBoostClassifier不支持稀疏輸入(如您所見in the code here)。我不知道密碼錶示是否對算法是必要的,或者只是實現的假設。

+2

這是實施。對決策樹的稀疏矩陣支持,以及所有花哨的集合估計量,已經在很長一段時間內成爲待辦事項列表。 –

-2

X的維數是多少?如果它太大,你可能有內存錯誤