2013-10-09 3 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 означает, что в вашей системе недостаточно оперативной памяти для выделения матрицы. Зачем? Ну, матрица 7395 x 412605 имеет 3 051 213 975 элементов. Если они находятся в стандартном float64 (обычно double в C) типе данных, это 22,7 ГБ. Если вы конвертируете в более низкую точность float32 s (обычно float в C), это будет 11,4 ГБ; возможно, это ручка на вашей машине. Тем не менее, все равно будет очень медленно.

Кажется, что AdaBoostClassifier не поддерживает разреженные входы (как вы можете видеть in the code here). Я не знаю извинения, если для алгоритма необходимы плотные представления, или если только это предполагает реализация.

+2

Это реализация. Массивная матричная поддержка деревьев решений и, следовательно, все причудливые ансамблевые оценки были в списке задач очень долгое время. –

-2

Какое измерение X? Если он слишком велик, могут возникнуть ошибки памяти

Смежные вопросы