Construcción de Regresión Polinómica
Carga de archivo
Cargamos poly.csv e inspeccionamos el contenido:
1234import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head())
Luego, visualizar la relación:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una línea recta se ajusta de manera deficiente, por lo que la regresión polinómica es más adecuada.
Aquí se presenta la sección reescrita adaptada para Scikit-learn.
Construcción de la matriz transformada
Para crear características polinómicas, se pueden agregar manualmente las características al cuadrado:
df['Feature_squared'] = df['Feature'] ** 2
Pero para grados más altos, la clase PolynomialFeatures de sklearn.preprocessing es mucho más sencilla y eficiente. Requiere una estructura 2-D (DataFrame o arreglo 2-D):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parámetros
La clase PolynomialFeatures tiene varios parámetros importantes:
degree(predeterminado=2): el grado de las características polinómicas. Por ejemplo, sidegree=3, genera .interaction_only(predeterminado=False): si esTrue, solo se producen características de interacción (por ejemplo, ), evitando términos como .include_bias(predeterminado=True): si esTrue, agrega una columna de unos (columna de sesgo).
Importante: dado que LinearRegression calcula el intercepto automáticamente, normalmente configuramos include_bias=False para evitar redundancia.
Construcción de la regresión polinómica
Una vez que tenemos las características transformadas (X_poly), podemos usar el modelo estándar LinearRegression.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Para predecir, es necesario transformar los nuevos datos usando la misma instancia del transformador antes de pasarlos al modelo:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Ejemplo completo
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Intente cambiar el valor de degree (n) para observar cómo varía la curva. Se notará que los grados más altos ajustan mejor los datos de entrenamiento, pero pueden comportarse de manera errática fuera del rango; esto conduce al siguiente capítulo sobre sobreajuste.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Genial!
Completion tasa mejorada a 3.33
Construcción de Regresión Polinómica
Desliza para mostrar el menú
Carga de archivo
Cargamos poly.csv e inspeccionamos el contenido:
1234import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head())
Luego, visualizar la relación:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una línea recta se ajusta de manera deficiente, por lo que la regresión polinómica es más adecuada.
Aquí se presenta la sección reescrita adaptada para Scikit-learn.
Construcción de la matriz transformada
Para crear características polinómicas, se pueden agregar manualmente las características al cuadrado:
df['Feature_squared'] = df['Feature'] ** 2
Pero para grados más altos, la clase PolynomialFeatures de sklearn.preprocessing es mucho más sencilla y eficiente. Requiere una estructura 2-D (DataFrame o arreglo 2-D):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parámetros
La clase PolynomialFeatures tiene varios parámetros importantes:
degree(predeterminado=2): el grado de las características polinómicas. Por ejemplo, sidegree=3, genera .interaction_only(predeterminado=False): si esTrue, solo se producen características de interacción (por ejemplo, ), evitando términos como .include_bias(predeterminado=True): si esTrue, agrega una columna de unos (columna de sesgo).
Importante: dado que LinearRegression calcula el intercepto automáticamente, normalmente configuramos include_bias=False para evitar redundancia.
Construcción de la regresión polinómica
Una vez que tenemos las características transformadas (X_poly), podemos usar el modelo estándar LinearRegression.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Para predecir, es necesario transformar los nuevos datos usando la misma instancia del transformador antes de pasarlos al modelo:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Ejemplo completo
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Intente cambiar el valor de degree (n) para observar cómo varía la curva. Se notará que los grados más altos ajustan mejor los datos de entrenamiento, pero pueden comportarse de manera errática fuera del rango; esto conduce al siguiente capítulo sobre sobreajuste.
¡Gracias por tus comentarios!