Clasificación con datos altos y gordos

15

Necesito entrenar un clasificador lineal en mi computadora portátil con cientos de miles de puntos de datos y alrededor de diez mil características. ¿Cuáles son mis opciones? ¿Cuál es el estado del arte para este tipo de problema?

Parece que el descenso de gradiente estocástico es una dirección prometedora, y mi sensación es que este es el estado del arte:

"Pegasos: Primal Estimado sub-GrAdient SOlver para SVM" Shai Shalev-Shwartz, Yoram Singer, Nathan Srebro, Andrew Cotter. "Programación matemática, Serie B, 127 (1): 3-30, año: 2007".

¿Es este el consenso? ¿Debería estar mirando en otra dirección?

carlosdc
fuente
1
¿ha considerado utilizar algunos métodos de reducción de dimensiones? miles de características requieren una reducción de dimensión, ver: en.wikipedia.org/wiki/Dimension_reduction
Dov
Esta pregunta podría mejorarse con un esfuerzo de investigación. ¿Tienes alguna técnica en mente?
Tamzin Blake
@ Thom Blake: he editado la pregunta un poco, con mis pensamientos.
carlosdc
Sin saber más sobre los datos, cualquier respuesta estaría mal informada. ¿Es escaso? ¿continuo? ¿discreto? características / objetos redundantes? ¿cuántas clases? Por ejemplo, PCA en datos escasos a veces puede ser dañino.
cyborg
2
alto = muchos pts? gordo = muchas características? ¿Es esta terminología estándar en alguna parte, utilizada en referencias en alguna parte?

Respuestas:

6

Creo que deberías mirar los métodos de aprendizaje en línea . El perceptrón y el perceptrón del núcleo son extremadamente fáciles de codificar y funcionan extremadamente bien en la práctica, y hay una gran cantidad de otros métodos en línea. Tenga en cuenta que cualquier método de aprendizaje en línea se puede convertir en un algoritmo de aprendizaje por lotes, en cuyo caso se parecen mucho a los métodos de descenso de gradiente estocástico.

Si está usando Matlab, hay una caja de herramientas realmente agradable llamada DOGMA por Francesco Orabona, que contiene una variedad de algoritmos de aprendizaje en línea, y puede evaluar algunos métodos diferentes utilizando eso. Utilicé esto en algunas de mis investigaciones y descubrí que es muy útil (tenga en cuenta que, por lo que recuerdo, espera los datos como [características x ejemplos], por lo que es posible que tenga que transponerlos).

Como otros han mencionado, es posible que desee probar la reducción de dimensionalidad. PCA podría no ser una buena opción aquí, ya que debe calcular la matriz de covarianza, que será muy costosa. Podrías intentar mirar Proyecciones aleatorias . La teoría es dura, pero el principio es muy simple. Se basa en el Lema de Johnson-Lindenstrauss si está interesado, pero la idea básica es que si proyecta al azar en un espacio dimensional más bajo, entonces distancias entre puntos se conservan hasta algunos ϵ . Si está utilizando un kernel RBF, ¡entonces 2 distancias son todo lo que le interesa!2ϵ2

tdc
fuente
7

Primero, me gustaría preguntarle cómo sabe que el clasificador lineal es la mejor opción. Intuitivamente para un espacio tan grande (R ^ 10000) es posible que algún otro clasificador no lineal sea una mejor opción.

Le sugiero que pruebe varios clasificadores diferentes y observe los errores de predicción (probaría varios modelos de clasificación regularizados).

Si se queda sin memoria, reduzca la dimensión con PCA

niko
fuente
2
Gracias. Estaba pensando más sobre cómo manejar la escala del problema. Quería comenzar haciendo lineal, porque es más simple. Creo que sugieres un método basado en el núcleo. Permítanme señalar que si tengo 750000 puntos de datos, la matriz del núcleo tendrá un tamaño de 540 GB. Por lo tanto, la respuesta no puede ser: conéctelo a LIBSVM / SVMLight / etc, obtenga una buena C y gamma y vea lo que obtiene.
carlosdc
2
(-1) la respuesta es a) en parte tan genérica, podría aplicarse a cualquier pregunta de clasificación b) no se explica por qué se recomienda PCA (sobre cualquier otra técnica de reducción de dimensiones).
steffen
1

Como sugirió jb, creo que es mejor usar un método de "Reducción de dimensiones". El análisis de componentes principales (PCA) es una opción popular. También puede probar técnicas de aprendizaje de funciones no supervisadas. Para obtener más información sobre el aprendizaje de funciones no supervisadas, visite http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

Upul
fuente
1
PCA no PAC;) ( 15 caracteres )
neurona