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
矩阵有3051213975元。如果它们为默认float64
(通常double
为C)数据类型,则为22.7GB。如果转换为低精度float32
s(通常float
在C中),则为11.4GB;也许这在您的机器上是可以处理的。不过,它仍然会很慢。
似乎AdaBoostClassifier
不支持稀疏输入(如您在此处的代码中所见)。我不知道这种算法是否需要密集的表示,或者只是实现假设了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句