¿Cómo uso scikit-learn para entrenar un modelo en un gran csv de datos (~ 75MB) sin tener problemas de memoria?Scikit y Pandas: Ajuste de datos grandes
Estoy usando el cuaderno de IPython como entorno de programación, y pandas + sklearn paquetes para analizar los datos del tutorial del reconocedor de dígitos de kaggle.
Los datos están disponibles en la webpage, enlace a my code, y aquí está la error message:
KNeighborsClassifier
se utiliza para la predicción.
Problema:
"MemoryError" se produce al cargar gran conjunto de datos usando read_csv función . Para evitar temporalmente este problema, debo reiniciar el núcleo , que luego la función read_csv carga con éxito el archivo, pero se produce el mismo error cuando vuelvo a ejecutar la misma celda.
Cuando la función read_csv
carga el archivo con éxito, después de hacer cambios a la dataframe
, que pueden pasar las características y etiquetas para la función() ajuste del KNeighborsClassifier. En este punto, se produce un error de memoria similar.
He intentado lo siguiente:
Iterar a través del archivo CSV en trozos, y ajustar los datos en consecuencia, pero el problema es que el modelo predictivo se sobrescribe cada vez que un fragmento de datos.
¿Qué crees que puedo hacer para entrenar con éxito mi modelo sin tener que tener problemas de memoria?
Su código + datos funciona muy bien en mi portátil. Requiere aproximadamente 1.2 GB de memoria. ¿Cuánta memoria tiene tu sistema? – Sicco
Lo tengo trabajando usando loadtxt. Incluso sin que se produzca el error de memoria, ejecutar solo ~ 75 mb de datos en el algoritmo consume más de 1 GB de RAM ... No estoy seguro de si estoy haciendo algo mal en mi código. (http://pastie.org/4354911) (cuaderno ipython). Si solo es el algoritmo el que toma tanto tiempo, ¿cómo se cargan gigabytes de datos en el algoritmo sin tomar tanto tiempo para crear un modelo? –
Puede usar un algoritmo que se pueda entrenar de forma incremental, procesando solo partes (pequeñas) de los datos a la vez. Un estimador en scikit-learn es capaz de hacer esto si implementa el método 'partial_fit'. – Sicco