В качестве обучающего упражнения я пытаюсь оценить параметры регрессии, используя метод MLE в Python.
Из того, что я собрал, функция логарифмического правдоподобия сводится к максимизации следующего :
введите описание изображения здесь
Итак, мне нужно взять частные производные относительно точки пересечения и наклона, установив для каждой ноль, и это должно дать мне коэффициенты.
Я пытался приблизиться это с использованием sympy следующим образом:
from sympy import *
b = Symbol('b')# beta1
a = Symbol('a')# intercept
x = Symbol('x', integer=True)
y = Symbol('y', integer=True)
i = symbols('i', cls=Idx)
x_values = [2,3,2]
y_values = [1,2,3]
n = len(x_values)-1
function = summation((Indexed('y',i) - a+b*Indexed('x',i))**2, (i, 0, n))
partial_intercept = function.diff(a)
print(partial_intercept)
# 6*a - 2*b*x[0] - 2*b*x[1] - 2*b*x[2] - 2*y[0] - 2*y[1] - 2*y[2]
intercept_f = lambdify([x, y], partial_intercept)
inter = solve(intercept_f(x_values, y_values), a)
print(inter)
# [7*b/3 + 2]
Я ожидал бы одно значение для наклона, такое, что переменная 'b' исчезнет. Однако я вижу, что это было бы невозможно, учитывая, что переменная b все еще присутствует в моем производном уравнении.
Есть ли у кого-нибудь совет, где я ошибаюсь?
Спасибо!
Редактировать: Исправлена опечатка в кодовом блоке