sirve que puedo programas para machine learning hacer español ejemplos con basicos automatico aprendizaje aplicaciones algoritmos algoritmo machine-learning modeling neural-network classification regression

machine-learning - que - programas de machine learning



El mejor enfoque para lo que creo que es un problema de aprendizaje automático (9)

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.

Estoy esperando 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.

Tengo, o tendré, una gran colección de eventos ... eventualmente alrededor de 100,000 más o menos. 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 poder 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 qué dirección de programación tomar, 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 detalles sobre el problema que estoy tratando de resolver: es un problema de fijación 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.


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 cree 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.


Parece que cualquier tipo 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 de Naive Bayes .


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, tomará sus eventos y los formateará de la siguiente manera:

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 ...

ejecútelo a través de su utilidad svm-scale, y luego use su script grid.py para buscar los parámetros apropiados del kernel. 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 avanzar a SVMlight . Solo un poco más difícil de tratar, y muchas más opciones.

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


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-Neighbor 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 tiene mucha información, comience a buscar algoritmos de aprendizaje no supervisados.


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.


Creo que su problema es un problema de regresión , no un problema de clasificación. La principal diferencia: 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. La regresión lineal 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.


Usted mencionó que tiene 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 puedes probar son:

  1. Juega con cómo escalas el rango de valores de tus 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 características "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.

Lo que describes 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. Lo intentaré:

-Neces Neural
-SVMs
-Decision Trees (este funcionó muy bien para mí cuando estaba haciendo un problema similar)
-Bostante con árboles de decisión / tocones
-¡Algo más!

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 grupos 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. Debes crear clases de valores de precios, como en una serie de rangos de precios para los cómics, para que puedas tener un número discreto (como 1 a 10) que represente el precio del cómic. Entonces puedes ejecutar fácilmente la clasificación.