2012-06-21 11 views
5

Estoy usando scikit-learn para agrupar documentos de texto. Estoy usando las clases CountVectorizer, TfidfTransformer y MiniBatchKMeans para ayudarme a hacer eso. Los nuevos documentos de texto se agregan al sistema todo el tiempo, lo que significa que necesito usar las clases anteriores para transformar el texto y predecir un clúster. Mi pregunta es: ¿cómo debo almacenar los datos en el disco? ¿Debo simplemente encuadrar el vectorizador, el transformador y los objetos kmeans? ¿Debo guardar los datos? Si es así, ¿cómo lo vuelvo a agregar al vectorizador, al transformador y a los objetos kmeans?Datos persistentes en sklearn

Cualquier ayuda sería muy apreciada

Respuesta

6

Depende de lo que quieras hacer.

Si desea encontrar algunos centros de clúster fijos en un conjunto de capacitación y luego reutilizarlos más tarde para calcular asignaciones de clúster para nuevos datos y luego conservar los modelos (o simplemente guardar el vocabulario del vectorizador y los demás parámetros de constructores de modelos) y las posiciones del centro del grupo) está bien.

Si lo que desea es clustering con nuevos datos, es posible que desee volver a entrenar toda la tubería mediante la unión de los datos nuevos + datos antiguos para que el vocabulario del vectorizador cree nuevas características (dimensiones) para las nuevas palabras y permita que el algoritmo de agrupamiento encuentre centros de clúster que se ajusten mejor a la estructura del conjunto de datos completo.

Tenga en cuenta que en el futuro proporcionaremos vectorizadores de hash (vea por ejemplo este pull request on hashing transformers como primer bloque de construcción), por lo tanto, ya no será necesario almacenar el vocabulario (pero perderá la capacidad de introspección del "significado "de las dimensiones de la característica).

Como para el decapado de los modelos frente a la utilización de su propia representación de sus parámetros He respondido a esta parte en su pregunta anterior aquí: Persist Tf-Idf data

4

Sí, creo que la respuesta general con SK-aprender es pickle y orar.

Me parece que esto es súper frágil, en comparación con tener un formato de serialización documentado que no depende de los detalles de implementación. ¿Pero tal vez ellos lo sepan y no harán cambios incompatibles con sus clases?

+0

Somos conscientes de lo frágil que es esto, y no, no lo hacemos actualmente garantizar el 100% de compatibilidad con versiones anteriores (aunque todos los cambios incompatibles deben discutirse en el ML y la compatibilidad generalmente se conserva para algunas versiones). Aún no se ha encontrado una mejor solución de serialización. –

+0

En el trabajo en Google, los búferes de protocolo desempeñan el papel de un formato de serialización de lenguaje cruzado y fácil de usar. En mi tiempo de hobby, he usado Thrift, que también hace un buen trabajo. –

Cuestiones relacionadas