Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/notebooks/book1/04/linreg_poly_ridge.ipynb
1193 views
Kernel: Unknown Kernel
# Plot ridge regression applied to 1d polynomial problem # Based on https://github.com/probml/pmtk3/blob/master/demos/polyfitRidgeLasso.m import numpy as np import matplotlib.pyplot as plt try: from probml_utils import savefig except ModuleNotFoundError: %pip install -qq git+https://github.com/probml/probml-utils.git from probml_utils import savefig try: from sklearn.preprocessing import PolynomialFeatures except ModuleNotFoundError: %pip install -qq scikit-learn from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import Ridge from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error as mse def make_1dregression_data(n=21): np.random.seed(0) xtrain = np.linspace(0.0, 20, n) xtest = np.arange(0.0, 20, 0.1) sigma2 = 4 w = np.array([-1.5, 1 / 9.0]) fun = lambda x: w[0] * x + w[1] * np.square(x) ytrain = fun(xtrain) + np.random.normal(0, 1, xtrain.shape) * np.sqrt(sigma2) ytest = fun(xtest) + np.random.normal(0, 1, xtest.shape) * np.sqrt(sigma2) return xtrain, ytrain, xtest, ytest xtrain, ytrain, xtest, ytest = make_1dregression_data(n=21) # Rescaling data scaler = MinMaxScaler(feature_range=(-1, 1)) Xtrain = scaler.fit_transform(xtrain.reshape(-1, 1)) Xtest = scaler.transform(xtest.reshape(-1, 1)) deg = 14 alphas = np.logspace(-10, 1.3, 10) nalphas = len(alphas) mse_train = np.empty(nalphas) mse_test = np.empty(nalphas) ytest_pred_stored = dict() for i, alpha in enumerate(alphas): model = Ridge(alpha=alpha, fit_intercept=False) poly_features = PolynomialFeatures(degree=deg, include_bias=False) Xtrain_poly = poly_features.fit_transform(Xtrain) model.fit(Xtrain_poly, ytrain) ytrain_pred = model.predict(Xtrain_poly) Xtest_poly = poly_features.transform(Xtest) ytest_pred = model.predict(Xtest_poly) mse_train[i] = mse(ytrain_pred, ytrain) mse_test[i] = mse(ytest_pred, ytest) ytest_pred_stored[alpha] = ytest_pred # Plot MSE vs degree fig, ax = plt.subplots() mask = [True] * nalphas ax.plot(alphas[mask], mse_test[mask], color="r", marker="x", label="test") ax.plot(alphas[mask], mse_train[mask], color="b", marker="s", label="train") ax.set_xscale("log") ax.legend(loc="upper right", shadow=True) plt.xlabel("L2 regularizer") plt.ylabel("mse") savefig("polyfitVsRidge.pdf") plt.show() # Plot fitted functions chosen_alphas = alphas[[0, 5, 8]] for i, alpha in enumerate(chosen_alphas): fig, ax = plt.subplots() ax.scatter(xtrain, ytrain) ax.plot(xtest, ytest_pred_stored[alpha]) plt.title("L2 regularizer {:0.5f}".format(alpha)) savefig("polyfitRidge{}.pdf".format(i)) plt.show()