votingclassifier sklearn from ensemble bagging python bigdata scikit-learn

python - bagging - from sklearn ensemble



Sklearn y grandes conjuntos de datos (5)

Tengo un conjunto de datos de 22 GB. Me gustaría procesarlo en mi laptop. Por supuesto que no puedo cargarlo en la memoria.

Uso mucho sklearn pero para conjuntos de datos mucho más pequeños.

En estas situaciones el enfoque clásico debería ser algo así.

Lea solo parte de los datos -> Forme parte de su estimador -> elimine los datos -> lea otra parte de los datos -> continúe entrenando su estimador.

He visto que algunos algoritmos de sklearn tienen el método de ajuste parcial que debería permitirnos entrenar al estimador con varias submuestras de los datos.

Ahora me pregunto si hay una razón fácil para hacerlo en Sklearn. Busco algo como

r = read_part_of_data(''data.csv'') m = sk.my_model `for i in range(n): x = r.read_next_chunk(20 lines) m.partial_fit(x) m.predict(new_x)

¿Tal vez sklearn no sea la herramienta adecuada para este tipo de cosas? Házmelo saber.


Creo que Sklearn está bien para datos más grandes. Si sus algoritmos elegidos son compatibles con partial_fit o un enfoque de aprendizaje en línea, entonces está en el buen camino. Una cosa a tener en cuenta es que el tamaño de su fragmento puede influir en su éxito.

Este enlace puede ser útil ... Trabajar con big data en python y numpy, no hay suficiente memoria RAM, ¿cómo guardar resultados parciales en el disco?

Estoy de acuerdo en que h5py es útil, pero es posible que desee utilizar herramientas que ya están en su carcaj.

Otra cosa que puedes hacer es elegir aleatoriamente si mantener una fila en tu archivo csv ... y guardar el resultado en un archivo .npy para que se cargue más rápido. De esa manera, obtendrá una muestra de sus datos que le permitirá comenzar a jugar con ellos con todos los algoritmos ... y lidiar con el problema de datos más grande en el camino (o no, en absoluto) a veces una muestra con un buen enfoque es suficiente Dependiendo de lo que quieras).


Es posible que desee echar un vistazo a Dask o Graphlab

Son similares a los pandas, pero trabajan con datos a gran escala (utilizando marcos de datos fuera del núcleo). El problema con los pandas es que todos los datos tienen que caber en la memoria.

Ambos frameworks pueden ser utilizados con scikit learn. Puede cargar 22 GB de datos en Dask o SFrame, luego usar con sklearn.


He usado varios clasificadores de aprendizaje de scikit con capacidades fuera del núcleo para entrenar modelos lineales: Gradiente Estocástico, Perceptrón y Pasivo Agresivo y también Naive Bayes Multinomial en un conjunto de datos Kaggle de más de 30 Gb. Todos estos clasificadores comparten el método partial_fit que mencionas. Algunos se comportan mejor que otros sin embargo.

Puede encontrar la metodología, el estudio de caso y algunos buenos recursos en este post: http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/


Me parece interesante que haya elegido usar Python para el análisis estadístico en lugar de R, sin embargo, comenzaría por poner mis datos en un formato que pueda manejar conjuntos de datos tan grandes. El paquete python h5py es fantástico para este tipo de almacenamiento, ya que permite un acceso muy rápido a sus datos. Deberá dividir sus datos en tamaños razonables, por ejemplo, 1 millón de fragmentos de elementos, por ejemplo, 20 columnas x 50,000 filas que escriben cada fragmento en el archivo H5. A continuación, debe pensar qué tipo de modelo está ejecutando, que no ha especificado realmente.

El hecho es que probablemente tendrá que escribir el algoritmo para el modelo y la validación cruzada de aprendizaje automático porque los datos son grandes. Comience escribiendo un algoritmo para resumir los datos, de modo que sepa lo que está viendo. Luego, una vez que decida qué modelo desea ejecutar, deberá pensar en cuál será la validación cruzada. Coloque una "columna" en cada parte del conjunto de datos que denota a qué conjunto de validación pertenece cada fila. Puede elegir etiquetar cada fragmento en un conjunto de validación particular.

A continuación, deberá escribir un algoritmo de estilo de reducción de mapas para ejecutar su modelo en los subconjuntos de validación. La alternativa es simplemente ejecutar modelos en cada parte de cada conjunto de validación y promediar el resultado (considere la validez teórica de este enfoque).

Considere el uso de chispa, o R y rhdf5 o algo similar. No he suministrado ningún código porque este es un proyecto en lugar de una simple pregunta de codificación.