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?
classification
carlosdc
fuente
fuente
Respuestas:
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
fuente
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
fuente
También puede usar PCA para reducir dimensiones sin calcular la matriz de covarianza --- mediante el uso del equivalente neural newtork de PCA.
Aquí hay un documento que lo describe (pero recomiendo hacer su propia búsqueda): http://users.ics.tkk.fi/oja/Oja1982.pdf , y aquí hay un enlace a algunas cosas que pueden estar funcionando en la implementación de matlab: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .
fuente
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
fuente