Я прохожу курс машинного обучения Эндрю Нг на 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)
не выполняет суммирующее действие не векторизованной версии (надеюсь, это имеет смысл).Как я уже сказал, я уверен, что это глупая ошибка, но надеюсь, что кто-то может мне помочь.