【问题标题】:What is wrong with a gradient for logistic regression?逻辑回归的梯度有什么问题?
【发布时间】:2017-03-20 22:21:02
【问题描述】:

我正在尝试对这个函数进行渐变: loss function (N - 对象,m - 特征)。

def L(y,X,w): #loss function return np.sum( np.log1p(np.exp(np.dot(w,(-X.T*y)))) )

这是我对偏导数的计算:analytic gradient

def g(y,X,w): #gradient return (-X.T*y).dot(1-1/(1+(np.exp(np.dot(w,(-X.T*y))))))

当我对梯度进行数值估计时,它的值不同于解析值,因此我可能进行了错误的计算。

梯度检查:

e = 1e-4
test =(np.array([0.6, -0.2]),   #y
 np.array([[3,8.5], [1,-5]]),   #X 
 np.array([-1,0.4]))   #w


grd = np.ones((ss[1].shape[1],))
loss1 = L(test[0],test[1],test[2][0]-e)
loss2 = L(test[0],test[1],test[2][0]+e)
grd[0] = (loss2-loss1)/(2*e);
loss1 = L(test[0],test[1],test[2][1]-e)
loss2 = L(test[0],test[1],test[2][1]+e)
grd[1] = (loss2-loss1)/(2*e);

print('\ngrd num: ',grd)
print('\ngrd analyt: ',g(test[0],test[1],test[2]))

grd 编号:[-7.25478847 -1.47346219]

grd 分析器:[-0.72164669 -2.59980408]

我哪里做错了?

【问题讨论】:

    标签: machine-learning logistic-regression gradient-descent


    【解决方案1】:

    你的解析梯度计算有误:

    def g(y,X,w):   #gradient
        return  (-X.T * y).dot(1 - 1 / (1 + (np.exp(np.dot(w,(-X.T * y))))))
    

    正确的是:

    def g(y,X,w):
        return (-X.T * y).dot(1 / (1 + (np.exp(np.dot(w,(X.T * y))))))
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 2014-09-13
      • 2015-07-15
      • 2014-03-21
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多