簡體   English   中英

是否可以使用sklearn在大數據文件上應用在線算法?

[英]Possibility to apply online algorithms on big data files with sklearn?

我想在大文本語料庫中應用快速在線降維技術,如(在線/小批量)字典學習。 我的輸入數據自然不適合內存(這就是我想使用在線算法的原因)所以我正在尋找一種可以迭代文件而不是將所有內容加載到內存中的實現。 是否可以使用sklearn執行此操作? 有替代品嗎?

謝謝注冊

對於一些支持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:現在有一個關於在項目的官方示例庫中使用路透社數據集進行核外學習的示例。

由於Sklearn 0.13有確實的實現HashingVectorizer

編輯:這是一個這樣的應用程序的完整示例

基本上,這個例子表明你可以學習(例如分類文本)數據,這些數據不適合計算機的主存儲器(而是磁盤/網絡/ ......)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM