Я пытаюсь реализовать LMS algortihm, я читаю эту статью: http://cs229.stanford.edu/notes/cs229-notes1.pdf Я застрял на этапе обновления тета (стр. 5 в документе). Особенно то, что я пытаюсь сделать, это добавить два числа. Я даю testX, который представляет собой матрицу nx2 и вектор testY, который представляет собой n-мерный вектор. Цель алгоритма LearnTheta состоит в том, чтобы найти такую тэту, чтобы минимизировать функцию стоимости с использованием этой конкретной тэты. В этом случае оптимальная тета равна [1,1], поэтому алгоритм должен заставить тета сходиться к этому вектору. К сожалению, это не так. Буду признателен за любую помощь.
import numpy as np
import math
def hypothesis(x, theta):
"""
x is training set
theta is weight parameter
"""
return np.transpose(np.array(theta)).dot(np.array(x))
def costFunction(theta, x, y):
"""
x is training set => (j, 2)
y is a vector of
theta is weight parameter
"""
factor = 1 / 2
sum = 0
for i in range(0, len(x)):
sum += math.pow((hypothesis(x[i], theta) - y[i]), 2)
return factor * sum
def learnThetaSingle(theta, x, y, alpha):
return theta + alpha * (y - hypothesis(x, theta)) * x
def learnTheta(theta, x, y, alpha):
f = theta
for i in range(0, len(x)):
f = learnThetaSingle(f, x[i], y[i], alpha)
return f
testX = np.array([[1, 2],
[4, 6],
[5, 123],
[41, -14],
[-413, 0],
[0, 0],
[5, 12],
[-3, -14],
[1, 1004],
[51, 51]])
testY = np.array([3, 10, 128, 27, -413, 0, 17, -17, 1005, 102])
theta = [2, 3]
print(costFunction(theta, testX, testY))
# 2147656.0
theta = learnTheta(theta, testX, testY, 0.0001)
print(theta)
#[-29.59330648 68.71968433] , this is far from true