Tuesday, July 8, 2014

Regresion lineal con octave.

La regresion lineal sirve para apatir de un gran conjunto de historicos datos, entrenar un algoritmo para a partir de estos datos predecir futuros comportamientos. Parece complejo, pero con Octave es muy sencillo. simplemente cargas los datos de histórico a partir de un fichero csv. Estos datos en la primera columna tenemos la variable a predecir.

 //crea matriz X = dlmread('datos.csv', ";");
//Como hemos comentado en la primera columna está la variable a predecir
Y Y =X(:,1);
//con convencion ponemos a 1 la primera columna.
X(:,1)=1;
//normalizamos dividiendo por el maximo valor de cada columna
X2 = bsxfun(@rdivide,X, max(X));
//calculamos el valor de theta a partir de esta formula matricial
theta=pinv(X'*X)*X'*Y;
//dibujamos los puntos por pantalla. plot(X2(:,2), X2*theta, '-')
 //para saber el valor que predecimos si es correcto o no comprobar los valores de Y con los de
X*theta
//comprobar el error y ajustaremos los modelos matriciales para ver si el error se puede corregir. //añadiremos mas columnas al modelo X dependiendo el tipo de curva que se adapte a nuestro modelo
//por ejemplo añadiendo al modelo distintas columnas. Ten en cuenta que todo aquí son matrices y el tiempo de cálculo se eleva considerablemente.

 =====Solucion =====
X = dlmread('datos.csv', ";");
Y =X(:,1);
X(:,1)=1;
X2 = bsxfun(@rdivide,X, max(X));
X3 = pow2(X2)
X4 = sqrt(X2)
X5 = pow2(X2,3)
X6 = [X2 X3 X4 X5]
theta6=pinv(X6'*X6)*X6'*Y; X6*theta6

No comments:

Post a Comment