domingomery / patrones

Curso Reconocimiento de Patrones - UC - Chile
https://domingomery.ing.puc.cl/teaching/patrones/
143 stars 39 forks source link

Tarea 4 #4

Closed domingomery closed 5 years ago

domingomery commented 5 years ago

[ Tarea 4]

Objetivo: Aprender a entrenar clasificadores basados en SVM y en Redes Neuronales.

En la base de datos xdata.mat se encuentra un conjunto de datos de dos características (x1 y x2) y dos clases (1 y 2). El conjunto de datos ha sido dividido en subconjuntos de entrenamiento (Xtrain,ytrain), validación (Xval,yval) y prueba (Xtest,ytest), que cuentan con 1000, 200 y 300 muestras respectivamente. Entrene y pruebe distintos clasificadores 1) SVM y 2) redes neuronales. Reporte el mejor accuracy de cada uno de ellos (A1 para SVM y A2 para redes neuronales).

EVALUACIÓN

  1. Informe: 20% (se evalúa calidad del informe, explicaciones, redacción, ortografía)

  2. Solución propuesta: 50% (se evalúa la calidad del método, si el diseño es robusto y rápido para el problema dado, si los experimentos diseñados y los datos empleados son adecuados, si el código es entendible, limpio, ordenado y bien comentado).

  3. Resultados obtenidos: 30% (la nota en este item es 30% x A, donde A es (A1+A2)/2 + B, con A1 y A2 es el accuracy para SVM y redes neuronales respectivamente y B una constante calculada de tal forma que el mejor resultado en el curso obtenga A = 1.

domingomery commented 5 years ago

Usar el conjunto de validación para ajustar todos los parámetros de los clasificadores, es decir se entrena con el conjunto de Training de tal forma que se maximice el accuracy en el conjunto de Validación... una vez finalizado este proceso (maximizado el accuracy en el conjunto de validación) se prueba el calsificador sobre el conjunto de Testing y se reporta el accuracy (sobre el conjunto de Testing).

Geeermy commented 5 years ago

¡Hola!

¿Hay algún tipo de restricción en cuanto a las librerías que se pueden utilizar para implementar redes neuronales en Python? Pregunto porque si bien está scikit-learn, existen otras donde se pueden implementar, pero no sé si dificultará el proceso de corrección dada su posible instalación.

¡Gracias!

domingomery commented 5 years ago

cuales librerías serían?

On Wed, May 1, 2019 at 8:03 PM Geeermy notifications@github.com wrote:

¡Hola!

¿Hay algún tipo de restricción en cuanto a las librerías que se pueden utilizar para implementar redes neuronales en Python? Pregunto porque si bien está scikit-learn, existen otras donde se pueden implementar, pero no sé si dificultará el proceso de corrección dada su posible instalación.

¡Gracias!

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/4#issuecomment-488507203, or mute the thread https://github.com/notifications/unsubscribe-auth/AAD3BSRDJ5OXKVMAIWCYDT3PTIVUZANCNFSM4HJMJ2OA .

Geeermy commented 5 years ago

pytorch y/o keras (no la usaré, pero preguntaré también por tensorflow por si alguien quiere usarla)

domingomery commented 5 years ago

se pueden usar, pero no creo que sea necesario.

Saludos. Domingo

On Thu, May 2, 2019 at 10:51 AM Geeermy notifications@github.com wrote:

pytorch y/o keras (no la usaré, pero preguntaré también por tensorflow por si alguien quiere usarla)

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/4#issuecomment-488704156, or mute the thread https://github.com/notifications/unsubscribe-auth/AAD3BSQVYE7DLNL3Q5ZJVHLPTL5VDANCNFSM4HJMJ2OA .

AlfonsoIgnacioV commented 5 years ago

Estimado profesor:

  1. Sólo para ver si entendí bien. Entonces ¿cada uno de los experimentos deberíamos hacerlo en el set de validación modificando distintos parámetros, y luego reportar el accuracy en test sólo con los parámetros del mejor experimento (mejor accuracy en validación)?
  2. Pareciera ser que existe una fuente de aleatoriedad en los experimentos, porque al correrlos veces distintas, los resultados que entregan son distintos (al menos para la red neuronal). ¿Cómo debemos lidiar con ella en términos del accuracy, hay algún criterio?
  3. ¿Hay alguna forma mejor de aumentar los accuracies, alguna propuesta o algo (o algo que vayamos a ver en clases), o la idea es que solamente vamos probando y quedándonos con lo mejor?

Muchas gracias Saludos cordiales

domingomery commented 5 years ago

Contesto las tres preguntas:

  1. Correcto, ésa es la idea.
  2. Las redes neuronales se inicializan por lo general con pesos aleatorios, de ahi que los accuracies sean distintos cada vez que se entrenan. En lo posible reportar el promedio de 5-10 corridas.
  3. La idea es que prueben y que aprendan a entrenar este tipo de clasificadores para que puedan descubrir que es mejor y que es peor. No se queden solo con lo visto en clases, investiguen también por su cuenta.

On May 5, 2019, 11:23 PM -0400, AlfonsoIgnacioV notifications@github.com, wrote:

Estimado profesor:

  1. Sólo para ver si entendí bien. Entonces ¿cada uno de los experimentos deberíamos hacerlo en el set de validación modificando distintos parámetros, y luego reportar el accuracy en test sólo con los parámetros del mejor experimento (mejor accuracy en validación)?
  2. Pareciera ser que existe una fuente de aleatoriedad en los experimentos, porque al correrlos veces distintas, los resultados que entregan son distintos (al menos para la red neuronal). ¿Cómo debemos lidiar con ella en términos del accuracy, hay algún criterio?
  3. ¿Hay alguna forma mejor de aumentar los accuracies, alguna propuesta o algo (o algo que vayamos a ver en clases), o la idea es que solamente vamos probando y quedándonos con lo mejor?

Muchas gracias Saludos cordiales — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

Geeermy commented 5 years ago

¡Hola!

Como en el enunciado no aparece, quería saber si es válido normalizar los datos antes de pasarlos por los clasificadores, o si solo es válido cambiar los parámetros de los clasificadores.

¡Gracias!

domingomery commented 5 years ago

es válido hacer normalización... Saludos. Domingo On May 6, 2019, 7:51 PM -0400, Geeermy notifications@github.com, wrote:

¡Hola! Como en el enunciado no aparece, quería saber si es válido normalizar los datos antes de pasarlos por los clasificadores, o si solo es válido cambiar los parámetros de los clasificadores. ¡Gracias! — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

nfurrejola commented 5 years ago

Hola! Para la gente que usa MATLAB en WINDOWS escribí unos pasos para instalar la libreria LIBSVM (https://www.csie.ntu.edu.tw/~cjlin/libsvm/) que pide la función Bcl_libsvm, ya que la instalación puede provocar algunos problemas.

1) Instalar compilador MinGW64 (Get Add ons en matlab, Home -> Add Ons). Se puede utilizar su versión favorita de Visual C++ compatible también. 2) En "command window" correr mex -setup y luego mex -setup C++. Si tienen más de un compilador instalado elegir uno (MinGW64 ha funcionado bien) 3) Descargar ZIP de https://www.csie.ntu.edu.tw/~cjlin/libsvm. 4) Abrir make.m de carpeta "matlab" del zip de SVM descargado. 5) Correr make.m. Si presenta error cambiar instancias de CFLAGS por COMPFLAGS en el código. 6) Agregar carpeta con archivos compilados al path de matlab (Home -> set path ->add with subfolders -> libsvm-3.23->save) 7) Renombrar archivos compilados svmtrain y svmpredict por libsvmtrain y libsvmpredict (los con extensión .mexw64)

