Алгоритм градиентного спуска не сходится - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь сделать простой классификатор, используя Python, и вот мой код (Это еще не все, но я уверен, что проблема в этой части.):

def grad(theta, X, y, m, lam):
    return (1 / m) * (X.T.dot(h(X, theta) - y)) + (lam / m) * theta

for i in range(400):
    # We shouldn't regularize the first theta so get a copy of it to change it back to normal
    first_t = theta[0]
    # Perform gradient descent
    theta = theta - a * grad(theta, X_train, Y_train, m_train, lam)
    # Change the value of the first theta to what it's supposed to be
    theta[0] = first_t - (a / m_train) * sum(X_train[:, 0] * (h(X_train, theta) - Y_train))

Но даже собучающий случай, простой как X = [[1,1], [1,2], [1,3], [1,4]] Y = [0,1,0,1], который говорит, является ли числодаже или нет (1 для да и 0 для нет), он все еще не сходится после 400 итераций. Я думал, что я бы изменил значение альфа, лямбда или число итераций, но ни одна не работала, но в случае, если вам интересно,a = 0.001 и lam = 0.0001!Заранее спасибо за любую помощь!

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