Sie sind auf Seite 1von 25

LABORATORIO NRO 05 1

APRENDIZAJE (MACHINE LEARNING)

En grupos de 2 personas desarrolla los siguientes ejercicios:

REGRESION LINEAL
1. Implementar la regresin lineal y ver cmo es que funciona con datos. Se necesitar bajar el cdigo inicial (starter code) y desempaquetar su contenido al directorio donde se desee completar el ejercicio. Si es necesario, usar el comando cd en Octave para cambiar al directorio antes de empezar los ejercicios. Adems se puede encontrar instrucciones de instalacin de Octave en la pgina Octave Installation. Archivos incluidos en este ejercicio: Ex1.m script en Octave que ayuda a dar pasos a travs del ejercicio. Ex1_multi.m script en Octave para las partes finales del ejercicio. Ex1data1.txt Conjunto de datos para regresin lineal con una variable. Ex1data2.txt Conjunto de datos para regresin lineal con mltiples variables. *warmUpExercise.m ejemplo simple de funciones en Octave. *plotData.m funcin para displayar el conjunto de datos. *computeCost.m funcin para calcular el costo de regresin lineal. *gradientDescentMulti.m algoritmo gradient descent para mltiples variables. +computeCostMulti.m funcin de costo para mltiples variables. +gradientDescentMulti.m gradient descent para mltiples variables. +FeatureNormalize.m Funcin para normalizar caractersticas. +normalEqn.m Funcin para calcular ecuaciones normales. * indica archivos que necesitas completar + indica archivos con ejercicios extras. A travs de este ejercicio, usars los scripts ex1.m y ex1_multi.m. Estos scripts configuran el conjunto de datos para los problemas y hacen llamadas a funciones que tu escribirs. No necesitas modificar ninguno de ellos. Solo requieres modificar las funciones en los otros archivos, siguiendo estas instrucciones. Para este ejercicios de programacin solo requieres completar la primera parte del ejercicio de implementar regresin lineal con una variable. La segunda parte del ejercicio, la cual podrs completar para una nota extra, cubre regresin lineal con mltiples variables. Los ejercicios usan Octave, un lenguaje de programacin de alto nivel para computaciones numricas. Puedes referirte a la pgina de ayuda para la instalacin del mismo. (https://class.coursera.org/ml/wiki/view?page=OctaveInstallation)

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales En la lnea de comandos de Octave, escribe help seguido del nombre de la funcin, para ver la ayuda del mismo. Por ejemplo help plot nos dar informacin para ploteo. Adems hay un manual de Octave aqu (Octave documentation pages ). A) Funcin simple en Octave La primera parte de ex1.m da ejercicio a la sintaxis de Octave. En el archivo warmUpExercise.m encontrars la cabecera de la funcin en Octave. Modifcala para retornar una matriz identidad 5x5 llenando el siguiente cdigo: A = eye(5); Luego ejecuta ex1.m (asumiendo que ests en el correcto directorio, escribe ex1 en el prompt de Octave) y deberas ver una salida similar a esta:

Ahora ex1.m esperar hasta que presiones una tecla, y luego correr el cdigo para la siguiente parte de la tarea. Si deseas salir, escribe ctrl-c. B) Regresin lineal con una variable En esta parte del ejercicio, implementars regresin lineal con una variable para predecir ganancias de un camin de comidas. Supn que ests en un restaurante y ests considerando diferentes ciudades para aperturar un nuevo local. La cadena tiene ya camiones de comida en varias ciudades y tienes datos de ganancias y poblacin para esas ciudades. Te gustara usar esos datos para ayudarte a seleccionar cual ciudad se debera expandir a continuacin. El archivo ex1data1.txt contiene el conjunto de datos para nuestro problema de regresin lineal. La primer columna es la poblacin de una ciudad y la segunda es la ganancia de un camin de comida en esa ciudad. Un valor negativo para la ganancia indica una prdida. El script ex1.m ha sido programado para cargar los datos. B.1 Graficando los datos Antes de empezar cualquier tarea, es usual entender los datos visualizndolos. Para este conjunto de datos puedes usar un Plot scatter para visualizarlos ya que solo hay 2

