sklearn machine learning ejemplos datasets scikit-learn online-algorithm large-data

scikit learn - machine - ¿Posibilidad de aplicar algoritmos en línea en archivos de datos grandes con sklearn?



machine learning python ejemplos (3)

Además de Vowpal Wabbit , gensim puede ser interesante: también presenta la Asignación de Dirichlet Latente en línea.

Me gustaría aplicar técnicas rápidas de reducción de dimensionalidad en línea, como el Aprendizaje de diccionarios (en línea / mini lotes) en grandes corpus de texto. Naturalmente, mis datos de entrada no caben en la memoria (por eso quiero usar un algoritmo en línea), por lo que estoy buscando una implementación que pueda recorrer un archivo en lugar de cargar todo en la memoria. ¿Es posible hacer esto con sklearn? ¿hay alternativas?

Gracias registrate


Desde Sklearn 0.13 existe una implementación del HashingVectorizer .

EDITAR: Aquí hay un ejemplo completo de tal aplicación

Básicamente, este ejemplo demuestra que puede aprender (por ejemplo, clasificar texto) sobre datos que no caben en la memoria principal de la computadora (sino en el disco / red / ...).


Para algunos algoritmos compatibles con partial_fit , sería posible escribir un bucle externo en una secuencia de comandos para realizar una clasificación de texto a gran escala y fuera del núcleo. Sin embargo, faltan algunos elementos: un lector de conjunto de datos que itera sobre los datos en el disco como carpetas de archivos planos o un servidor de base de datos SQL, o un almacén NoSQL o un índice Solr con campos almacenados, por ejemplo. También nos falta un vectorizador de texto en línea.

Aquí hay una muestra de plantilla de integración para explicar cómo encajaría.

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)

La clase del lector de conjuntos de datos es específica de la aplicación y probablemente nunca se convertirá en scikit-learn (excepto tal vez para una carpeta de archivos de texto plano o archivos CSV que no requiera agregar una nueva dependencia a la biblioteca).

La parte vectorizadora de texto es más problemática. El vectorizador actual no tiene un método partial_fit debido a la forma en que construimos el vocabulario en memoria (un dict de python que se recorta dependiendo de max_df y min_df). Tal vez podríamos construir uno usando una tienda externa y eliminar las funciones max_df y min_df.

Alternativamente, podríamos construir un HashingTextVectorizer que usaría el truco de hashing para eliminar los requisitos del diccionario. Ninguno de ellos existe en este momento (aunque ya tenemos algunos bloques de construcción, como un envoltorio de murmurhash y una solicitud de extracción para funciones de hashing).

Mientras tanto, te aconsejo que eches un vistazo a Vowpal Wabbit y tal vez esos enlaces de python .

Edición: la clase sklearn.feature_extraction.FeatureHasher se ha fusionado en la rama maestra de scikit-learn y estará disponible en la próxima versión (0.13). Echa un vistazo a la documentación sobre extracción de características .

Edit 2: 0.13 ahora se lanza con FeatureHasher y HashingVectorizer que puede tratar directamente con datos de texto.

Edición 3: ahora hay un ejemplo de aprendizaje fuera de núcleo con el conjunto de datos de Reuters en la galería de ejemplos oficial del proyecto.