Regresión logística en Big Data

9

Tengo un conjunto de datos de alrededor de 5000 características. Para esos datos, utilicé por primera vez la prueba Chi Square para la selección de funciones; después de eso, obtuve alrededor de 1500 variables que mostraron una relación significativa con la variable de respuesta.

Ahora necesito ajustar la regresión logística en eso. Estoy usando el paquete glmulti para R (el paquete glmulti proporciona una selección eficiente de subconjuntos para vlm) pero solo puede usar 30 funciones a la vez, de lo contrario su rendimiento disminuye ya que el número de filas en mi conjunto de datos es de alrededor de 20000.

¿Hay algún otro enfoque o técnica para resolver los problemas anteriores? Si sigo el método anterior, tomará demasiado tiempo ajustar el modelo.

Vijay
fuente
8
Si puede ajustar su conjunto de datos en la memoria de una sola máquina, no lo llamaría un problema de "Big Data", especialmente si hace esto en el título de su pregunta
logc
Estoy usando sklearn's LogisticRegressiony resuelve un problema de 4000 características, 20,000 filas en aproximadamente un minuto en mi computadora portátil.
Thomas Ahle

Respuestas:

13

No es apropiado hacer un análisis de características y luego introducir características sobrevivientes en un método que no comprende cuánta tortura de datos se realizó anteriormente. Es mejor usar un método que pueda manejar todas las características potenciales (p. Ej., Red elástica). Las sugerencias de otros sobre el uso de la reducción de datos también son ideas excelentes.

Frank Harrell
fuente
¿Hay evidencia de esto? O / w parece tan heurístico como la detección de características.
Zubin
2
La estimación de máxima verosimilitud penalizada tiene en cuenta el contexto, por ejemplo, en el lazo, la estimación del coeficiente de regresión de una variable será menor si considera 1000 variables no seleccionadas que si considera 100 variables no seleccionadas. De lo contrario, las variables se seleccionan de forma sesgada y volver a colocar la variable en un segundo paso pierde el contexto.
Frank Harrell
¿Podría explicar qué quiere decir con parcialidad aquí? Me pregunto, porque en un sentido trivial el lazo siempre está sesgado, por lo que debe referirse a un sesgo adicional. Además, hay algunos enfoques en dos etapas con propiedades razonables, por ejemplo, pdfs.semanticscholar.org/d90a/…
jmb
2
El lazo sesga a propósito los coeficientes hacia cero para evitar el sobreajuste. Los parámetros sin convertir conducen a valores pronosticados que son demasiado extremos. El ajuste de las variables "seleccionadas" en un modelo no realizado deshacerá el sesgo de lazo necesario , creando una sobreajuste de los valores pronosticados.
Frank Harrell
10

Un primer enfoque es usar PCA para reducir la dimensionalidad del conjunto de datos. Intente retener ~ 97% de la varianza total, esto puede ayudar bastante.

Otra opción es usar algo como el descenso de gradiente estocástico, este puede ser un algoritmo mucho más rápido y capaz de caber en la memoria de R.

EDITAR: Un problema con R es que solo puede usar su RAM, por lo que si solo tiene 8 GB de memoria, eso es lo que está limitado. Me he encontrado con muchos problemas con esto y desde entonces he pasado a usar scikit-learn de python, que parece manejar mucho mejor los conjuntos de datos más grandes.

Puede encontrar un gráfico muy agradable que da una idea de los lugares para comenzar en función del tamaño del conjunto de datos aquí: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

ingrese la descripción de la imagen aquí

