Python

Python задача линейной регрессии

Данные, необходимые для отчета, чтобы найти уравнение линейной регрессии. Задача должно решатся с помощью питона.
y = ax + b - уравнение регрессии.
Квадратичная невязка для каждой конкретной реализации Х и Y:
N[i] = (a•X[i]+b-Y[i])², i=1,...,n (где n - объём наблюдений).
Минимизируем сумму невязок (глобальную невязку или просто невязку):
J = Σ(i=1;n)N[i] → min.
Поиск минимума заменяется нахождением стационарной точки для функции J(a,b):
∂J/∂a = ∂J/∂b = 0
2•Σ(i=1;n)X[i]•(a•X[i]+b-Y[i]) = 0
2•Σ(i=1;n)(a•X[i]+b-Y[i]) = 0.
В результате получается СЛАУ относительно коэффициентов линейной регрессии a и b:
a•Σ(i=1;n)X²[i] + b•Σ(i=1;n)X[i] = Σ(i=1;n)X[i]•Y[i]
a•Σ(i=1;n)X[i] + b•n = Σ(i=1;n)Y[i].
Дальше решаем СЛАУ по формулам Крамера.
 X=[0.1,0.2,0.4,0.5,0.7,0.8,1,1.2,1.4,1.5]
Y=[3.5,4.2,5.1,5.5,5.8,6.1,6.4,6.6,6.8,7]
A, B, C, D = 0, 0, 0, 0
for i in range(10):
A += X[i] * X[i]; B += X[i]
C += X[i] * Y[i]; D += Y[i]
d = A * 10 - B * B
a = (C * 10 - B * D) / d
b = (A * D - B * C) / d
print(a, b)
А вот какие регрессионные коэффициенты получаются:Если что-то не нравится, значит такая простая модель линейной регрессии не подходит.
Семен Воронин
Семен Воронин
66 572
Лучший ответ
 import numpy as np 
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def f(x, k, b):
return k*x + b

x = np.array([0.1,0.2,0.4,0.5,0.7,0.8,1,1.2,1.4,1.5])
y = np.array([3.5,4.2,5.1,5.5,5.8,6.1,6.4,6.6,6.8,7])

[k,b], _ = curve_fit(f, x, y)
yfit = f(x,k,b)

print(f'k = {k}, b={b}')

plt.grid(True)
plt.plot(x,y,'b.',x,yfit,'m-')
plt.show()
Семен Воронин Красиво, конечно!Только пальцем тыкнуть - и результат сразу автоматически выводит в правое поле сверху. А коэффициенты регрессии то хоть какие?
Косим Раджабекович Также наверняка у Вас спросят про оценку качества полученной модели...