← Lesson
Regularization
Joeven
Run
Reset
Python loads on first run
# Fit y ≈ w*x on two points, then see L2 keep w smaller xs = [1.0, 2.0] ys = [2.0, 4.0] # Extra noisy point that a huge w would chase xs_noisy = [1.0, 2.0, 1.5] ys_noisy = [2.0, 4.0, 10.0] def loss_l2(w, xs, ys, lam): mse = sum((w * x - y) ** 2 for x, y in zip(xs, ys)) / len(xs) return mse + lam * (w * w) def fit(xs, ys, lam, lr=0.05, steps=80): w = 0.0 for _ in range(steps): mse_g = sum(2 * (w * x - y) * x for x, y in zip(xs, ys)) / len(xs) g = mse_g + 2 * lam * w w = w - lr * g return w, loss_l2(w, xs, ys, 0.0) w0, mse0 = fit(xs_noisy, ys_noisy, lam=0.0) w1, mse1 = fit(xs_noisy, ys_noisy, lam=1.0) print("no L2 w", round(w0, 3), "train MSE", round(mse0, 3)) print("with L2 w", round(w1, 3), "train MSE", round(mse1, 3)) print("true pattern is w=2; L2 stayed closer")
Run to execute this in your browser. Nothing is sent to a server.