mike1886
fuente
8
Una gran preocupación con el uso de PCA de esta manera es que toda la relación entre la variable de respuesta y las variables independientes podría residir en el 3% de la varianza total que descuida. Tampoco parece haber una forma general de determinar cuántos componentes principales usar, porque el componente más pequeño podría ser proporcional a la respuesta en sí misma y, por lo tanto, constituiría la elección óptima de las variables a incluir.
whuber
1
Creo que, de hecho, si puede cargar el conjunto de datos en la memoria principal (lo que supongo que es el caso teniendo en cuenta lo que explica), el descenso de gradiente estocástico es el primer paso que debe tomar antes de probar las técnicas de reducción de dimensionalidad. Con Scikit-learn en python (o R, pero no soy un usuario de este lenguaje), esto funcionaría bien.
Bertrand R
Creo que esta es una respuesta útil, pero creo que el OP pregunta por la regresión logística y no por la reducción de características. ¿Quizás pueda abordar esa parte de la pregunta en una edición?
logc
No estoy seguro de lo útil que es PCA para problemas de regresión. El problema es este: PCA mantiene los valores singulares más grandes de la matriz de entrada, pero el pseudo-inverso de la matriz invierte los valores singulares, por lo que realmente desea mantener el más pequeño de los valores originales. Podría ser mejor simplemente esbozar los datos: arxiv.org/abs/1411.4357
Thomas Ahle
4

Como ya mencionó @Frank Harrell, usar una red elástica o LASSO para realizar una regresión penalizada con las 5000 características ( p ) sería un buen comienzo para la selección de características (no se pueden eliminar 3500 variables simplemente porque no son "estadísticamente significativas" con el variable dependiente de interés). Cualquiera de estos métodos se pueden realizar utilizando el paquete de R, glmnet.

Para tener en cuenta las relaciones compartidas entre las posibles variables predictoras de interés ( p = 5000), recomendaría ejecutar un bosque aleatorio utilizando el randomForestpaquete y / o el aumento de gradiente utilizando el gbmpaquete para evaluar la importancia relativa de las posibles variables predictoras. en lo que respecta al resultado binario. Con esta información, estará mucho más preparado para construir un modelo de regresión logística más parsimonioso.

Matt Reichenbach
fuente
3
Y
1

Supongo que no está limitado a R, ya que este es un problema de big data que probablemente no debería ser. Puede probar MLlib , que es la biblioteca de aprendizaje automático escalable de Apache Spark.

Apache Spark , a su vez, es un motor rápido y general para el procesamiento de datos a gran escala en memoria. Estos operan en un marco Hadoop que permite el procesamiento distribuido de grandes conjuntos de datos en grupos de computadoras utilizando modelos de programación simples. Está diseñado para escalar desde servidores individuales a miles de máquinas, cada una de las cuales ofrece computación y almacenamiento local.

Tenga en cuenta que 'miles de máquinas' es opcional (!), También puede configurarlo en su escritorio local de trabajo / hogar.

Volviendo a MLlib, viene con los siguientes algoritmos listos para usar:

  • Agrupación K-means con K-means || inicialización
  • Regresión lineal regularizada L1 y L2.
  • Regresión logística regularizada L1 y L2.
  • Filtrado colaborativo de mínimos cuadrados alternos, con clasificaciones explícitas o comentarios implícitos.
  • Naive Bayes clasificación multinomial.
  • Descenso de gradiente estocástico.

Si trabaja regularmente con Big Data, es posible que deba adoptar una solución Hadoop.

Zhubarb
fuente
0

Puedes probar Vowpal Wabbit: Vowpal Wabbit . Funciona bien con conjuntos de datos muy grandes y una gran cantidad de características.

según el sitio web:

Este es un proyecto iniciado en Yahoo! Investigue y continúe en Microsoft Research para diseñar un algoritmo de aprendizaje rápido, escalable y útil. VW es la esencia de la velocidad en el aprendizaje automático, capaz de aprender de conjuntos de datos de terafeature con facilidad. A través del aprendizaje paralelo, puede superar el rendimiento de cualquier interfaz de red de una sola máquina al realizar un aprendizaje lineal, el primero entre los algoritmos de aprendizaje.

usuario765195
fuente