python – 将稀疏矩阵转换为密集矩阵时的MemoryError? (numpy,scikit)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将稀疏矩阵转换为密集矩阵时的MemoryError? (numpy,scikit),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1574字,纯文字阅读大概需要3分钟。
内容图文
![python – 将稀疏矩阵转换为密集矩阵时的MemoryError? (numpy,scikit)](/upload/InfoBanner/zyjiaocheng/758/36306312ec0b4d1b9ea95ebccb84aa9b.jpg)
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: 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
有什么建议可以解决这个问题?
解决方法:
MemoryError意味着系统上没有足够的RAM来分配矩阵.为什么?好吧,7395 x 412605矩阵有3,051,213,975个元素.如果它们在默认的float64(通常是C中的两倍)数据类型中,则为22.7GB.如果你转换为低精度float32s(通常在C中浮动),它将是11.4GB;也许这可以在你的机器上操作.不过,它仍然会很慢.
似乎AdaBoostClassifier不支持稀疏输入(如您所见,in the code here).我不知道算法是否需要密集表示,或者只是实现假设.
内容总结
以上是互联网集市为您收集整理的python – 将稀疏矩阵转换为密集矩阵时的MemoryError? (numpy,scikit)全部内容,希望文章能够帮你解决python – 将稀疏矩阵转换为密集矩阵时的MemoryError? (numpy,scikit)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。