【发布时间】:2017-10-05 14:29:18
【问题描述】:
我正在尝试在 python 中使用矢量化逻辑回归
麻木的。我的成本函数 (CF) 似乎工作正常。然而有一个
梯度计算的问题。它返回 3x100 数组,而它
应该返回 3x1。我认为(hypo-y) 部分有问题。
def sigmoid(a):
return 1/(1+np.exp(-a))
def CF(theta,X,y):
m=len(y)
hypo=sigmoid(np.matmul(X,theta))
J=(-1./m)*((np.matmul(y.T,np.log(hypo)))+(np.matmul((1-y).T,np.log(1-hypo))))
return(J)
def gr(theta,X,y):
m=len(y)
hypo=sigmoid(np.matmul(X,theta))
grad=(1/m)*(np.matmul(X.T,(hypo-y)))
return(grad)
X 是 100x3 阵列,y 是 100x1,theta 是 3x1 阵列。看起来这两个函数都是单独工作的,但是这个优化函数给出了一个错误:
optim = minimize(CF, theta, method='BFGS', jac=gr, args=(X,y))
错误:“ValueError:形状 (3,100) 和 (3,100) 未对齐:100 (dim 1) != 3 (dim 0)”
【问题讨论】:
-
请展示您如何使用示例输入调用函数。我认为这与最终的形状有很大关系。
-
我的 X 输入是 100X3 数组,y 输入是 100X1,theta 输入是 3X1 数组。现在看来这两个函数单独工作但是这个优化函数给出了一个错误: optim= minimum(CF, theta, method='BFGS', jac=gr, args=(X,y)) 错误:“ValueError:shapes (3,100 ) 和 (3,100) 未对齐:100 (dim 1) != 3 (dim 0)" 感谢您的关注!
标签: python numpy vectorization gradient logistic-regression