Почему в моей базовой реализации переменные линейной регрессии не сходятся к результату с каждой итерацией? - PullRequest
0 голосов
/ 30 апреля 2019

Я написал этот код как реализацию 2-х переменной линейной регрессии. Я использовал эту базовую формулу из курса Эндрю Н.Г.

Я не могу найти, что здесь происходит не так. Буду признателен за любой совет, что я делаю не так. Следующий код написан на Python3.

data - это набор точек [(0,0), (1,1) ... (99,99)]

data = [(i,i) for i in range(100)]

def get_direction_0(k, b, a = 0.001):
    sum_portion = 0
    for (x,y) in data:
        sum_portion += (k*x+b-y)
    step = a * (1/len(data)) * sum_portion

    return step

def get_direction_1(k, b, a = 0.001):
    sum_portion = 0
    for (x,y) in data:
        sum_portion += (k*x+b-y) * x
    step = a * (1/len(data)) * sum_portion
    return step

if __name__ == "__main__":
    t0 = 0
    t1 = 5
    for _ in range(100):
        temp0 = t0 - get_direction_0(t0, t1)
        temp1 = t1 - get_direction_1(t0, t1)
        t0 = temp0
        t1 = temp1 
    print(t0, t1)


Так что я ожидаю, что результат будет 1 и 0, но я получаю что-то очень необычное. Я не думаю, что эта проблема вызвана ограниченным числом итераций, поскольку кажется, что t1 и t2 не приближаются к результату с каждой итерацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...