La regresión no lineal es un tipo de regresión polinomial. Es un método para modelar una relación no lineal entre las variables dependientes e independientes. Se usa cuando los datos muestran una tendencia con curvas y la regresión lineal no produciría resultados muy precisos en comparación con la regresión no lineal. Esto se debe a que en la regresión lineal se asume previamente que los datos son lineales.
Código:
Python3
import numpy as np import pandas as pd # downloading dataset ! wget -nv -O china_gdp.csv https://s3-api.us-geo.objectstorage.softlayer.net/ cf-courses-data/CognitiveClass/ML0101ENv3/labs/china_gdp.csv df = pd.read_csv("china_gdp.csv") def sigmoid(x, Beta_1, Beta_2): y = 1 / (1 + np.exp(-Beta_1*(x-Beta_2))) return y beta_1 = 0.10 beta_2 = 1990.0 # logistic function Y_pred = sigmoid(x_data, beta_1, beta_2) # plot initial prediction against datapoints plt.plot(x_data, Y_pred * 15000000000000.) plt.plot(x_data, y_data, 'ro')
El diagrama de dispersión muestra la relación entre el PIB y el tiempo de un país, pero la relación no es lineal. En cambio, después de 2005, la línea comienza a convertirse en curva y no sigue un camino recto lineal. En tales casos, se requiere un método de estimación especial llamado regresión no lineal.
Código:
Python3
import numpy as np import pandas as pd # downloading dataset ! wget -nv -O china_gdp.csv https://s3-api.us-geo.objectstorage.softlayer.net/ cf-courses-data / CognitiveClass / ML0101ENv3 / labs / china_gdp.csv df = pd.read_csv("china_gdp.csv") def sigmoid(x, Beta_1, Beta_2): y = 1 / (1 + np.exp(-Beta_1*(x-Beta_2))) return y x = np.linspace(1960, 2015, 55) x = x / max(x) y = sigmoid(x, *popt) plt.figure(figsize =(8, 5)) 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()
Producción:
Hay muchas regresiones diferentes que existen y se pueden usar para adaptarse a cualquier aspecto del conjunto de datos, como regresión cuadrática, cúbica, etc. en grados infinitos de acuerdo con nuestros requisitos.
Código:
Python3
import numpy as np import matplotlib.pyplot as plt % matplotlib inline x = np.arange(-5.0, 5.0, 0.1) ## You can adjust the slope and intercept to verify the changes in the graph y = 2*(x) + 3 y_noise = 2 * np.random.normal(size = x.size) ydata = y + y_noise # plt.figure(figsize =(8, 6)) plt.plot(x, ydata, 'bo') plt.plot(x, y, 'r') plt.ylabel('Dependent Variable') plt.xlabel('Independent Variable') plt.show()
Producción:
Código:
Python3
import numpy as np import matplotlib.pyplot as plt % matplotlib inline x = np.arange(-5.0, 5.0, 0.1) ## You can adjust the slope and intercept to verify the changes in the graph 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('Dependent Variable') plt.xlabel('Independent Variable') plt.show()
Producción:
Código:
Python3
import numpy as np import matplotlib.pyplot as plt % matplotlib inline x = np.arange(-5.0, 5.0, 0.1) ## You can adjust the slope and intercept to verify the changes in the graph 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('Dependent Variable') plt.xlabel('Independent Variable') plt.show()
Producción:
Podemos llamar a todas estas regresiones polinómicas, donde la relación entre la variable independiente X y la variable dependiente Y se modela como un polinomio de grado N en X.
Para que un modelo se considere no lineal, Y debe ser una función no lineal de los parámetros Theta, no necesariamente las características X. Cuando se trata de una ecuación no lineal, puede tener la forma de exponencial, logarítmica y logística, o de muchos otros tipos.
Producción:
Como puede ver en todas estas ecuaciones, el cambio de Y hat depende de los cambios en los parámetros Theta, no necesariamente solo en X. Es decir, en la regresión no lineal, un modelo no es lineal por parámetros.
Publicación traducida automáticamente
Artículo escrito por hitainkakkar007 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA