是否可以使用sklearn在大数据文件上应用在线算法?

reg*_*ter 23 large-data online-algorithm scikit-learn

我想在大文本语料库中应用快速在线降维技术,如(在线/小批量)字典学习.我的输入数据自然不适合内存(这就是我想使用在线算法的原因)所以我正在寻找一种可以迭代文件而不是将所有内容加载到内存中的实现.是否可以使用sklearn执行此操作?有替代品吗?

谢谢注册

ogr*_*sel 25

对于某些算法支持partial_fit,可以在脚本中编写外部循环来进行核外的大规模文本分类.但是,有一些缺少的元素:数据集读取器,它将磁盘上的数据作为平面文件或SQL数据库服务器的文件夹进行迭代,或者NoSQL存储或带有存储字段的Solr索引.我们也缺少在线文本矢量化器.

这是一个示例集成模板,用于解释它如何组合在一起.

import numpy as np
from sklearn.linear_model import Perceptron

from mymodule import SomeTextDocumentVectorizer
from mymodule import DataSetReader

dataset_reader = DataSetReader('/path/to/raw/data')

expected_classes = dataset_reader.get_all_classes()  # need to know the possible classes ahead of time

feature_extractor = SomeTextDocumentVectorizer()
classifier = Perceptron()

dataset_reader = DataSetReader('/path/to/raw/data')

for i, (documents, labels) in enumerate(dataset_reader.iter_chunks()):

    vectors = feature_extractor.transform(documents)
    classifier.partial_fit(vectors, labels, classes=expected_classes)

    if i % 100 == 0:
        # dump model to be able to monitor quality and later analyse convergence externally
        joblib.dump(classifier, 'model_%04d.pkl' % i)
Run Code Online (Sandbox Code Playgroud)

数据集读取器类是特定于应用程序的,并且可能永远不会使其成为scikit-learn(除了平面文本文件或CSV文件的文件夹,不需要向库添加新的依赖项).

文本矢量化器部分更成问题.partial_fit由于我们构建内存中词汇表(根据max_df和min_df修剪的python dict)的方式,当前矢量化器没有方法.我们可以使用外部存储构建一个并删除max_df和min_df功能.

或者,我们可以构建一个HashingTextVectorizer,它将使用散列技巧来删除字典要求.目前这些都不存在(尽管我们已经有一些构建块,例如murmurhash包装器和对哈希特征的拉取请求).

与此同时,我建议你看看Vowpal Wabbit,也许是那些python绑定.

编辑:sklearn.feature_extraction.FeatureHasher班已并入的主分支scikit学习,将在下一版本(0.13)可用.查看有关特征提取的文档.

编辑2: 0.13,现予以公布既FeatureHasherHashingVectorizer,可以直接与文本数据处理.

编辑3:现在有一个关于在项目的官方示例库中使用路透社数据集进行核外学习的示例.


oDD*_*ooL 7

由于Sklearn 0.13有确实的实现HashingVectorizer.

编辑:这是一个这样的应用程序的完整示例

基本上,这个例子表明你可以学习(例如分类文本)数据,这些数据不适合计算机的主存储器(而是磁盘/网络/ ......).