LABORATORIO NRO 05 3 propiedades (ganancia y poblacin). En ex1.m el conjunto de datos es cargado en las variables X e y: data = load(ex1data1.txt); X = data(:, 1); y = data(:, 2); m = length(y); A continuacin, el script llama a la funcin plotData para crear un scatter plot de los datos. Tu trabajo es completar plotData.m para dibujar el plot; modifica el archivo y llena el siguiente cdigo: plot(x,y,rx,MarkerSize, 10); ylabel(Ganancia en $10000s); xlabel(Poblacin de la ciudad en 10000s); Ahora, cuando continuas ejecutando ex1.m nuestro resultado final deber ser como la figura 1, con las mismas x rojas y etiquetas en los ejes.

B.2 Gradient Descent En esta parte, encajars los parmetros de la regresin lineal ! a nuestro conjunto de datos usando gradient descent. - Actualizando las ecuaciones: El objetivo de la regresin lineal es minimizar la funcin de costo:

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

donde la hiptesis h (x) es dada por el modelo lineal:


!

recordando que los parmetros de tu modelo son los valores !j. Estos son los valores que ajustars para minimizar el costo J(!). Una manera de hacerlo es usar el algoritmo batch gradient descent. En este algoritmo cada iteracin realiza las modificaciones:

Con cada paso del algoritmo gradient descent, tus parmetros !j se acercan a los valores ptimos que producirn el costo mnimo J(!). Nota de implementacin: Almacenamos cada ejemplo como una fila en la matriz X en Octave. Para tomar en cuenta el trmino interceptado !0, aadimos una columna inicial adicional a X y le damos el valor de 1 a todos. Esto nos permite tratar !0 como simplemente otra caracterstica. - Implementacin En ex1.m tenemos configurado ya los datos para regresin lineal. En las siguientes lneas adicionaremos otra dimensin a nuestros datos para acomodar el trmino interceptado !0. Adems inicializamos los parmetros a 0 y el ratio de aprendizaje alpha a 0.01. X = [ones(m, 1) data(:,1)]; theta = zeros(2,1); iterations = 1500; alpha = 0.01; - Calculando la funcin de Costo J(!) A medida que usas gradient descent para aprender a minimizar la funcin de costo J(!), es usual monitorizar la convergencia calculando el costo. En esta parte implementaremos una funcin para calcular J(!) as se puede chequear la convergencia de tu implementacin de gradient descent. La siguiente tarea es completar el cdigo en el archivo computeCost.m el cual es una funcin que calcula J(!). A medida que vas haciendo esto, recuerda que las variables X e y

LABORATORIO NRO 05 5 no tienen valores escalares, sino matrices cuyas columnas representan los ejemplos del conjunto de entrenamiento. Una vez que has completado la funcin, el siguiente paso en ex1.m correr la funcin de costo una vez usando ! inicializado en ceros, e imprimiendo los costos. Deberas ver un costo de 32.07. - Gradient descent A continuacin implementars gradient descent en el archivo gradientDescent.m. La estructura cclica ya ha sido escrita, as que solo ser necesario modificar los valores de ! dentro de cada iteracin. A medida que programas, asegrate de entender que estas tratando de optimizar y qu se est modificando. Recuerda que el costo J(!) es parametrizado por el vector !, no por X ni y. Esto es, minimizamos el valor de J(!) cambiando los valores del vector !, no cambiando X ni y. Una buena manera de verificar que gradient descent est trabajando correctamente es ver los valores de J(!) y chequear que est decrementando con cada paso. El cdigo de inicio para gradientDescent.m llama a computeCost en cada iteracin e imprime su costo. Asumiendo que has implementado gradient descent y computeCost correctamente, el valor de J(!) nunca debe incrementarse, y debera converger a un valor al final del algoritmo. Luego de haber terminado, ex1.m usar los parmetros finales para plotear la lnea de encaje. El resultado debera verse como la Figura 2.

Los valores finales para ! sern usados para hacer predicciones en ganancias en las reas de 35000 y 70000 personas. Note la manera que la lnea continua en ex1.m usa multiplicacin de matrices, en vez de sumas explcitas o ciclos, para calcular predicciones. Este es un ejemplo de vectorizacin de cdigo en Octave.

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales predict1 = [1, 3.5] * theta; predict2 = [1, 7] * theta; B.3 Depuracin: Aqu hay algunas cosas que mantener en mente cuando implementas gradient descent: - Los ndices de arreglos en Octave empiezan desde uno, no de cero. Si ests colocando !0 y !1 en un vector llamado theta, los valores sern theta(1) y theta(2). - Si encuentras muchos errores en tiempo de ejecucin, revisa las operaciones de matrices para asegurarte que ests aadiendo y multiplicando matrices en dimensiones compatibles. Imprimir las dimensiones de las variables con el comando size te ayudar a depurar tu programa. - Por defecto, Octave interpreta operadores matemticos como operaciones en matrices. Este es una fuente comn de errores de incompatibilidad de tamaos. Si no quieres multiplicacin de matrices, necesitas agregar un punto en tu notacin para especificarlo en Octave. Por ejemplo, A*B multiplica matrices, mientras A.*B hace una operacin de multiplicacin elemento a elemento. B.4 Visualizando J(! ) Para entender mejor la funcin de costo J(!), dibujaras el costo sobre un plano cartesiano 2d de valores !0 y !1 . No necesitaras codificar nada nuevo aqu, pero debers entender cmo est creando las imgenes el cdigo que acabas de escribir. El siguiente paso de ex1.m hay un cdigo programado para calcular J(!) sobre una grilla de valores usando la funcin computeCost que has escrito.

Luego de que estas lneas son ejecutadas, tendrs un arreglo 2D de valores J(!). El script ex1.m usar estos valores para producir una superficie y un contorno de J(!) usando los comandos surf y contour. Los ploteos debern verse algo as como la Figura 3:

LABORATORIO NRO 05 7

El propsito de estos grficos es mostrar cmo J(!) varia con los cambios en !0 y !1. La funcin de costo J(!) tiene una forma de bowl y un mnimo global. Es ms fcil verlo en el ploteo de contorno que el la superficie 3D. Este mnimo es el punto ptimo para !0 y !1, y en cada paso del algoritmo gradient descent ste se mueve ms cerca de este punto.

Crditos Extra

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

LABORATORIO NRO 05 9

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

10

1 LABORATORIO NRO 05 1

11

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

12

1 LABORATORIO NRO 05 3

REGRESION LOGISTICA
2. Implementar la Regresin Logstica y aplicarla a 2 conjuntos de datos. Antes de iniciar se necesitar bajar el starter code y desempaquetarlo en el directorio donde queremos completar el ejercicio. Si es necesario, usar el comando cd de Octave para cambiar este directorio antes de iniciar el ejercicio. Archivos incluidos en este ejercicio: Ex2.m script en Octave que ayuda a dar pasos a travs del ejercicio. Ex2_reg.m script en Octave para las partes finales del ejercicio. Ex2data1.txt Conjunto de datos de entrenamiento para la primera mitad del ejercicio. Ex2data2.txt Conjunto de datos de entrenamiento para la segunda mitad del ejercicio. mapFeature.m Funcin para generar caractersticas polinomiales. plotDecisionBoundary.m Funcin para plotear los lmites de decisin del clasificador. *plotData.m funcin para displayar el conjunto de datos de clasificacin 2D. *sigmoid.m funcin sigmoideo *costFunction.m funcin de costo para regresin logstica *predict.m funcin de prediccinn de regresin logstica *costFunctionReg.m Costo de Regresin logstica regularizada A travs de este ejercicio, usars los scripts ex2.m y ex2_reg.m. Estos scripts establecen el conjunto de datos para los problemas y hacen llamadas a funciones que escribiremos. No necesitamos modificar ninguna de ellas. Solo se requiere modificar las funciones en los otros archivos, siguiendo las instrucciones en esta descripcin. Los ejercicios en este curso usan Octave, el lenguaje de programacin para computaciones numricas. A) Regresin logstica En esta parte del ejercicio, construirs un modelo de regresin logstica para predecir si un estudiante es admitido o no a una universidad. Suponga que eres un administrador de un departamento universitario y quieres determinar el chance de admisin de cada postulante basado en sus resultados de 2 exmenes. Cuentas con los datos histricos de previos postulantes que puedes usar como conjunto de entrenamiento para regresin logstica. Por cada ejemplo de entrenamiento se tiene las notas de 2 exmenes y la decisin de admisin. El trabajo es construir un modelo de clasificacin que estime la probabilidad de admisin del postulante basado en las notas de los 2 exmenes. Estos datos se encuentran en ex2.m. Desde all se te guiar durante el ejercicio.

13

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales B) Visualizar los datos Antes de empezar a implementar cualquier algoritmo de aprendizaje, es bueno visualizar los datos si es posible. En la primera parte de ex2.m el cdigo cargar los datos y los visualizar en un plot 2D llamando a la funcin plotData. Completars el cdigo en plotData para que visualice una figura como la Figura 1, donde los ejes son las notas de los 2 exmenes y los ejemplos positivos y negativos son visualizados con diferentes marcas:

Para ayudarte a familiarizar con los ploteos, se ha dejado el archivo plotData.m vaco as se debe intentar implementarlo. Sin embargo, este es un ejercicio opcional. Adems se provee una implementacin debajo, as que se puede copiar o referirse a ella. Si se escoge copiar este ejemplo, asegrese de haber aprendido que hace cada comando, consultando la documentacin de Octave.

14

1 LABORATORIO NRO 05 5 C) Implementacin C.1 Ejercicio de calentamiento: Funcin sigmoide Antes de empezar con la funcin de costo actual, recuerde que la hiptesis de regresin logstica est definida as:

donde la funcin g es la funcin sigmoideo. Esta funcin est definida as:

El primer paso es implementar esta funcin en sigmoid.m as podr ser llamada por el resto de tu programa. Cuando hayas terminado, intenta probar unos cuantos valores llamando a sigmoid(x) en la lnea de comandos de Octave. Para valores positivos grandes de x, el sigmoideo debe ser cercano a 0. Evaluar sigmoid(0) debe dar exactamente 0.5. Tu cdigo debe trabajar con vectores y matrices. Para una matriz, tu funcin debe mostrar la funcin sigmoideo en cada elemento. C.2 Funcin de costo y gradiente Ahora debers implementar la funcin de costo y la gradiente para regresin logstica. Completa el cdigo en costFunction.m para retornar el costo y el gradiente. Recuerda que la funcin de costo en regresin logstica es:

y la gradiente del costo es un vector de la misma longitud que ! donde el j-simo elemento (para j=0,1,,n) est definido como sigue:

Nota que mientras este gradiente parece idntico al gradiente de regresin lineal, la frmula es diferente pues la regresin logstica y la lineal tienen diferentes definiciones de h (x). Una vez que hayas terminado, ex2.m llamar a costFunction usando los parmetros de !. Debers ver que el costo es ms o menos 0.693.
!

15

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

C.3 Parmetros de aprendizaje usando fminunc En la tarea previa, hallaste los parmetros ptimos del modelo de regresin lineal, al implementar gradient descent. Escribiste la funcin de costo y calculaste su gradiente, luego seguiste los pasos de gradient descent. Ahora, en vez de tomar los pasos de gradient descent, usars la funcin de Octave llamada fminunc. La funcin fminunc de Octave es un solucionador de optimizacin que encuentra el mnimo de una funcin sin restricciones. Para la regresin logstica, tu deseas optimizar la funcin de costo J(!) con los parmetros !. Concretamente, usars fminunc para hallar los mejores parmetros ! para la funcin de costo de regresin logstica, dado un conjunto de datos fijo ( de valores para X e y). Pasars los siguientes argumentos a fminunc: Los valores iniciales de los parmetros que tratamos de optimizar. Una funcin que, dado un conjunto de entrenamiento y un particular !, calcula el costo de la regresin logstica y su gradiente con respecto a ! para el conjunto de datos (X,y). En ex2.m tenemos el cdigo escrito para llamar a fminunc con los argumentos correctos.

En este cdigo, primero hemos definido las opciones a ser usadas por fminunc. Especficamente establecemos GradObj en on, lo que significa que nuestra funcin retorna ambos el costo y el gradiente. Esto permite a fminunc usar el gradiente cuando se minimiza la funcin. Adems establecemos MaxIter en 400 para que fminunc se ejecute como mximo 400 pasos antes de terminar. Para especificar la funcin actual que estamos minimizando, usamos @(t)(costFunction(t,X,y)) para especificar las funciones. Esto crea una funcin con argumento t, la cual llama a costFunction. Esto nos permite envolver costFunction para usarlo con fminunc. Si hemos completado fminunc correctamente, fminunc converger en los parmetros correctos de optimizacin y retornar los valores finales del costo y !. Note que al usar fminunc no hay que escribir ciclos, o establecer rangos de aprendizaje como se hizo para gradient descent. Esto es todo para fminunc: solo se necesita proveer una funcin que calcule el costo y el gradiente. Una vez que fminunc completa, ex2.m llamar a tu funcin costFunction usando los parmetros opcionales de !. Se debera ver el costo ms o menos 0.203. El valor final de ! ser usado para plotear el lmite de decisin en los datos de entrenamiento, resultando una figura similar a la Figura 2:

16

1 LABORATORIO NRO 05 7

Adems animamos a que se vea en el cdigo en plotDecisionBoundary.m para ver cmo se plotea tal lmite usando los valores !. C.4 Evaluando la regresin logstica Luego de aprender los parmetros, puedes usar el modelo para predecir si un postulante en especial ser admitido o no. Para un estudiante con nota en el examen1 igual a 45 y nota en examen2 de 85, deberas esperar ver una probabilidad de admisin de 0.776. Otra forma de evaluar la calidad de los parmetros que hemos encontrado es ver cuan bien el modelo aprendido predice en nuestro conjunto de entrenamiento. En esta parte, tu trabajo es completar el cdigo en predict.m. La funcin predict producir un 1 o un 0 dado un conjunto de datos y un vector de parmetros aprendidos. Luego de que completes el cdigo en predict.m, el script ex2.m proceder a reportar la exactitud del entrenamiento de tu clasificador calculando el porcentaje de ejemplos que se obtuvo correctamente.

17

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales 3. REGRESION LOGISTICA REGULARIZADA En esta parte de los ejercicios, implementars regresin logstica regularizada para predecir si los microchips de una planta de fabricacin pasa la prueba de calidad (AQ). Durante la QA, cada microchip pasa varios test para asegurarse que su funcionamiento es correcto. Suponga que eres un administrador de produccin de la fbrica y tienes los resultados de algunos microchips en 2 diferentes test. Con estos resultados, te gustara determinar si los microchips deben ser aceptados o rechazados. Para ayudarte a la decisin, tienes un conjunto de datos de resultados de test de microchips pasados, con los cuales puedes construir un modelo de regresin logstico. Usars otro scripts, ex2_reg.m para completar esta porcin del ejercicio. A. Visualizando los datos Similar a las partes previas, plotData es usado para generar una figura como la Figura 3, donde los ejes son los 2 test scores, y los ejemplos positivos (y=1, aceptado) y negativos ( y=0, rechazado) son mostrados con diferentes marcas:

