Skip to content

Instantly share code, notes, and snippets.

@rrobby86
Created April 15, 2020 10:04
Show Gist options
  • Select an option

  • Save rrobby86/fadf1ca0a175a1a2b46b0f0422a898c4 to your computer and use it in GitHub Desktop.

Select an option

Save rrobby86/fadf1ca0a175a1a2b46b0f0422a898c4 to your computer and use it in GitHub Desktop.
Regressione non lineare (parte 1): soluzioni esercizi
# ESERCIZIO 1
# 1a
lrm = LinearRegression()
summer_X_train = summer_train[["temp"]]
summer_y_train = summer_train["demand"]
lrm.fit(summer_X_train, summer_y_train)
# 1b
print_eval(summer_X_train, summer_y_train, lrm)
# 1c
summer_X_val = summer_val[["temp"]]
summer_y_val = summer_val["demand"]
print_eval(summer_X_val, summer_y_val, lrm)
# 1d
plot_model_on_data(summer_X_train, summer_y_train, lrm)
# 1e
plot_model_on_data(summer_X_val, summer_y_val, lrm)
# ESERCIZIO 2
# 2a
X_train_d3 = np.hstack([X_train, X_train ** 2, X_train ** 3])
# 2b
X_val_d3 = np.hstack([X_val, X_val ** 2, X_val ** 3])
# 2c
prm = LinearRegression()
prm.fit(X_train_d3, y_train)
# 2d
print_eval(X_train_d3, y_train, prm)
print_eval(X_val_d3, y_val, prm)
# ESERCIZIO 3
# 3a
prm = Pipeline([
("poly", PolynomialFeatures(degree=3, include_bias=False)),
("linreg", LinearRegression())
])
# 3b
prm.fit(X_train, y_train)
# 3c
print_eval(X_train, y_train, prm)
# 3d
plot_model_on_data(X_val, y_val, prm)
# ESERCIZIO 4
# 4a
prm = Pipeline([
("poly", PolynomialFeatures(degree=15, include_bias=False)),
("linreg", LinearRegression())
])
prm.fit(X_train, y_train)
print_eval(X_val, y_val, prm)
# 4b
prm = Pipeline([
("poly", PolynomialFeatures(degree=15, include_bias=False)),
("scale", StandardScaler()),
("linreg", LinearRegression())
])
prm.fit(X_train, y_train)
print_eval(X_val, y_val, prm)
# ESERCIZIO 5
# 5a
def test_regression(degree, alpha):
rrm = Pipeline([
("poly", PolynomialFeatures(degree=degree, include_bias=False)),
("scale", StandardScaler()),
("ridge", Ridge(alpha=alpha))
])
rrm.fit(X_train, y_train)
return rrm.score(X_val, y_val)
# 5b
res_degree = np.arange(3, 31)
res_no_reg = np.array([test_regression(d, 0.01) for d in res_degree])
# 5c
res_with_reg = np.array([test_regression(d, 10) for d in res_degree])
# 5d
plt.plot(res_degree, res_no_reg, "ro-")
plt.plot(res_degree, res_with_reg, "bo-")
plt.grid()
plt.xlabel("Grado regr. polinomiale")
plt.ylabel("Score R²")
# aggiungiamo una legenda al grafico
plt.legend(["α = 0.01", "α = 10"], loc="lower right");
# ESERCIZIO 6
# 6a
nlrm = Pipeline([
("scale", StandardScaler()),
("linreg", LinearRegression())
])
# 6b
nlrm.fit(X_train, y_train)
# 6c
print_eval(X_val, y_val, nlrm)
# 6d
pd.Series(nlrm.named_steps["linreg"].coef_, X_train.columns)
# ESERCIZIO 7
for n, (train_indices, val_indices) in enumerate(kf.split(X, y)):
X_train = X.iloc[train_indices]
y_train = y.iloc[train_indices]
X_val = X.iloc[val_indices]
y_val = y.iloc[val_indices]
lrm = LinearRegression()
lrm.fit(X_train, y_train)
print("FOLD {}:".format(n))
print_eval(X_val, y_val, lrm)
# ESERCIZIO 8
# 8a
model = Pipeline([
("poly", PolynomialFeatures(degree=2, include_bias=False)),
("scale", StandardScaler()),
("ridge", Ridge(alpha=1))
])
# 8b
cv_result = cross_validate(model, X, y, cv=kf)
# 8c
cv_result["test_score"].mean(), cv_result["test_score"].std()
# la media è più alta e la deviazione standard più bassa
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment