Created
April 15, 2020 10:04
-
-
Save rrobby86/fadf1ca0a175a1a2b46b0f0422a898c4 to your computer and use it in GitHub Desktop.
Regressione non lineare (parte 1): soluzioni esercizi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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