Hello! Today, we're going to talk about Ridge Regression. Ridge Regression is a special type of linear regression that helps when we have too many features (or variables) in our data. Imagine you have a lot of different ingredients for a recipe but don't know which ones are essential. Ridge Regression helps us decide which ingredients (or features) are important without overloading the recipe.
In this lesson, we'll learn:
What Ridge Regression is.
How to use Ridge Regression in Python.
How to interpret the results.
How Ridge Regression compares to regular linear regression.
Ready to dive in? Let's go!
What is Ridge Regression?
Example of Ridge Regression: Part 1
Let's see Ridge Regression in action using Python and the Scikit-Learn library. We'll use a real dataset to demonstrate this.
First, load and split our dataset. We’ll use a diabetes dataset included in Scikit-Learn.
Python
import numpy as npfrom sklearn.linear_model import Ridge, LinearRegressionfrom sklearn.datasets import load_diabetesfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error# Load real datasetX, y = load_diabetes(return_X_y=True)# Splitting the datasetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Here:
We import necessary libraries.
Load the diabetes dataset using load_diabetes().
Split this dataset into training and testing sets using train_test_split(), with 80% for training and 20% for testing.
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal
Ridge Regression is like normal linear regression but with a regularization term added. Why do we need this?
Think about building a sandcastle. If you pile up too much sand without structure, it might collapse. Similarly, in regression, too many variables can make our model too complex and perform poorly on new data. This is known as overfitting.
Ridge Regression helps by adding a "penalty" to the equation that keeps the coefficients (weights assigned to each feature) smaller. This penalty term is controlled by a parameter called α.
This penalty works by adding the sum of the squared values of the coefficients to the cost function. In mathematical terms, the Ridge Regression cost function is:
J(θ)=∑i=1n(yi−y^i)2+α∑j=1pθj2
Here:
J(θ) is the cost function, which is a measure of how well the model's predictions match the actual data.
yi are the actual values.
y^i are the predicted values.
θj are the coefficients.
α is the regularization parameter.
The term α∑j=1pθj2 is the regularization term which penalizes large coefficients to reduce model complexity and prevent overfitting. The higher the value of α, the stronger the penalty on large coefficients.
Example of Ridge Regression: Part 2
Interpreting the Coefficients
Once trained, we can look at the coefficients (weights) and the intercept to understand the model better.
We print the coefficients using ridge_model.coef_ and the intercept using ridge_model.intercept_.
As with a regular linear regression, coefficients show how much each feature contributes to the final prediction. The intercept is the value when all the features are zero.
Comparing Performance: Part 1
Comparing Performance: Part 2
Now, let's compare the result of the Ridge Regression and the Linear Regression:
Now, let's train our Ridge Regression model using the training data.
Python
# Train a ridge regression modelridge_model = Ridge(alpha=0.35)ridge_model.fit(X_train, y_train)# Make predictionsy_pred_ridge = ridge_model.predict(X_test)# Calculate Mean Squared Errormse_ridge = mean_squared_error(y_test, y_pred_ridge)print(f"Ridge Regression MSE: {mse_ridge}")# Ridge Regression MSE: 2878.4563201253923
Here:
We create a Ridge Regression model with α set to 0.35. This α value controls the strength of the regularization. Higher values mean stronger regularization.
We train (fit) the model using the fit() method with our training data (X_train and y_train).
Evaluate the model using Mean Squared Error (MSE).
Ridge Regression is often better than regular linear regression when:
Multicollinearity: It handles highly correlated features by reducing the variance of coefficient estimates, leading to better generalization.
Overfitting: It prevents overfitting by adding regularization, improving model performance on new data.
High-Dimensional Data: It works well when the number of features is high relative to the number of observations, stabilizing coefficient estimates.
Let's compare the performance of the Regular Linear Regression model and the Ridge Regression model using their Mean Squared Error values. For this purposes, we will generate a highly correlated data, where the Ridge Regression is expected to be better:
Python
import pandas as pdimport numpy as npn_samples = 100X1 = np.random.rand(n_samples)X2 = X1 + np.random.normal(0, 0.05, n_samples) # Higher correlation with smaller noiseX3 = X1 + X2 + np.random.normal(0, 0.05, n_samples) # Even higher correlation with smaller noiseX4 = X1 + 2*X2 + 0.5*X3 + np.random.normal(0, 0.05, n_samples) X5 = X2 + 3*X3 - 0.5*X4 + np.random.normal(0, 0.05, n_samples) X = np.vstack([X1, X2, X3, X4, X5]).T# Step 2: Generate a target variable with more noisey = 3 * X1 + 5 * X2 + np.random.normal(0, 1.0, n_samples) # Increased noise in y# Convert to DataFrame for easier display (optional)df = pd.DataFrame(X, columns=['X1', 'X2', 'X3', 'X4', 'X5'])df['y'] = y
Features (x2,...,x5) are the linear combinations of other features, which means the data is multicollinear.