machine-learning octave linear-regression

machine learning - Función de costo, Regresión lineal, tratando de evitar la codificación dura de theta. Octava.



machine-learning octave (6)

Creo que necesitábamos usar iteración para mucha solución general para el costo en lugar de una iteración, también el resultado se muestra en el PDF 32.07 puede no ser la respuesta correcta que el clasificador está buscando porque es un caso de muchos datos de entrenamiento.

Creo que debería pasar de esta manera

for i in 1:iteration theta = theta - alpha*(1/m)(theta''*x-y)*x j = (1/(2*m))(theta''*x-y)^2

Estoy en la segunda semana del curso de Machine Learning del profesor Andrew Ng a través de Coursera. Estamos trabajando en la regresión lineal y en este momento estoy tratando de codificar la función de costos.

El código que he escrito resuelve el problema correctamente pero no pasa el proceso de envío y falla la prueba unitaria porque he codificado los valores de theta y no se han permitido más de dos valores para theta.

Aquí está el código que tengo hasta ahora

function J = computeCost(X, y, theta) m = length(y); J = 0; for i = 1:m, h = theta(1) + theta(2) * X(i) a = h - y(i); b = a^2; J = J + b; end; J = J * (1 / (2 * m)); end

la prueba unitaria es

computeCost( [1 2 3; 1 3 4; 1 4 5; 1 5 6], [7;6;5;4], [0.1;0.2;0.3])

y debe producir ans = 7.0175

Así que necesito agregar otro ciclo for para iterar sobre theta, por lo tanto, tengo en cuenta cualquier cantidad de valores para theta, pero estaré condenado si puedo entender cómo / dónde.

¿Alguien puede sugerir una forma en que puedo permitir cualquier número de valores para theta dentro de esta función?

Si necesita más información para entender lo que estoy tratando de hacer, haré todo lo posible para proporcionarla.


Esta línea devuelve el valor de costo 32.07 requerido:

J = (1/(2*m)) * (sum(((X * theta) - y).^2));

y es similar a la fórmula original.


La respuesta anterior es perfecta, pero también puedes hacer

H = (X*theta); S = sum((H - y) .^ 2); J = S / (2*m);

En lugar de computar

(theta'' * X'')''

y luego tomando la transposición puedes calcular directamente

(X * theta)

Funciona perfectamente


Puede usar vectorize de operaciones en Octave / Matlab. Iterato sobre un vector completo: es realmente una mala idea, si su lenguaje de programación le permite vectorizar las operaciones. R, Octave, Matlab, Python (numpy) permiten esta operación. Por ejemplo, puede obtener producción escalar, si theta = (t0, t1, t2, t3) y X = (x0, x1, x2, x3) de la siguiente manera: theta * X ''= (t0, t1, t2, t3) * (x0, x1, x2, x3) ''= t0 * x0 + t1 * x1 + t2 * x2 + t3 * x3 El resultado será escalar.

Por ejemplo, puedes vectorizar h en tu código de la siguiente manera:

H = (theta''*X'')''; S = sum((H - y) .^ 2); J = S / (2*m);


También se puede hacer en un conjunto de entrenamiento line- m- #

J=(1/(2*m)) * ((((X * theta) - y).^2)''* ones(m,1));


J = sum(((X*theta)-y).^2)/(2*m); ans = 32.073

La respuesta anterior es perfecta, pensé el problema profundamente por un día y todavía no estoy familiarizado con Octave, así que, ¡solo estudie juntos!