Я реализую классический алгоритм логистической регрессии на python и пытаюсь оптимизировать функцию стоимости с помощью optimize.minimize
, но получаю ошибку, связанную с формами. Тем не менее, я полностью уверен, что размеры правильные. Вот мой код
import numpy as np
from scipy import optimize
def sig(z):
return 1/(1+np.exp(-z))
def h(X,theta):
return sig(np.dot(X,theta))
def cost(X,y,theta):
return -np.dot(np.log(h(X,theta)).T,y)-np.dot(1-np.log(h(X,theta)).T,1-y)
def grad(X,y,theta):
return np.dot(X.T,h(X,theta)-y)
X=np.ones((10,3))
theta=np.zeros(X.shape[1])
y=np.ones(10)
opt=optimize.minimize(cost,theta,jac=grad,args=(X,y),method='CG')
И я получаю эту ошибку
File "C:/Users/Neso/.spyder-py3/temp.py", line 8, in h
return sig(np.dot(X,theta))
ValueError: shapes (3,) and (10,) not aligned: 3 (dim 0) != 10 (dim 0)
Но X
- это (10,3), а theta
- (3,0), поэтому проблем с np.dot(X,theta)
не должно быть. Я даже могу назвать все методы без проблем. Я слышал, что optimize.minimize
очень чувствителен, когда входными данными являются матрицы и векторы, но я не знаю, что делать в этом случае. Какие-либо предложения? Спасибо
`