Gradient descent - Computing r_squared (residual sum of squares):
import numpy as np
from scipy.optimize import curve_fit
x = np.arange(1, 11, 1)
y = x + 10;
def lin_mod(x, a , b): return x*a + b
(a, b), cov = curve_fit(lin_mod, x, y)
y_mean = numpy.mean(y)
s_tot = sum((y - y_mean)**2)
s_res = sum((y-f(x, a, b))**2)
rss = 1 - (s_res / s_tot)