From be3b4df14565926f78703b7b12cb3421752684a6 Mon Sep 17 00:00:00 2001 From: Osamsami <145556347+Osamsami@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:16:46 -0800 Subject: [PATCH] feat: add linear regression from scratch closes #2689 --- .../medium/linear_regression_scratch.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 exercises/1000_programs/medium/linear_regression_scratch.py diff --git a/exercises/1000_programs/medium/linear_regression_scratch.py b/exercises/1000_programs/medium/linear_regression_scratch.py new file mode 100644 index 0000000..3e6e5c0 --- /dev/null +++ b/exercises/1000_programs/medium/linear_regression_scratch.py @@ -0,0 +1,25 @@ +def linear_regression(x_values, y_values, learning_rate=0.01, epochs=1000): + """ + Implements Simple Linear Regression using Gradient Descent. + This is the foundation of Supervised Learning. + """ + # Initializing weight (m) and bias (b) + m, b = 0.0, 0.0 + n = len(x_values) + + for _ in range(epochs): + # Calculating predictions + y_pred = [m * x + b for x in x_values] + + # Calculating Gradients + dm = (-2/n) * sum(x * (y - yp) for x, y, yp in zip(x_values, y_values, y_pred)) + db = (-2/n) * sum(y - yp for y, yp in zip(y_values, y_pred)) + + # Updating parameters (Gradient Descent) + m -= learning_rate * dm + b -= learning_rate * db + + return m, b + +# Simple Test Case +# x = [1, 2, 3], y = [2, 4, 6] -> Expected m=2, b=0 \ No newline at end of file