Elasticnet Regression example with Simple Python
1. Scenario:
We’re predicting a house price based on:
- Area of the house
- Bedrooms in the house
We’ll run gradient descent to update weights using ElasticNet, combining L1 (Lasso) and L2 (Ridge) penalties.
Python Code (No Libraries)
# Sample data: [area, bedrooms] and target price X = [ [1400, 3], [1600, 3], [1700, 4], [1875, 4], [1100, 2] ] y = [245000, 312000, 279000, 308000, 199000] # Normalize the features (simple min-max normalization for interpretability) def normalize(X): norm_X = [] for col in zip(*X): min_val, max_val = min(col), max(col) norm_col = [(val - min_val) / (max_val - min_val) for val in col] norm_X.append(norm_col) return list(map(list, zip(*norm_X))) X = normalize(X) # Initialize parameters w = [0.0 for _ in range(len(X[0]))] # weights for features b = 0.0 # bias alpha = 0.1 # learning rate lambda1 = 0.01 # L1 penalty (Lasso) lambda2 = 0.01 # L2 penalty (Ridge) epochs = 1000 # Gradient Descent for epoch in range(epochs): dw = [0.0 for _ in w] db = 0.0 n = len(X) for i in range(n): y_pred = sum([w[j] * X[i][j] for j in range(len(w))]) + b error = y_pred - y[i] for j in range(len(w)): dw[j] += error * X[i][j] db += error for j in range(len(w)): # Add L1 and L2 regularization to the gradient dw[j] = (dw[j] / n) + lambda1 * (1 if w[j] > 0 else -1) + 2 * lambda2 * w[j] w[j] -= alpha * dw[j] db = db / n b -= alpha * db # Output final weights and bias print("Weights:", w) print("Bias:", b)
What We Just Did
- Normalized the features for stability
- Updated weights via gradient descent
- Penalty terms:
- L1 (λ₁) adds/subtracts a fixed amount → encourages some weights to become 0
- L2 (λ₂) adds weight² → discourages large weights
- No ML library used
Elasticnet Regression – ElasticNet Regression Suitability Checklist