In [21]:
#Francisco Tapia Vázquez
#Machine Learning
#UMSNH
#Linear Regreassion using Gradient Descent
#Usamos esta librería para graficar
#Pkg.add("PyPlot") #Importamos esta librería para graficar, sólo la ejecutamos una vez si no la tenemos
using PyPlot
#En esta función buscamos el mínimo valor de Θ0 y Θ1 para así minizar la funcion
function buscarminimo(theta0,theta1,m)
minimo=false
while(minimo==false)
temp0=theta0-(alpha/m)*suma(theta0,theta1,m)
temp1=theta1-(alpha/m)*suma1(theta0,theta1,m)
if(theta0==temp0) || (theta1==temp1)
minimo=true
else
theta0=temp0
theta1=temp1
minimo=false
end
end
return theta0,theta1
end
#En esta función realizamos la suma
function suma(theta0,theta1,m)
res=0
for i=1:m
res=res+theta0+theta1*X[i,1]-X[i,2]
end
return res
end
#Funcion
function suma1(theta0,theta1,m)
res=0
for i=1:m
res=res+(theta0+theta1*X[i,1]-X[i,2])*X[i,1]
end
return res
end
#Parámetros y condiciones inicales
theta0=100 #Θ0 inicial
theta1=3 #Θ0 inicial
alpha=0.001 #Step size
#Leemos desde el archivo llamado "datos" donde vienen los valores y creamos un arreglo de mx2
X = readdlm("datos") #Se puede cambiar el archivo por datos,datos1,datos2 y datos3
m=length(X[:,1]) #m es el tamaño de mi arreglo
max=maximum(X[:,1]) #Máximo valor en el je de las "x"
min=minimum(X[:,1])
#Llamamos a la función que buscar el Θ0 y Θ1
theta0,theta1=buscarminimo(theta0,theta1,m)
#Imprimimos los resultados
println("Θ0=",theta0)
println("Θ1=",theta1)
x=linspace(min-1,max+1,1000)
y=map(x-> x*theta1+theta0,x)
plot(X[:,1],X[:,2],"+",x,y,"g-")
show()
In [ ]: