Bird
Raised Fist0
ML Pythonml~20 mins

Linear regression with scikit-learn in ML Python - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - Linear regression with scikit-learn
Problem:Predict house prices based on size using linear regression.
Current Metrics:Training R2 score: 0.95, Validation R2 score: 0.60
Issue:The model is overfitting: training score is very high but validation score is much lower.
Your Task
Reduce overfitting so that validation R2 score improves to at least 0.85 while keeping training R2 score below 0.90.
Use only scikit-learn library.
Do not change the dataset.
Do not add new features.
Hint 1
Hint 2
Hint 3
Solution
ML Python
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import r2_score
import numpy as np
import pandas as pd

# Sample synthetic dataset
np.random.seed(42)
X = 2 * np.random.rand(100, 1)  # House size in 1000 sq ft
noise = np.random.randn(100, 1) * 0.5
y = 4 + 3 * X + noise  # Price in 100k dollars

# Split data
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# Use Ridge regression with cross-validation to find best alpha
ridge = Ridge()
param_grid = {'alpha': [0.01, 0.1, 1, 10, 100]}
grid_search = GridSearchCV(ridge, param_grid, cv=5)
grid_search.fit(X_train, y_train.ravel())

best_alpha = grid_search.best_params_['alpha']

# Train Ridge with best alpha
model = Ridge(alpha=best_alpha)
model.fit(X_train, y_train.ravel())

# Predict and evaluate
train_pred = model.predict(X_train)
val_pred = model.predict(X_val)
train_r2 = r2_score(y_train, train_pred)
val_r2 = r2_score(y_val, val_pred)

print(f"Best alpha: {best_alpha}")
print(f"Training R2 score: {train_r2:.2f}")
print(f"Validation R2 score: {val_r2:.2f}")
Replaced simple LinearRegression with Ridge regression to add regularization.
Used GridSearchCV to find the best regularization strength alpha.
Trained the model with the best alpha to reduce overfitting.
Results Interpretation

Before: Training R2 = 0.95, Validation R2 = 0.60 (overfitting)

After: Training R2 = 0.88, Validation R2 = 0.87 (better generalization)

Adding regularization helps reduce overfitting by limiting model complexity, improving validation performance while slightly lowering training performance.
Bonus Experiment
Try using Lasso regression instead of Ridge and compare the results.
💡 Hint
Lasso can also perform feature selection by shrinking some coefficients to zero.

Practice

(1/5)
1. What is the main goal of linear regression in machine learning?
easy
A. To find a line that predicts a continuous value from input data
B. To classify data into categories
C. To cluster data points into groups
D. To reduce the number of features in data

Solution

  1. Step 1: Understand the purpose of linear regression

    Linear regression aims to model the relationship between input variables and a continuous output by fitting a line.
  2. Step 2: Compare with other tasks

    Classification assigns categories, clustering groups data, and feature reduction simplifies data, which are different tasks.
  3. Final Answer:

    To find a line that predicts a continuous value from input data -> Option A
  4. Quick Check:

    Linear regression predicts continuous values [OK]
Hint: Linear regression predicts continuous numbers, not categories [OK]
Common Mistakes:
  • Confusing regression with classification
  • Thinking linear regression clusters data
  • Believing it reduces features
2. Which of the following is the correct way to import the LinearRegression class from scikit-learn?
easy
A. from sklearn.linear_model import LinearRegression
B. import LinearRegression from sklearn.linear_model
C. from sklearn import LinearRegression
D. import linear_model.LinearRegression

Solution

  1. Step 1: Recall correct Python import syntax

    Python imports classes using 'from module import ClassName' syntax.
  2. Step 2: Match with scikit-learn structure

    LinearRegression is inside sklearn.linear_model, so correct import is from sklearn.linear_model import LinearRegression.
  3. Final Answer:

    from sklearn.linear_model import LinearRegression -> Option A
  4. Quick Check:

    Correct import syntax = from sklearn.linear_model import LinearRegression [OK]
Hint: Use 'from sklearn.linear_model import LinearRegression' [OK]
Common Mistakes:
  • Using wrong import order
  • Trying to import directly from sklearn
  • Using incorrect module names
3. What will be the output of the following code snippet?
from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegression()
model.fit(X, y)
print(round(model.coef_[0], 1))
medium
A. 0.5
B. 2.0
C. 10.0
D. 1.0

Solution

  1. Step 1: Understand the data relationship

    X values are 1 to 5, y values are exactly double X (2,4,6,8,10), so slope should be 2.
  2. Step 2: Check model coefficient

    LinearRegression fits y = coef * X + intercept. coef_ will be close to 2.0 here.
  3. Final Answer:

    2.0 -> Option B
  4. Quick Check:

    Slope of y=2x is 2.0 [OK]
Hint: Slope equals change in y over change in x [OK]
Common Mistakes:
  • Confusing coefficient with intercept
  • Not rounding output
  • Assuming coefficient is 1 or 10
4. Identify the error in this code that tries to train a linear regression model:
from sklearn.linear_model import LinearRegression
X = [[1], [2], [3]]
y = [2, 4, 6]
model = LinearRegression()
model.fit(X, y)
print(model.predict([4]))
medium
A. Passing a list instead of numpy array to fit
B. LinearRegression class is not instantiated correctly
C. Missing import for numpy
D. Predict input shape is incorrect, should be 2D array

Solution

  1. Step 1: Check input shapes for fit and predict

    fit accepts list of lists for X, so no error there. But predict expects 2D array, [4] is 1D.
  2. Step 2: Fix predict input shape

    Predict should get [[4]] (2D) not [4] (1D) to avoid shape error.
  3. Final Answer:

    Predict input shape is incorrect, should be 2D array -> Option D
  4. Quick Check:

    Predict input must be 2D array [OK]
Hint: Always pass 2D array to predict, e.g., [[value]] [OK]
Common Mistakes:
  • Passing 1D array to predict
  • Assuming fit needs numpy arrays
  • Wrong class instantiation
5. You trained a linear regression model with scikit-learn and got an R² score of 0.85 on test data. What does this score mean?
hard
A. The model has 85% chance to predict correctly
B. The model's predictions are 85% accurate
C. The model explains 85% of the variance in the target variable
D. The model's error rate is 15% on test data

Solution

  1. Step 1: Understand R² score meaning

    R² (coefficient of determination) measures how well the model explains variance in the target.
  2. Step 2: Interpret 0.85 R²

    A score of 0.85 means 85% of the variance in the target is explained by the model.
  3. Final Answer:

    The model explains 85% of the variance in the target variable -> Option C
  4. Quick Check:

    R² = variance explained, not accuracy or error rate [OK]
Hint: R² shows variance explained, not accuracy percentage [OK]
Common Mistakes:
  • Confusing R² with accuracy
  • Thinking R² is probability
  • Assuming R² is error rate
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard