IA - Laboratorio 1 (1).pdf

download IA - Laboratorio 1 (1).pdf

of 15

Transcript of IA - Laboratorio 1 (1).pdf

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    1/15

    1

    INTELIGENCIA ARTIFICIAL

    Laboratorio 1: Regresin Lineal

    Introduccin

    En este ejercicio, se implementar un algorithm de regresin lineal y se ver

    como este trabaja con datos. Antes de empezar con este ejercicio de

    programacin, se recomienda leer el material de la clase del tema asociado.

    Para empezar con el ejercicio, necesitar obtener el cdigo de inicio y

    descomprimir su contenido a la carpeta en la que desea completar el ejercicio. Si

    se necesita, usar el comando cd en Octave para cambiar a ese directorio antes de

    empezar este ejercicio.

    Tambin se puede encontrar instrucciones para instalar Octave en el documento

    adjunto Instalacin de Octave

    Archivos Incluidos en el ejercicio

    ex1.m - Script de Octave que ayudar a avanzar con el ejercicio

    ex1 multi.m - Script de Octave para la parte ltima 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 de una funcin simple en Octave

    [*] plotData.m - Funcin que muestra el conjunto de datos

    [*] computeCost.m - Funcin que calcula el costo de la regresin lineal

    [*] gradientDescent.m - Funcin que ejecuta el gradiente de descenso

    [] computeCostMulti.m - Funcin de costo para variables mltiples

    [] gradientDescentMulti.m - Gradiente de descenso para variables

    mltiples

    [] featureNormalize.m - Funcin para normalizar las caractersticas

    [] normalEqn.m - Funcin que calcula las ecuaciones normales

    * indica los archivos que necesitan ser completados

    Indica ejercicios adicionales

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    2/15

    2

    A traves del ejercicio, se usarn los scripts ex1.m yex1_multi.m.

    Estos scripts configuran el conjunto de datos para los problemas y realizan

    llamadas a las funciones que usted escribir. No necesita modificar ninguno de

    los scripts. Solo se requiere que modifique funciones en otros archivos,

    siguiendo las instrucciones en esta asignacin.

    Para este ejercicio de programacin, solo se requiere que complete la primera

    parte del ejercicio para implementar regresin lineal con una variable. La

    segunda parte del ejercicio, la cual puede completar para obtener puntos

    adicionales, cubre regresin lineal con multiples variables.

    Donde conseguir ayuda

    Los ejercicios en este curso usan Octave, un lenguaje de programacin de alto

    nivel bien adaptado para clculos numricos.

    En la lnea de comandos de Octave, al escribir help seguida por el nombre

    de una funcin muestra la documentacin para una funcin incluida en el

    programa. Por ejemplo, help plot mostrar informacin de ayuda de como

    realizar un grfico.

    1. Funcin Simple de octave

    La primera parte de ex1.m brinda prctica con la sintaxis de Octave. En el

    archivo warmUpExercise.m, se encontrar el esquema de una funcin de

    Octave. Modificarla para que retorne una matriz identidad de 5 x 5 rellenando el

    siguiente cdigo:

    A = eye(5);

    Cuando termine, ejecutar ex1.m (asumiendo que esta en directorio

    correcto, escribir ex1 en el prompt de Octave) y deber ver una salida similar

    a lo siguiente:

    ans =

    Diagonal Matrix

    1Octave es una alternativa libre a MATLAB. Para los ejercicios de programacin, es libre de usar

    ya sea Octave o MATLAB.

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    3/15

    3

    Ahora ex1.m pausar hasta que se presione cualquier tecla, y luego ejecutar

    el cdigo para la siguiente parte de la asignacin. S i d e s e a d e t e n e r l a

    e j e c u c i n , p r e s i o n a r l a s t e c l a s ctrl-c lo cual detendr la

    ejecucin a la mitad.

    1.1. Enviando la Solucin

    Despus de completar el ejercicio, este se debe de enviar a la direccin de correo

    electrnico [email protected] incluyendo la seccin y el grupo en el

    asunto, por ejemplo si el Grupo 1 de la seccin E va a enviar su trabajo, los

    integrantes del grupo deben escribir en el asunto: IA - Seccin E - Grupo 1.

    2. Regresin lineal con una variable

    En esta parte del ejercicio, se implementar regresin lineal con una variable

    para predecir las ganancias de un camin de comida. Suponga que usted es el

    CEO de una franquicia de restaurantes y est considerando diferentes ciudades

    para la apertura de un nuevo local. La cadena ya tiene camiones en varias

    ciudades y tiene datos de las ganancias y el nmero de habitantes para las

    ciudades.

    Te gustara usar estos datos para ayudarte a seleccionar cual sera la siguiente ciudad

    a expandirte.

    El archivo ex1data1.txt contiene el conjunto de datos para nuestro

    problema de regresin lineal. La primera columna es la poblacin de una ciudad yla segunda columna son las ganancias del camin de comida en esa ciudad. Un

    valor de ganancia negativa indica prdida.

    El script ex1.m ya ha sido configurado para que cargue estos datos por ti.

    2.1. Graficando los datos

    Antes de iniciar cualquier tarea, es usualmente de ayuda el entender los datos

    visualizndolos. Para este conjunto de datos, se puede usar un grfico de

    dispersin para visualizar los datos, dado que este tiene solo dos propiedades

    que graficar (ganancias y poblacin). (Muchos de otros ejemplos que se

    encontrar en la vida real son multidimensionales y no pueden ser graficados en

    2-d.)

    En ex1.m, el conjunto de datos es cargado del archivo a las variables X e y:

    data = load('ex1data1.txt'); % read comma separated data

    X = data(:, 1); y = data(:, 2);m = length(y); % number of training examples

    mailto:[email protected]
  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    4/15

    4

    Luego, el script llama a la funcin plotData para crear un grfico de

    dispersin de los datos. Su trabajo es completar plotData.m para dibujar el

    grfico; modificar el archivo y llenarlo con el siguiente cdigo:

    plot(x, y, 'rx', 'MarkerSize', 10); % Plot the data

    ylabel('Profit in $10,000s'); % Set the y!axis labelxlabel('Population of City in 10,000s'); % Set the x!axis label

    Ahora, cuando se continua ejecutando ex1.m, nuestro resultado final debera

    parecerse a la figura 1, con las mismas x" rojas de marcadores y etiquetas de ejes.

    Para aprender mas a cerca del comando plot, puede escribir help plot en el

    prompt de Octave o buscar en linea la documentacin del comando. (Para

    cambiar los marcadores a "x" roja, se us la opcin rx" junto con el comando plot,

    ejm.,plot(..,[tus opciones ac],.., rx); )

    2.2. Pendiente de descensoEn esta parte, se encontrar los parmetros de regresin lineal "para nuestro conjunto

    de datos usando la pendiente de descenso.

    Figure 1: Grfico de dispersin de los datos de entrenamiento

    Gananciasen$10000

    Poblacin de la ciudad en 10000s

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    5/15

    5

    2.2.1. Ecuaciones de actualizacin

    El objetivo de la regresin lineal es minimizar la funcin de costo

    donde la hiptesis h"(x) esta dada por el modelo lineal

    h"(x) = "Tx = "0 + "1x1

    Recuerde que los parmetros de su modelo son los valores de "j. Estos son

    los valores que ajustar para minimizar la funcin de costo J ("). Una forma de

    hacer esto es usando el algoritmo de pendiente de descenso batch. En lapendiente de descenso batch, cada iteracin realiza una actualizacin each

    iteration performs the update

    (simultneamente actualiza "jpara todos los j)

    Con cada paso de la pendiente de descenso, los parmetros"j se acercan ms a los

    valores ptimos que alcanzarn el costo mas bajo deJ (").

    Nota de implementacin: Almacenamos cada ejemplo como una fila en la matriz

    X en Octave. Para tomar en consideracin el termino de interceptacin ("0),

    adicionamos una primera columna adicional a X y fijamos todos los valores a

    uno. Esto nos permite tratar a "0 como simplemente otra caracterstica.

    2.2.2. Implementacin

    En ex1.m, ya se ha fijado los datos para regresin lineal. En las siguientes

    lineas, se adiciona otra dimensin a nuestros datos para acomodar el trmino deinterceptacin "0. Tambin inicializamos los parmetros iniciales a 0 y la tasa de

    aprendizaje alpha a 0.01.

    X = [ones(m, 1), data(:,1)]; % Add a column of ones to x

    theta = zeros(2, 1); % initialize fitting parametersiterations = 1500;alpha = 0.01;

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    6/15

    6

    2.2.3. Calculando el costo deJ (")

    A medida que se ejecuta la pendiente de descenso para aprender a minimizar la

    funcin de costo J ("), es de ayuda el monitorear la convergencia calculando el

    costo. En esta seccin, se implementar una funcin para calcular J (")entonces se puede verificar la convergencia de la implementacin de la

    pendiente de descenso.

    La siguiente tarea es completar el cdigo en el archivo computeCost.m, el

    cual es la funcin que calcula J ("). Al momento de hacerlo, recuerda que las

    variables X e y no son valores escalares, si no matrices cuyas filas representan

    los ejemplos del conjunto de entrenamiento.

    Una vez completada la funcin, el siguiente paso en ex1.m ejecutar

    computeCost una vez usando " inicializada a ceros, y se ver el costo

    impreso en la pantal la .

    Se debe esperar ver un costo de 32.07.

    2.2.4. Pendiente de descenso

    Seguidamente, se implementar la pendiente de descenso en el archivo

    gradientDescent.m. La estructura de bucle ha sido escrita por ti, y solo se

    necesita proporcionar las actualizaciones a "dentro de cada iteracin.

    A medida que se va programando, asegurarse de entender que es lo que se est

    tratando de optimizar y que es lo que se est actualizando. Tener presente que el

    costo J (") es parametrizado por el vector ", no X e y. Lo que significa que,

    minimizamos el valor deJ (") cambiando los valores del vector ", no cambiandoX

    oy.

    Una buena manera de verificar que la pendiente de descenso esta

    funcionando correctamente es mirando al valor de J (") y verificando que este

    est decreciendo con cada paso. El cdigo de inicio para gradientDescent.m

    llama a computeCost en cada iteracin e imprime el costo. Asumiendo que se

    ha implementado la pendiente de descenso y computeCost correctamente, el

    valor deJ (") nunca debe incrementarse, y deber converger a un valor estable al final

    del algoritmo.

    Despus de finalizar, ex1.m usar los parmetros finales para graficar elencaje lineal. El resultado debe verse algo como la figura 2:

    Los valores finales para "tambin sern usados para hacer predicciones de las

    ganancias en reas de 35,000 y 70,000 personas. Notar la forma en que las

    siguientes lineas en ex1.m usan la multiplicacin de matrices, en lugar de sumas

    explcitas o hacer un bucle, para calcular las predicciones. Este es un ejemplo de

    vectorizacin de cdigo en Octave.

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    7/15

    7

    predict1 = [1, 3.5] * theta;

    predict2 = [1, 7] * theta;

    2.3 Depurando

    Aqu hay algunas cosas para tener en mente al momento de implementar la pendiente

    de descenso:

    Los indices de los arreglos en Octave inician en uno, no en cero. Si se est

    almacenando "0 y "1 en un vector llamado theta, los valores sern theta(1)

    y theta(2).

    Si ve muchos errores al momento de la ejecucin, inspeccionar la matriz de

    operacin para asegurarse que se est sumando y multiplicando matrices de

    dimensiones compatibles. Imprimiendo las dimensiones de las variablescon el comando size te ayudar a depurar.

    Figure 2: Datos de entrenamiento con regresin lineal encajada

    Por defecto, Octave interpreta los operadores matemticos como si fueran

    operadores de matrices. Esto es una fuente comn de errores de

    incompatibilidad por tamao. Si no se quiere una multiplicacin de

    matrices, se necesita agregar un punto para especificar esto a Octave. Por

    ejemplo ejemplo, A*B realiza la multiplicacin de matrices, mientras

    Ganancias

    en$10000

    Poblacin de la ciudad en 10000s

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    8/15

    8

    A.*B realiza una multiplicacin elemento por elemento.

    2.4 VisualizandoJ (!)

    Para entender la funcin de costo J (") mejor, se graficar ahora la funcin de

    costo sobre una cuadrcula de dos dimensiones con valores de "0 y "1. No se

    necesita codificar nada nuevo para esta parte, pero debe entender como el

    cdigo que haz escrito esta creando estas imgenes.

    En el siguiente paso de ex1.m, hay cdigo escrito para calcular J (") sobre

    la cuadrcula de valores usando la funcin computeCost que se escribi.

    % initialize J vals to a matrix of 0's

    J_ vals = zeros(length(theta0_ vals), length(theta1_ vals));

    % Fill out J_vals

    for i = 1:length(theta0_vals)

    forj = 1:length(theta1_vals)

    t = [theta0_ vals(i); theta1_ vals(j)];

    J_vals(i,j) = computeCost(x, y, t);

    endend

    Despus que estas lineas son ejecutadas, se tendr un arreglo de 2-D de

    valores de J ("). El script ex1.musar luego estos valores para producir una

    superficie y un grfico de nivel de J (") usando los comandos surf y

    contour. Los grficos deben verse similares como la figura 3:

    Figura 3: Funcin de costoJ (")

    "#$ %&'()*+,( "-$ .)/*+0 1( 2,3(45 6078)#210 (4 692,60

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    9/15

    9

    El propsito de este grfico mostrar como vara J (") con los cambios en "0

    y "1. La funcin de costo he cost function J (") tiene forma de tazn y tiene un

    mnimo global. (Esto es mas fcil de ver en la grfica de nivel que en la

    superficie en 3D). Este mnimo es el punto ptimo para "0 y "1, y cada paso de

    la pendiente de descenso se acerca a este punto.

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    10/15

    10

    Ejercicio de crditos extra (opcional)

    Si haz completado de manera exitosa el material previo, felicitaciones! Ahora

    entiendes regresin lineal y debes ser capaz de empezar a usar tu propio

    conjunto de datos.

    Para el resto de este ejercicio de programacin, se ha incluido los siguientes

    ejercicios que darn crditos extra. Estos ejercicios te ayudarn a ganar un

    entendimiento mas profundo del material, y si eres capas de realizarlos, te

    alentamos a que los completes tambin.

    3. Regresin lineal con mltiples variables

    En esta parte, se implementar regresin lineal con mltiples variables parapredecir los precios de casas. Supongamos que est vendiendo casas y quiere

    saber cual ser un buen precio de mercado. Una manera de hacer esto es

    primeramente recolectar informacin de casas recientemente vendidas y hacer un

    modelo de precios de casas.

    El archivo ex1data2.txt contiene un conjunto de entrenamiento del

    precio de casas en Portland, Oregon Estados Unidos. La primera columna es el

    tamao de la casa (en pies cuadrados), la segunda columna es el nmero de

    habitaciones, y la tercera columna es el precio de la casa.

    El script ex1_multi.m ha sido escrito para ayudarte a travs de este

    ejercicio.

    3.1. Normalizacin de caractersticas

    El script ex1_multi.m iniciar cargando y mostrando algunos valores de este

    grupo de datos. Mirando los valores, notar que el tamao de las casas son

    aproximadamente 1000 veces el nmero de habitaciones. Cuando las

    caractersticas difieren por varios ordenes de magnitud, primero realizando el

    escalado de las caractersticas puede hacer que la pendiente de descenso

    converja de manera mas rpida.

    Tu tarea es completar el cdigo en featureNormalize.m para

    Restar el valor promedio de cada caracterstica del conjunto de datos.

    Despus de restar el promedio, adicionalmente escalar (dividir) los valores

    de las caractersticas por su respectiva desviacin estndar.

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    11/15

    11

    La desviacin estndar es una manera de medir cuanta variacin hay en el

    rango de valores de una caracterstica particular (muchos de los puntos dato

    estarn entre 2 de desviacin estndar del promedio); esta es una alternativa a

    tomar el rango de valores (max-min). En Octave, se puede usar la funcin std

    para calcular la desviacin estndar. P o r e j e m p l o , d e n t r o d e

    featureNormalize.m, la cantidad X(:,1) contiene todos los valores de

    x1 (tamaos de las casas) en el grupo de entrenamiento, entonces std(X(:,

    1)) calcula la desviacin estndar del tamao de las casas. Al momento de

    llamar featureNormalize.m, la columna extra de 1s correspondiente

    a x0 = 1 no ha sido incluido an a X (ver ex1 multi.m para mayor

    detalle).

    Se har lo mismo para todas las caractersticas y el cdigo debe funcionar

    con conjuntos de datos de todos los tamaos (cualquier nmero de caractersticas

    /ejemplos). Notar que cada columna de la matriz X corresponde a unacaracterstica.

    Nota de implementation: Cuando se normaliza las caractersticas, es

    importante almacenar los valores usados para la normalizacin - el valor

    promedio y la desviacin estndar usados para los clculos. Despus de

    aprender los parmetros del modelo, querremos predecir los precios de las

    casas que no hemos visto anteriormente. Dado un nuevo valor de x (area de

    la sala y el nmero de habitaciones), debemos primeramente normalizar x

    usando el promedio y la desviacin estndar que hemos calculado

    previamente de nuestro conjunto de entrenamiento.

    3.2. Pendiente de descenso

    Previamente, se implement la pendiente de descenso en un problema de

    regresin de una variable. La nica diferencia ahora es que hay una

    caracterstica mas en la matriz X. La funcin hiptesis y la regla de

    actualizacin de la pendiente de descenso batch permanecen sin cambios.

    Debe completar el cdigo en computeCostMulti.m y gradientDescentMulti.m

    para implementar la funcin de costo el gradiente de descenso para la regresin

    lineal con multiples variables. Si tu cdigo en la parte previa (una variable) yasoporta variable mltiples, puedes usarla ac tambin.

    Asegurarse que el cdigo soporte cualquier nmero de caractersticas y esta bien

    vectorizado. Puede usar size(X, 2) para encontrar cuantas caractersticas estn

    presentes en el conjunto de datos

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    12/15

    12

    Nota de implementation: En el caso de mltiples variables, la funcin de

    costo tambin puede ser escrita en la siguiente forma vectorial:

    donde

    La versin vectorizada es eficiente cuando estas trabajando con herramientasde clculo numrico como Octave. Se puede probar que ambas formas son

    equivalentes.

    3.2.1 Ejercicio Opcional (no calificado): Seleccionando tasas de aprendizaje

    En esta parte del ejercicio, se probar diferentes tasas de aprendizaje para el

    conjunto de datos y encontrar la tasa de aprendizaje que converge

    rpidamente. Puedes cambiar las tasas de aprendizaje modificando ex1_multi.m

    y cambiando la parte del cdigo que establece la tasa de aprendizaje.La siguiente fase en ex1_multi.m llamar a la funcin

    gradientDescent.m y ejecutar la pendiente de descenso por

    aproximadamente 50 iteraciones en la tasa de aprendizaje elegida. La funcin

    debe tambin retornar la historia de valores J (") en un vector J. Despus de la

    ltima iteracin, el script ex1_multi.m grafica los valores de J versus el

    nmero de iteraciones.

    Si se escogi una tasa de aprendizaje dentro de un buen rango, el grfico se

    ver similar a la Figura 4. Si el grfico se ve muy diferente, especialmente si el

    valor deJ (") aumenta o inclusive si explota, ajustar la tasa de aprendizaje e intentar

    nuevamente. Recomendamos probar valores de tasa de aprendizaje ! en una escalalarga, en pasos de multiplicacin de aproximadamente 3 veces el valor previo (ejm.,

    0.3, 0.1, 0.03, 0.01 y as sucesivamente). Tambin se debera ajustar el nmero de

    iteraciones que se estn ejecutando si eso ayudara a ver la curva de tendencia general.

  • 8/10/2019 IA - Laboratorio 1 (1).pdf

    13/15

    13

    Figura 4: Convergencia de la pendiente de descenso con un valor apropiado de

    la tasa de aprendizaje

    Nota de implementation: Si la tasa de aprendizaje es muy grande, J (")

    puede diverger y explotar, resultando en valores que son muy elevados

    para el clculo en computador. En esta situacin, Octave tender a retornarNaNs. NaN significa No es Nmero y es comnmente causado por

    operaciones no definidas que involucran !# y +#.

    Consejo Octave: Para comparar como diferentes tasas de aprendizaje afectan la

    convergencia, es de mucha ayuda graficar J para varias tasas de aprendizaje en

    la misma figura. En Octave, esto puede hacerse realizando Pendiente de

    Descenso varias veces con el comando hold on entre grficos.

    Concretamente, si se ha probado tres valores diferentes de alpha (deberas

    probablemente probar mas valores que esto) y almacenar lo s cos tos en

    J1, J2 y J3, se puede usar los siguientes comandos para

    graficarlos en la misma figura:

    plot(1:50, J1(1:50), b);

    hold on;

    plot(1:50, J2(1:50), r);

    plot(1:50, J3(1:50), k);

    Los argumentos finales b, r, y k especifican colores diferentes

    para las grficas.

    :;6()0 1( ,8()#+,02(7