Вектор весов, вычисляемый из алгоритма градиентного спуска для логистической регрессии, не является корректным измерением - PullRequest
0 голосов
/ 07 апреля 2019

Я прохожу курс машинного обучения Эндрю Нг на Coursera и хотел попробовать использовать логистическую регрессию для набора титановых данных kaggle, чтобы убедиться, что я понимаю, что я делаю.

passengers.dropna(subset = ['Age'], inplace=True)
X = passengers[['Age']]
X = np.concatenate((np.ones((X.shape[0],1)), X), axis=1)
theta = np.zeros((X.shape[1],1))
Y = passengers['Survived'].values

def gradDesc(X,Y,theta,rate):
    for i in range(1000):
        h = 1/(1+np.e**(-np.matmul(X, theta)))
        gradient = rate * np.dot(X.T, (h-Y)) / len(Y)
        theta_temp = theta - gradient
        theta = theta_temp
    return theta

theta = gradDesc(X,Y,theta,0.000001)

I 'Я новичок в numpy, линейной алгебре и т. д., поэтому я уверен, что делаю некоторые очевидные ошибки.

Моя проблема в том, что вектор весов, возвращаемый моей функцией градиентного спуска, имеет форму (2, 714) вместо (2, 1), 714 является числом строк.Я пытаюсь использовать векторизованную версию алгоритма градиентного спуска: theta = theta - rate * (1/m) * X'*(g(X * theta) - y), но часть X'*(g(X * theta) - y) не выполняет суммирующее действие не векторизованной версии (надеюсь, это имеет смысл).Как я уже сказал, я уверен, что это глупая ошибка, но надеюсь, что кто-то может мне помочь.

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