Python scikit学习拟合功能错误
我正在尝试为CIFAR-10数据创建一个简单的分类器, 但当我尝试执行此python代码时:Python scikit学习拟合功能错误,python,image,scikit-learn,multiclass-classification,Python,Image,Scikit Learn,Multiclass Classification,我正在尝试为CIFAR-10数据创建一个简单的分类器, 但当我尝试执行此python代码时: import cPickle from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import LinearSVC def unpickle(file): with open(file, 'rb') as fo: dict = cPickle.load(fo) return dict
import cPickle
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
def unpickle(file):
with open(file, 'rb') as fo:
dict = cPickle.load(fo)
return dict
def main():
s="data_batch_"
dicts=[None]*5
for i in xrange(1,6):
dicts[i-1]=unpickle(s+str(i))
X, y = dicts[0]['data'], dicts[0]['labels']
for i in xrange(1,5):
X = np.concatenate((X, dicts[i]['data']))
y = np.concatenate((y, dicts[i]['labels']))
classifier=OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y)
只要X和y的大小不是太大——10000,稍微大一点或小一点,它就可以正常工作。但当我尝试从2个批次中提取20000个样本(或从所有5个批次中提取50000个样本)时,我得到了“Python.exe停止工作”的弹出窗口。代码本身有问题还是内存不足
如果内存用完了,我该怎么办?是否可以对每个批次执行5次fit(X,y)循环?对于某些应用程序,需要处理的示例、功能(或两者)数量和/或速度对于传统方法来说是一个挑战。在这些情况下,SCIKIT学习有许多选项可以让你的系统规模。 核心外(或“外部存储器”)学习是一种从计算机主存储器(RAM)中无法存储的数据中学习的技术。 以下是为实现这一目标而设计的系统示意图: 1.流式处理实例的方法 2.一种从实例中提取特征的方法 3.增量算法 流实例 基本上,1。可能是从硬盘上的文件、数据库、网络流等生成实例的读取器。但是,有关如何实现这一点的详细信息超出了本文档的范围 提取特征 2.可以是scikit learn支持的不同特征提取方法中提取特征的任何相关方法。但是,在处理需要矢量化的数据时,如果事先不知道特征或值集,则应特别小心。一个很好的例子是文本分类,在训练过程中可能会发现未知术语。如果从应用程序的角度来看,对数据进行多次传递是合理的,则可以使用有状态矢量器。否则,可以通过使用无状态特征提取器来增加难度。目前,实现这一点的首选方法是使用所谓的散列技巧,该技巧由sklearn.feature\u extraction.FeatureHasher实现,用于包含以Python dict列表表示的分类变量的数据集,或使用sklearn.feature\u extraction.text.hashingvectorier实现,用于文本文档 增量学习 最后,三个人。我们在scikit learn中有许多选项。尽管所有算法都无法增量学习(即,不同时查看所有实例),但实现部分拟合API的所有估计器都是候选估计器。事实上,从一小批实例(有时称为“在线学习”)中增量学习的能力是核心外学习的关键,因为它保证在任何给定时间主内存中只有少量实例。为小批量选择一个合适的大小,以平衡相关性和内存占用,可能需要进行一些调整[1] 对于分类,需要注意的一点是,尽管无状态特征提取例程可能能够处理新的/看不见的属性,但增量学习器本身可能无法处理新的/看不见的目标类。在这种情况下,必须使用classes=参数将所有可能的类传递给第一个partial_fit调用 当选择一个合适的算法时,另一个要考虑的是,它们在每个例子中对时间的重要性都不一样。也就是说,感知器即使在许多示例之后仍然对标记错误的示例敏感,而SGD*和被动渐进*族对此类伪影更为鲁棒。相反,后者也倾向于不太重视显著不同但正确标记的示例,因为随着时间的推移,他们的学习速度会降低,因此他们在流程中出现的较晚 祝你好运 您的分类器不支持(小型)批次 您需要从中选择一个 通过这些,可以将参数化为线性SVM(默认!) 因此,您可以尝试直接在所有数据上使用它,或者抽象您的输入数据生成并手动使用它。但使用预处理/标准化,并检查超参数(学习率和学习率计划)