9

Estoy buscando una guía experta aquí sobre cuál es el mejor enfoque para mí para resolver un problema. Investigué algo de aprendizaje automático, redes neuronales y cosas así. Investigué Weka, una especie de solución baiana ... R ... varias cosas diferentes. Aunque no estoy seguro de cómo proceder realmente. Aquí está mi problema.El mejor enfoque para lo que creo que es un problema de aprendizaje automático

Tengo, o tendré, una gran colección de eventos ... eventualmente alrededor de 100,000 o más. Cada evento consta de varias (30-50) variables independientes, y 1 variable dependiente que me importa. Algunas variables independientes son más importantes que otras para determinar el valor de la variable dependiente. Y, estos eventos son relevantes para el tiempo. Las cosas que ocurren hoy son más importantes que los eventos que ocurrieron hace 10 años.

Me gustaría ser capaz de alimentar algún tipo de motor de aprendizaje de un evento, y hacer que prediga la variable dependiente. Luego, conociendo la respuesta real para la variable dependiente para este evento (y todos los eventos que han surgido antes), me gustaría que esto admita las conjeturas posteriores.

Una vez que tenga una idea de la dirección de programación a seguir, puedo hacer la investigación y descubrir cómo convertir mi idea en código. Pero mi experiencia es la programación paralela y no cosas como esta, así que me gustaría tener algunas sugerencias y orientación sobre esto.

Gracias!

Editar: Aquí hay un poco más de detalle sobre el problema que estoy tratando de resolver: Es un problema de precios. Digamos que estoy queriendo predecir precios para un cómic al azar. El precio es lo único que me importa. Pero hay muchas variables independientes que uno podría pensar. Es un comic de Superman o un comic de Hello Kitty. ¿Qué edad tiene? ¿Cuál es la condición? etc. Después de entrenar por un tiempo, quiero poder darle información sobre un cómic que podría estar considerando, y que me dé un valor razonablemente esperado para el cómic. DE ACUERDO. Así que los comics pueden ser un ejemplo falso. Pero entiendes la idea general. Hasta el momento, de las respuestas, estoy investigando en máquinas de vectores de soporte y Naive Bayes. Gracias por toda su ayuda hasta ahora.

+1

Creo que la etiqueta "clasificación" y "regresión" es mutuamente excluyente. Es "clasificación", o es "regresión". No puede ser ambos. –

Respuesta

1

Si tiene algunos datos clasificados (un montón de problemas de muestra combinados con sus respuestas correctas), comience entrenando algunos algoritmos simples como K-Nearest-Neighbour y Perceptron y vea si algo significativo sale de él. No se moleste en intentar resolverlo de manera óptima hasta que sepa si puede resolverlo de manera simple o sencilla.

Si no tiene ningún dato clasificado, o no mucho, comience a buscar algoritmos de aprendizaje no supervisados.

8

Parece que eres un candidato para Support Vector Machines.

Ve a buscar libsvm. Lea "Una guía práctica para la clasificación SVM", que distribuyen, y es corta.

Básicamente, usted va a tomar sus eventos, y dar formato a ellos como:

dv1 1:iv1_1 2:iv1_2 3:iv1_3 4:iv1_4 ... 
dv2 1:iv2_1 2:iv2_2 3:iv2_3 4:iv2_4 ... 

ejecutar a través de su utilidad SVM escala, y luego usar su guión grid.py para buscar los parámetros apropiados en el núcleo . El algoritmo de aprendizaje debería ser capaz de descubrir la diferente importancia de las variables, aunque también podría ser capaz de ponderar las cosas. Si cree que el tiempo será útil, simplemente agregue tiempo como otra variable independiente (característica) para el algoritmo de entrenamiento a usar.

Si libsvm no puede obtener la precisión que desea, considere intensificar hasta SVMlight. Solo un poco más difícil de tratar, y muchas más opciones.

Bishop's Pattern Recognition and Machine Learning es probablemente el primer libro de texto en buscar detalles sobre lo que libsvm y SVMlight realmente están haciendo con sus datos.

+0

Gran idea, LIBSVM es increíble. –

1

Parece que cualquier clase de clasificador debería funcionar para este problema: encuentre la mejor clase (su variable dependiente) para una instancia (sus eventos). Un simple punto de partida podría ser la clasificación Naive Bayes.

1

Este es definitivamente un problema de aprendizaje automático. Weka es una excelente opción si conoces Java y quieres una buena lib de GPL, donde todo lo que tienes que hacer es seleccionar el clasificador y escribir algo de pegamento. Probablemente, R no va a cortarlo para tantas instancias (eventos, como tú lo llamas) porque es bastante lento. Además, en R todavía necesita encontrar o escribir libs de aprendizaje automático, aunque esto debería ser fácil dado que es un lenguaje estadístico.

Si considera que sus características (variables independientes) son condicionalmente independientes (es decir, independientes dada la variable dependiente), ingenuo Bayes es el clasificador perfecto, ya que es rápido, interpretable, preciso y fácil de implementar. Sin embargo, con 100.000 instancias y solo 30-50 funciones, es probable que pueda implementar un esquema de clasificación bastante complejo que capture una gran cantidad de la estructura de dependencia en sus datos. Su mejor opción sería una máquina de vectores de soporte (SMO en Weka) o un bosque aleatorio (sí, es un nombre tonto, pero ayudó a la captura aleatoria del bosque). Si desea la ventaja de una fácil interpretación de su clasificador incluso en el Costo de cierta precisión, tal vez funcionaría un árbol de decisión J48. Lo recomendaría contra las redes neuronales, ya que son muy lentas y no suelen funcionar mejor en la práctica que las SVM y el bosque aleatorio.

