Ridge Regression#

  • Este modelo impone una penalización al tamaño de los coeficientes.

  • Los coeficientes del modelo minimizan la suma penalizada de residuales al cuadrado:

    \min_w ||Xw -y||_2^2 + \alpha ||w||_2^2

    con \alpha \ge 0

  • La penalización se aplica únicamente sobre los coeficientes de x.

[1]:
from sklearn.datasets import make_regression

X, y_true = make_regression(
    n_samples=100,
    n_features=1,
    n_informative=1,
    bias=100.0,
    tail_strength=0.9,
    noise=12.0,
    shuffle=False,
    coef=False,
    random_state=0,
)
[2]:
from sklearn.linear_model import Ridge


def predict(X, y_true, line_X, alpha):

    ridge = Ridge(
        # ---------------------------------------------------------------------
        # Constant that multiplies the L2 term, controlling regularization
        # strength. alpha must be a non-negative float. When alpha = 0, the
        # objective is equivalent to ordinary least squares, solved by the
        # LinearRegression object.
        #
        alpha=alpha,
        # ---------------------------------------------------------------------
        # Whether to fit the intercept for this model.
        fit_intercept=True,
        # ---------------------------------------------------------------------
        # Maximum number of iterations for conjugate gradient solver.
        max_iter=None,
        # ---------------------------------------------------------------------
        # Precision of the solution. Note that tol has no effect for solvers
        # ‘svd’ and ‘cholesky’.
        tol=1e-4,
        # ---------------------------------------------------------------------
        # Solver to use in the computational routines:
        # * ‘auto’ chooses the solver automatically based on the type of data.
        # * 'svd'
        # * 'cholesky'
        # * 'sparse_cg'
        # * 'lsqr':  regularized least-square
        # * 'sag': Stochastic Average Gradient
        # * 'lbfgs'
        solver="auto",
        # ---------------------------------------------------------------------
        # When set to True, forces the coefficients to be positive.
        positive=False,
        # ---------------------------------------------------------------------
        # Used when solver == ‘sag’ or ‘saga’ to shuffle the data.
        random_state=None,
    )

    ridge.fit(X, y_true)
    y_predicted = ridge.predict(line_X)

    # Main attributes:
    print(ridge.coef_)
    print(ridge.intercept_)

    return y_predicted
[3]:
import matplotlib.pyplot as plt
import numpy as np


def plot(X, y_true, alpha):

    line_X = np.linspace(X.min(), X.max())[:, np.newaxis]

    plt.figure(figsize=(3.5, 3.5))
    plt.scatter(X, y_true, color="tab:blue", alpha=0.8, edgecolors="white")
    plt.plot(line_X, predict(X, y_true, line_X, alpha), "k", linewidth=2)
    plt.title("alpha =" + str(alpha))
[4]:
plot(X, y_true, 0)
[42.66621538]
99.02298180756313
../_images/24_regresores_clasicos_03_Ridge_7_1.png
[5]:
plot(X, y_true, 100)
[21.50059777]
100.28885539402634
../_images/24_regresores_clasicos_03_Ridge_8_1.png
[6]:
plot(X, y_true, 10000)
[0.42905631]
101.54910247355808
../_images/24_regresores_clasicos_03_Ridge_9_1.png