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

谢谢注册

#1楼 票数: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)

数据集读取器类是特定于应用程序的,并且可能永远不会使其成为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-learn的主分支中,并将在下一个版本中提供(0.13)。 查看有关特征提取的文档。

编辑2: 0.13现在与FeatureHasherHashingVectorizer一起发布,可以直接处理文本数据。

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

#2楼 票数:7 已采纳

由于Sklearn 0.13有确实的实现HashingVectorizer

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

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

#3楼 票数:4

除了Vowpal Wabbit之外, gensim也可能很有趣 - 它也具有在线Latent Dirichlet分配功能。

  ask by register translate from so

未解决问题?本站智能推荐:

1回复

python中大数据集的文本分类

我有220万个数据样本分类到超过7500个类别 。 我正在使用pandas和sckit-learn of python这样做。 以下是我的数据集示例 以下是我遵循的步骤: 前处理 矢量表示 训练 生成的documenttermmatrix将是sc
1回复

将大型 csv 转换为稀疏矩阵以在 sklearn 中使用

我有一个以 csv 格式保存的 ~30GB(压缩 ~1.7 GB | 180K 行 x 32K 列)矩阵。 我想将此矩阵转换为稀疏格式,以便能够在内存中加载完整的数据集,以便使用 sklearn 进行机器学习。 填充的单元格包含小于 1 的浮点数。大矩阵的一个警告是目标变量存储为最后一列。 允许在
1回复

大文件的分层随机播放拆分

我有一个35GB的CSV文件(预计将来会更大),用于Keras中的二进制分类问题。 为了训练和测试我的模型,我想将数据分为每个正样本中具有相同比例的训练/测试数据集。 像这样: 由于此数据集太大而无法放入内存,因此我创建了一个自定义生成器,以批量加载数据并通过fit_generato
2回复

大型数据集上的分类模型

我想在 n=3000000 和 12 列的数据集上实现分类模型。 我有一个问题,因为它在下班后很慢我什么也没得到,你有没有建议让它运行得更快? 塔克斯
1回复

如何在python中使用多处理计算f1分数?

我有一组成对的二进制标签: y_true , y_pred 。 我的数组包含约 5000 万个元素,我希望最好使用f1 分数或 AUC 来评估成功。 然而,使用sklearn计算 f1 需要相对较长的时间——大约是整个 epoch 所需时间的一半。 计算 AUC 更快,但也太慢了。 类似的问题在
1回复

用于从数据子集计算平均值和方差的在线算法

我把它作为在线计算变量和平均值的参考,用于可变长度数据: http : //www.johndcook.com/standard_deviation.html 。 数据是16位无符号值的集合,可以有任意数量的样本(实际上,最小值约为20个样本,最大值约为2e32个样本。 由于数据集可
1回复

在线排序算法和外部排序算法有什么区别?

在线排序算法和外部排序算法有什么区别? 它们是相同还是不同?
1回复

在 R/python/MOA 中实现的在线时间序列算法

我正在寻找已实现的在线学习时间序列算法。 R、Python、MOA 或任何其他工具是否实现了这些算法? 蒂亚!