Scikit的LinearSVC分类器的核外训练



如何在太大或不切实际而无法放入内存的数据集上训练Scikit的LinearSVC?我正试图用它来对文档进行分类,我有几千个标记的示例记录,但当我试图将所有这些文本加载到内存中并训练LinearSVC时,它会消耗我65%以上的内存,我被迫在系统完全没有响应之前杀死它。

是否可以将我的训练数据格式化为单个文件,并使用文件名将其输入LinearSVC,而不必调用fit()方法?

我找到了这个指南,但它只真正涵盖了分类,并假设训练是增量完成的,而LinearSVC不支持这一点。

据我所知,像LinearSVC这样的非增量实现需要整个数据集进行训练。除非您创建它的增量版本,否则您可能无法使用LinearSVC。

scikit learn中有一些分类器可以增量使用,就像你在指南中发现的那样,它使用SGD分类器。SGD分类器具有*partial_fit*方法,允许您批量训练它。还有一些其他分类器支持增量学习,如SGDCLassier、多项式朴素贝叶斯和伯努利朴素贝叶斯

您可以使用这样的Generator函数。

def lineGenerator():
    with open(INPUT_FILENAMES_TITLE[0],'r') as f1:
        title_reader = csv.reader(f1)
        for line in title_reader:
            yield line[0]

然后您可以将分类器称为

clf = LinearSVC()
clf.fit(lineGenerator())

这假定INPUT_FILENAMES_TITLE[0]是您的文件名。

相关内容

  • 没有找到相关文章

最新更新