【发布时间】:2018-12-12 21:16:30
【问题描述】:
我正在训练手写识别的多类逻辑回归。对于函数最小化,我正在使用 fmin_tnc。 我已经实现了渐变功能如下:
def gradient(theta,*args):
X,y,lamda = args;
m = np.size(X,0);
h = X.dot(theta);
grad = (1/m) * X.T.dot( sigmoid(h)-y );
grad[1:np.size(grad),] = grad[1:np.size(grad),] + (lamda/
m)*theta[1:np.size(theta),] ;
return grad.flatten()
#flattened because fmin_tnc accepts list of gradients
这会为下面提供的小集合示例生成正确的梯度值:
theta_t = np.array([[-2],[-1],[1],[2]]);
X_t = np.array([[1,0.1,0.6,1.1],[1,0.2,0.7,1.2],[1,0.3,0.8,1.3],
[1,0.4,0.9,1.4],[1,0.5,1,1.5]])
y_t = np.array([[1],[0],[1],[0],[1]])
lamda_t = 3
但是当使用 scipy 的 checkgrad 函数时,它给出的错误是 0.6222474393497573 我无法追踪为什么会发生这种情况。因为这可能是 fmin_tnc 没有执行任何优化,并且总是给出与给定初始参数相等的优化参数。
【问题讨论】:
标签: python-3.x numpy machine-learning scipy logistic-regression