La figura 3 muestra que nuestro conjunto de datos no puede ser separado por una lnea recta en los ejemplos positivos y negativos. Por tanto, una aplicacin de regresin

18

1 LABORATORIO NRO 05 9 logstica no mostrar buenos resultados con este conjunto de datos ya que regresin logstica solo es capaz de hallar un lmite de decisin lineal. B. Mapeo de Caractersticas Una forma de encajar los datos mejor es crear ms caractersticas de cada dato puntual. En la funcin entregada mapFeature.m mapearemos las caractersticas en todos los trminos polinomiales de x1 y x2 hasta la potencia de 6.

Como resultado de este mapeo, nuestro vector de 2 caractersticas (las notas en los 2 test de QA) han sido transformadas a un vector de 28 dim. Un clasificador de regresin logstica entrenado en estas caractersticas de alta dimensin, tendr una mayor lmite de decisin compleja y aparecer no lineal cuando se le dibuje en un ploteo 2D. Mientras que el mapeo de caractersticas nos permite construir un clasificador ms expresivo, es adems ms susceptible a overfitting. En la siguiente parte del ejercicio, tendrs que implementar regresin logstica regularizada para encajar los datos y adems ver cmo la regularizacin puede ayudar a combatir el problema de overfitting (sobreentrenamiento)

19

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales C. Funcin de costo y gradiente Ahora implementars cdigo para calcular la funcin de costo y gradiente para regresin logstica regularizada. Completa el cdigo en costFunctionReg.m para retornar el costo y el gradient. Recuerda que la funcin de costo regularizada en regresin logstica es:

Note que no se debe regularizar el parmetro !0. En Octave, recuerda que los ndices se inician en 1, as no debers regularizar el parmetro theta(1) en el cdigo. El gradiente de la funcin de costo es un vector donde el elemento j-esimo es definido como sigue:

Una vez que has terminado, ex2_reg.m llamar a la funcin costFunctionReg usando el valor inicial de ! (inicializado en todos ceros). Deberas ver que el costo es ms o menos 0.693. C.1 Parmetros aprendidos usando fminunc Similar a las partes previas, usars la funcin fminunc para aprender los parmetros ptimos !. Si has completado el costo y el gradiente para regresin logstica regularizada (costFunctionReg.m) correctamente, sers capaz de avanzar a la siguiente parte de ex2_reg.m para aprender los parmetros ! usando fminunc. D. Ploteando los lmites de decisin Para ayudarte a visualizar el modelo aprendido por este clasificador, hemos provedo la funcin plotDecisionBoundary.m la cual plotea el lmite de decisin que separa los ejemplos positivos de los negativos. En plotDecisionBoundary.m, hemos dibujado el lmite de decisin no lineal al calcular las predicciones del clasificador en una grilla del espacio y luego hemos dibujado un ploteo de contorno donde las predicciones cambiar de y=0 a y=1. Luego de aprender los parmetros !, el siguiente paso en ex_reg.m plotear un lmite de decisiones igual a la Figura 4:

20

2 LABORATORIO NRO 05 1

Ejercicios Opcionales

21

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales

22

2 LABORATORIO NRO 05 3

PROBLEMAS EN OCTAVE
1. Problema 1

2. Problema 2

23

Escuela Prof. De Ingeniera de Sistemas UNSA- M.Sc. Carlo Corrales 3. Problema 3

4. Problema 4

24

2 LABORATORIO NRO 05 5

5. Problema 5

25

Das könnte Ihnen auch gefallen