Saludos!

domingomery commented 5 years ago

mil gracias!

saludos. Domingo On May 8, 2019, 11:45 PM -0400, nfurrejola notifications@github.com, wrote:

Hola! Para la gente que usa MATLAB en WINDOWS escribí unos pasos para instalar la libreria LIBSVM (https://www.csie.ntu.edu.tw/~cjlin/libsvm/) que pide la función Bcl_libsvm, ya que la instalación puede provocar algunos problemas.

  1. Instalar compilador MinGW64 (Get Add ons en matlab, Home -> Add Ons). Se puede utilizar su versión favorita de Visual C++ compatible también.
  2. En "command window" correr mex -setup y luego mex -setup C++. Si tienen más de un compilador instalado elegir uno (MinGW64 ha funcionado bien)
  3. Descargar ZIP de https://www.csie.ntu.edu.tw/~cjlin/libsvm.
  4. Abrir make.m de carpeta "matlab" del zip de SVM descargado.
  5. Correr make.m. Si presenta error cambiar instancias de CFLAGS por COMPFLAGS en el código.
  6. Agregar carpeta con archivos compilados al path de matlab (Home -> set path ->add with subfolders -> libsvm-3.23->save)
  7. Renombrar archivos compilados svmtrain y svmpredict por libsvmtrain y libsvmpredict (los con extensión .mexw64)

Saludos! — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

aiquinones commented 5 years ago

Hola! Es posible mezclar el set de test y validación en uno, y después dividirlo en 1000 y 200 (posiblemente de manera aleatoria) para un entrenamiento? O el set de validación debe ser los originales 200 ejemplos siempre?

domingomery commented 5 years ago

sí es posible… lo explicas bien en el informe

saludos. Domingo On May 9, 2019, 9:23 AM -0400, Alejandro Quiñones notifications@github.com, wrote:

Hola! Es posible mezclar el set de test y validación en uno, y después dividirlo en 1000 y 200 (posiblemente de manera aleatoria) para un entrenamiento? O el set de validación debe ser los originales 200 ejemplos siempre? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

MortizDX commented 5 years ago

Usar el conjunto de validación para ajustar todos los parámetros de los clasificadores, es decir se entrena con el conjunto de Training de tal forma que se maximice el accuracy en el conjunto de Validación... una vez finalizado este proceso (maximizado el accuracy en el conjunto de validación) se prueba el calsificador sobre el conjunto de Testing y se reporta el accuracy (sobre el conjunto de Testing).

Tengo una duda con este proceso: en tareas pasadas, usábamos solo sets de training y testing, y modificábamos nuestro modelo para lograr el mejor resultado en el test. Ahora que se separa training en dos (con validation ahora), ¿qué lo hace tan diferente? ¿No nos conviene igual ver como resultó en el testing y modificar/hacer arreglos a los pesos o estaríamos haciendo trampa allí? (creo que lo mencionó en clases, pero no me quedó del todo claro)

domingomery commented 5 years ago

La idea (de estimar los parámetros maximizando el accuracy en la validación y reportar el accuracy en el testing) es para comprobar que tan bien generaliza el modelo entrenado con nuevos datos. Así no hay sobre-ajuste a los datos de testing. Saludos. Domingo On May 10, 2019, 4:52 PM -0400, Mauricio Ortiz notifications@github.com, wrote:

Usar el conjunto de validación para ajustar todos los parámetros de los clasificadores, es decir se entrena con el conjunto de Training de tal forma que se maximice el accuracy en el conjunto de Validación... una vez finalizado este proceso (maximizado el accuracy en el conjunto de validación) se prueba el calsificador sobre el conjunto de Testing y se reporta el accuracy (sobre el conjunto de Testing). Tengo una duda con este proceso: en tareas pasadas, usábamos solo sets de training y testing, y modificábamos nuestro modelo para lograr el mejor resultado en el test. Ahora que se separa training en dos (con validation ahora), ¿qué lo hace tan diferente? ¿No nos conviene igual ver como resultó en el testing y modificar/hacer arreglos a los pesos o estaríamos haciendo trampa allí? (creo que lo mencionó en clases, pero no me quedó del todo claro) — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

JavierBZ commented 5 years ago

Una duda, ¿la función Bcl_ann(X,d,op) de balu, crea una red usando un set de validación random dentro de X? Saludos