Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scikit学习拟合功能错误_Python_Image_Scikit Learn_Multiclass Classification - Fatal编程技术网

Python scikit学习拟合功能错误

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

我正在尝试为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


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(默认!)

因此,您可以尝试直接在所有数据上使用它,或者抽象您的输入数据生成并手动使用它。但使用预处理/标准化,并检查超参数(学习率和学习率计划)