<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Regresión en Scikit-Learn
Step1:  Dataset
Cargamos los cuatro conjuntos de datos como arreglos numpy. Los datos reales corresponden a mediciones verificadas con algún instrumento. En la práctica esto no se realiza frecuentemente, por lo que es necesario usar estadística para realizar predicciones.
Obsérvese que a las X's se les añade una columna con unos dado que asumimos $x_0 \equiv 1$. Esto con el fin de hacer regresión lineal más adelante.
Step2:  Gráficos
Ejercicios
Step3:  Modelo a partir de la ecuación normal de mínimos cuadrados
$$W = (X^T X)^{-1} X^T Y$$
Step4:  Ahora, graficamos la recta contra los datos de entrenamiento
Step5:  Ejercicios
Step6:  Regularizadores
Step7:  Varianza esperada y sesgo esperado
Step8:  Varianza y sesgo
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from semana2_datos import *
Explanation: Regresión en Scikit-Learn
End of explanation
X_1 = np.array([[1,x] for x, y in data_1])
Y_1 = np.array([y for x, y in data_1])
X_2 = np.array([[1,x] for x, y in data_2])
Y_2 = np.array([y for x, y in data_2])
X_3 = np.array([[1,x] for x, y in data_3])
Y_3 = np.array([y for x, y in data_3])
X_4 = np.array([[1,x] for x, y in data_4])
Y_4 = np.array([y for x, y in data_4])
X_real = np.array([[1,x] for x, y in data_real])
Y_real = np.array([y for x, y in data_real])
Explanation: Dataset
Cargamos los cuatro conjuntos de datos como arreglos numpy. Los datos reales corresponden a mediciones verificadas con algún instrumento. En la práctica esto no se realiza frecuentemente, por lo que es necesario usar estadística para realizar predicciones.
Obsérvese que a las X's se les añade una columna con unos dado que asumimos $x_0 \equiv 1$. Esto con el fin de hacer regresión lineal más adelante.
End of explanation
# data_1
x_1 = np.array([x for _, x in X_1])
plt.scatter(x_1, Y_1)
Explanation: Gráficos
Ejercicios:
- Graficar data_2.
- Graficar data_3 y data_4 en un mismo plano y con distinto color.
End of explanation
# data_1
W_1 = np.matmul(np.matmul(np.linalg.inv(np.matmul(X_1.T,
                                                  X_1)), X_1.T), Y_1)
f1 = lambda X: W_1[1]*X + W_1[0]
print('Los pesos aprendidos son\nw0: {}\nw1: {}'.format(W_1[0], W_1[1]))
Explanation: Modelo a partir de la ecuación normal de mínimos cuadrados
$$W = (X^T X)^{-1} X^T Y$$
End of explanation
# data_1
plt.scatter(x_1, Y_1)
lower = min(x_1)
upper = max(x_1)
sample_x1 = np.linspace(lower, upper, num=len(x_1))
plt.plot(sample_x1, f1(sample_x1), color='r')
Explanation: Ahora, graficamos la recta contra los datos de entrenamiento
End of explanation
# Polynomial regression
x_1 = np.expand_dims(x_1, axis=1)
poly = PolynomialFeatures(3)
features = poly.fit_transform(x_1)
features.shape
lin_reg = LinearRegression()
lin_reg.fit(features, Y_1)
sample_x1 = np.expand_dims(sample_x1, axis=1)
sample_x1_poly = poly.fit_transform(sample_x1)
y1_poly = lin_reg.predict(sample_x1_poly)
plt.scatter(x_1, Y_1)
plt.plot(sample_x1, y1_poly, color='g')
Explanation: Ejercicios:
Ajustar un regresor lineal para data_2, data_3 y data_4 usando el módulo correspondiente de Scikit-Learn.
Graficar las rectas contra sus respectivos conjuntos de datos. data_3 y data_4 deberán de aparecer en el mismo plano con distinción de color.
Regresión polinómica y regularizaciones
End of explanation
# Ridge para x_1
ridge = Ridge(alpha=2.5)
ridge.fit(features, Y_1)
y1_ridge = ridge.predict(sample_x1_poly)
plt.scatter(x_1, Y_1)
plt.plot(sample_x1, y1_ridge, color='r')
Explanation: Regularizadores
End of explanation
# Expected prediction
def E(f_x):
    return float(sum(f_x)) / float(len(f_x))
x_real = np.array([x for _, x in X_real])
exp_pred_1 = E(f1(x_real))
avg_y_real = E(Y_real)
avg_y_real - exp_pred_1
Explanation: Varianza esperada y sesgo esperado
End of explanation
# data 1
f1 = W_1[1]*sample_x1 + W_1[0]
f1_to_2 = f1 ** 2
E11 = E(f1_to_2)
E_f1 = E(f1)
E12 = E_f1 ** 2
E11 - E12
Explanation: Varianza y sesgo
End of explanation
<END_TASK>