А что не получилось с методом наименьших квадратов?
Вот простейшее решение линейной регрессии:
def linregress(x, y, w=None, b=None):
x = np.array(x, dtype=np.float64)
y = np.array(y, dtype=np.float64)
if w is None:
w = np.ones(x.size, dtype=np.float64)
wxy = np.sum(w*y*x)
wx = np.sum(w*x)
wy = np.sum(w*y)
wx2 = np.sum(w*x*x)
sw = np.sum(w)
den = wx2*sw - wx*wx
if den == 0:
den = np.finfo(np.float64).eps
if b is None:
k = (sw*wxy - wx*wy) / den
b = (wy - k*wx) / sw
else:
k = (wxy - wx*b) / wx2
return k, b
На вход поступают векторы данных x и y (можно ещё вектор весов задать), на выходе коэффициенты k, b для модели y = kx + b.
"Волшебные" функции в numpy: polyfit/polyval.
Функции вычисления ошибок, типа sse/mse/rmse/rsquare написать легко по формулам, которые можно найти в интернете или в книжках по статистическому и регрессионному анализу.