1

El libro Programming Collective Intelligence tiene un ejemplo trabajado con el código fuente de un predictor de precio para computadoras portátiles que probablemente sería un buen punto de partida para usted.

1

Los SVM suelen ser el mejor clasificador disponible. Todo depende de tu problema y tus datos. Para algunos problemas, otros algoritmos de aprendizaje automático podrían ser mejores. He visto problemas que las redes neuronales (específicamente redes neuronales recurrentes) eran mejores para resolver. No hay una respuesta correcta a esta pregunta, ya que depende mucho de la situación, pero estoy de acuerdo con dsimcha y Jay en que los SVM son el lugar adecuado para comenzar.

1

Creo que su problema es un problema regression, no es un problema de clasificación. La diferencia principal: en la clasificación estamos tratando de aprender el valor de una variable discreta, mientras que en la regresión estamos tratando de aprender el valor de una variable continua. Las técnicas involucradas pueden ser similares, pero los detalles son diferentes. Linear Regression es lo que la mayoría de las personas prueba primero. Hay muchas otras técnicas de regresión, si la regresión lineal no funciona.

1

Mencionaste que tienes 30-50 variables independientes, y algunas son más importantes que el resto. Entonces, suponiendo que tiene datos históricos (o lo que llamamos un conjunto de capacitación), puede usar PCA (Análisis de Componenta Principal) u otros métodos de reducción de dimensionalidad para reducir el número de variables independientes. Este paso es, por supuesto, opcional. Dependiendo de las situaciones, puede obtener mejores resultados manteniendo todas las variables, pero agregue un peso a cada una de ellas en función de su relevancia. Aquí, PCA puede ayudarlo a calcular cuán "relevante" es la variable.

También mencionó que los eventos que ocurren más recientemente deberían ser más importantes. Si ese es el caso, puede ponderar el evento reciente más alto y el evento anterior más bajo. Tenga en cuenta que la importancia del evento no tiene que crecer linealmente según el tiempo. Puede tener más sentido si crece exponencialmente, por lo que puedes jugar con los números aquí. O bien, si no le faltan datos de capacitación, tal vez pueda considerar la posibilidad de dejar datos demasiado antiguos.

Como dijo Yuval F, esto se parece más a un problema de regresión que a un problema de clasificación. Por lo tanto, puede probar SVR (Support Vector Regression), que es la versión de regresión de SVM (Support Vector Machine).

algunas otras cosas que usted puede intentar son:

  1. Juega un poco con la forma de escalar el rango de valores de las variables independientes. Diga, generalmente [-1 ... 1] o [0 ... 1]. Pero puedes probar otros rangos para ver si ayudan. A veces lo hacen. La mayoría de las veces no lo hacen.
  2. Si sospecha que hay un vector de función "oculto" con una dimensión inferior, digamos N < < 30 y es de naturaleza no lineal, necesitará una reducción de dimensionalidad no lineal. Puede leer sobre kernel PCA o más recientemente, escultura múltiple.
1

Lo que usted describe es un problema clásico de clasificación. Y en mi opinión, ¿por qué codificar nuevos algoritmos cuando tienes una herramienta como Weka? Si yo fuera usted, revisaría una lista de algoritmos de aprendizaje supervisado (no entiendo completamente que las personas con suero están sugiriendo primero el aprendizaje no supervisado cuando este es un problema de clasificación tan claro) utilizando una validación cruzada de 10 veces (o k) , que es el valor predeterminado en Weka si lo recuerdo, y vea qué resultados obtiene. Me gustaría probar:

-Neural Nets
-SVMs
-Decisión árboles (éste funcionó muy bien para mí cuando yo estaba haciendo un problema similar)
-Boosting con árboles de decisión/tocones
-Cualquier cosa otra cosa !

Weka hace las cosas tan fáciles y realmente puede obtener información útil. Acabo de tomar una clase de aprendizaje automático e hice exactamente lo que intentas hacer con los algoritmos anteriores, así sé dónde estás. Para mí, el impulso con tocones de decisión funcionó sorprendentemente bien. (Por cierto, impulsar es en realidad un meta-algoritmo y se puede aplicar a la mayoría de los algs de aprendizaje supervisados ​​para mejorar sus resultados.)

Una cosa agradable pero usando árboles de decisión (si usas la variedad ID3 o similar) es que elige los atributos para dividir en orden de qué tan bien diferencian los datos; en otras palabras, qué atributos determinan la clasificación más rápido básicamente. Entonces puede ver el árbol después de ejecutar el algoritmo y ver qué atributo de un cómic determina con más fuerza el precio: debería ser la raíz del árbol.

Editar: Creo que Yuval tiene razón, no estaba prestando atención al problema de discretizar el valor de su precio para la clasificación. Sin embargo, no sé si la regresión está disponible en Weka, y todavía puede aplicar fácilmente técnicas de clasificación a este problema. Debe crear clases de valores de precios, como en una serie de rangos de precios para los cómics, para que pueda tener un número discreto (como 1 a 10) que represente el precio del cómic. Entonces puedes ejecutar fácilmente la clasificación.

Cuestiones relacionadas