Stanford MOOC ML W2 – Assignment

La segunda semana del curso trajo consigo el primer ejercicio de programación en Octave. Este consistió en modificar una serie de scripts ya hechos. “Modificarlos” en el sentido de completar el código necesario para obtener ciertos resultados sobre un particular conjunto de datos no “adaptarlos”.

Como se aprendió de las videolecturas, el objetivo de la regresión lineal es minimizar la función de costo:

J(\theta)=\frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}-y^{(i)})^2

donde

h_\theta(x)=\theta^Tx=\theta_0+\theta_1x_1.

Al ser Octave un lenguaje orientado a la expresión matemática la función de costo puede implementarse de forma muy sencilla. En este caso, haciendo uso de la facilidad de manejar apropiadamente vectores y matrices meramente por su nombre (lo que en este entorno se suele mencionar como “vectorizado”) queda:

function J = Costo(X, y, theta)
m=lenght(y);
J=0;
J=1/(2*m)*sum(((X*theta)-y).^2);
end

La función recibe la matriz de valores X, el vector de resultados y y el vector de parámetros de ajuste theta. Una forma de determinar los valores de \theta_j que minimizan la función de costo es mediante el algoritmo de gradiente descendente en el que por cada iteración se actualiza nuestro vector de parámetros de ajuste de la siguiente manera:

\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta(x^{(i)}-y^{(i)})x^{(i)}_j

que aunque parece complicado, en Octave resulta bastante fácil de implementar en forma vectorizada:

function [theta, J_ajustes] = gradienteDescente(X, y, theta, alpha, num_iters)
m=length(y);
J_ajustes=zeros(num_iters, 1);
for ither=1:num_iters
    theta_0=theta(1)-alpha*(1/m)*sum((X*theta-y).*X(:,1));
    theta_1=theta(2)-alpha*(1/m)*sum((X*theta-y).*X(:,2));

    theta(1,1)=theta_0;
    tehta(2,1)=theta_1;

    j_ajustes(iter)=Costo(X,y, theta);

end

end

El ejercicio obligatorio es para una variable. Opcionalmente el ejercicio puede hacerse para múltiples variables y así obtener créditos adicionales (que ya hice pero por tiempo ya no puedo describir, si alguien le interesa el tema favor de comentarlo).

 

* Favor de leer la declaración del sitio al respecto del código mostrado.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s