def gradient_descent(X, y, w, b, learning_rate, iterations): m = len(y) for _ in range(iterations): predictions = X.dot(w) + b errors = predictions - y gradient_w = X.T.dot(errors) / m gradient_b = np.sum(errors) / m w = w - learning_rate * gradient_w b = b - learning_rate * gradient_b return w, b __ __