[sourcecode language=»python» wraplines=»false» collapse=»false»]
import numpy as np # paquete básico para calculos científicos
import matplotlib.pyplot as plt # para crear graficos
%matplotlib inline # muestra los graficos en la linea de comandos de Python
[/sourcecode]
Creación de diferentes conjuntos de datos
Función cúbica ()
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»4″]
x = np.arange(-5.0, 5.0, 0.1)
##Puede ajustar la pendiente y la intersección para verificar los cambios del gráfico
y = 1*(x**3) + 1*(x**2) + 1*x + 3
y_noise = 20 * np.random.normal(size=x.size)
ydata = y + y_noise
plt.plot(x, ydata, ‘bo’)
plt.plot(x,y, ‘r’)
plt.ylabel(‘Variable dependiente’)
plt.xlabel(‘Variable indepdendiente’)
plt.show()
[/sourcecode]
Función cuadrática ()
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»14″]
x = np.arange(-5.0, 5.0, 0.1)
##Se puede ajustar la pendiente y la intersección para verificar los cambios en el gráfico
y = np.power(x,2)
y_noise = 2 * np.random.normal(size=x.size)
ydata = y + y_noise
plt.plot(x, ydata, ‘bo’)
plt.plot(x,y, ‘r’)
plt.ylabel(‘Variable dependiente’)
plt.xlabel(‘Variable indepdiendente’)
plt.show()
[/sourcecode]
Exponencial ()
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»24″]
X = np.arange(-5.0, 5.0, 0.1)
##Se puede ajustar la pendiente y la intersección para verificar los cambios en el gráfico
Y= np.exp(X)
plt.plot(X,Y)
plt.ylabel(‘Variable Dependiente’)
plt.xlabel(‘Variable Independiente’)
plt.show()
[/sourcecode]
Logarítmica ()
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»31″]
X = np.arange(-5.0, 5.0, 0.1)
Y = np.log(X)
plt.plot(X,Y)
plt.ylabel(‘Variable Dependiente’)
plt.xlabel(‘Variable Independiente’)
plt.show()
[/sourcecode]
A primera vista, determinamos que la función lógica podría ser una buena primera aproximación, ya que tiene la propiedad de comenzar con un crecimiento leve, aumentando en el medio y luego descendiendo nuevamente hacia el final; como vimos anteriormente y simplificando, la formula es donde controla lo llano de la curva y lleva la curva sobre el eje x.
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»13″]
#define el modelo
def sigmoid(x, Beta_1, Beta_2):
y = 1 / (1 + np.exp(-Beta_1*(x-Beta_2)))
return y
#ejecutamos un primer modelo
beta_1 = 0.10
beta_2 = 1990.0
Para buscar los mejores parámetros podemos utilizar curve_fit la cual utiliza cuadrados mínimos no lineales para cuadrar con la función sigmoide. popt son nuestros parámetros optimizados.
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»30″]
from scipy.optimize import curve_fit
popt, pcov = curve_fit(sigmoid, xdata, ydata)
#imprimir los parámetros finales
print(" beta_1 = %f, beta_2 = %f" % (popt[0], popt[1]))
[/sourcecode]
beta_1 = 690.447530, beta_2 = 0.997207
Dibujamos el modelo
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»34″]
x = np.linspace(1960, 2015, 55)
x = x/max(x)
plt.figure(figsize=(8,5))
y = sigmoid(x, *popt)
plt.plot(xdata, ydata, ‘ro’, label=’data’)
plt.plot(x,y, linewidth=3.0, label=’fit’)
plt.legend(loc=’best’)
plt.ylabel(‘GDP’)
plt.xlabel(‘Year’)
plt.show()
[/sourcecode]
Vemos la exactitud de nuestro modelo
[sourcecode language=»python» wraplines=»false» collapse=»false» firstline=»44″]
# divide los datos en entrenamiento y prueba
msk = np.random.rand(len(df)) < 0.8
train_x = xdata[msk]
test_x = xdata[~msk]
train_y = ydata[msk]
test_y = ydata[~msk]
# construye el modelo utilizando el set de entrenamiento
popt, pcov = curve_fit(sigmoid, train_x, train_y)
# predecir utilizando el set de prueba
y_hat = sigmoid(test_x, *popt)
Usamos cookies para asegurar que te damos la mejor experiencia en nuestra web. Si continúas usando este sitio, asumiremos que estás de acuerdo con ello.Aceptar