我正在运行以下代码来创建和拟合GaussianNB分类器:
features_train, features_test, labels_train, labels_test = preprocess()
### compute the accuracy of your Naive Bayes classifier
# import the sklearn module for GaussianNB
from sklearn.naive_bayes import GaussianNB
import numpy as np
### create classifier
clf = GaussianNB()
### fit the classifier on the training features and labels
clf.fit(features_train, labels_train)
在本地运行上述内容:
>>> runfile('C:/.../naive_bayes')
no. of Chris training emails: 4406
no. of Sara training emails: 4383
>>> clf
GaussianNB()
我相信这会检查"preprocess()",因为它成功地加载了features_train、features_test、labels_train labels_test。
当我尝试 clf.score 或 clf.predict时,我收到一个 MemoryError:
>>> clf.predict(features_test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libsite-packagessklearnnaive_bayes.py", line 64, in predict
jll = self._joint_log_likelihood(X)
File "C:Python27libsite-packagessklearnnaive_bayes.py", line 343, in _joint_log_likelihood
n_ij -= 0.5 * np.sum(((X - self.theta_[i, :]) ** 2) /
MemoryError
>>> clf.score(features_test,labels_test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libsite-packagessklearnbase.py", line 295, in score
return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
File "C:Python27libsite-packagessklearnnaive_bayes.py", line 64, in predict
jll = self._joint_log_likelihood(X)
File "C:Python27libsite-packagessklearnnaive_bayes.py", line 343, in _joint_log_likelihood
n_ij -= 0.5 * np.sum(((X - self.theta_[i, :]) ** 2) /
MemoryError
我不认为这是我的内存问题,因为我在任务管理器上没有看到 RAM 峰值,也没有接近我机器上的内存使用量。
我怀疑这是Python版本和库版本的东西。
感谢对诊断此问题的任何帮助。我可以根据需要提供更多信息。
我相信我在网上阅读了一些相关帖子后回答了我的问题(没有使用以前回答过的 Stackoverflow 帖子)。
对我来说,关键是通过Anaconda简单地迁移到64位Python。当在 32 位 Python 中运行的完全相同的代码在 64 位重试时,"MemoryError"的所有问题都得到了解决。据我所知,这是唯一被更改的变量。
也许这不是一个非常令人满意的答案,但如果这个问题可以保留给将来搜索完全相同的 sklearn MemoryError 问题的其他人,那就太好了。
我也在学习同样的 Udacity 课程,我遇到了同样的问题。我安装了 Anaconda 64 位并在 Spyder 中执行了脚本,一切都按预期进行。