逻辑斯蒂回归多元分类的随机梯度下降

来源:互联网 发布:淘宝网上发论文 编辑:程序博客网 时间:2024/05/07 11:51

逻辑斯蒂的损失函数如下:




注意不能写成平方误差损失函数,因为h(x) = 1.0 / {1.0+ exp (-W*X)}, 因此平方损失误差函数非凸。



批量梯度下降



for k : 1...iSampleNum

    for j : 1...iFeatureNum

         

时间复杂度:O(m^2*n),m为样例数目,n为特征数目


随机梯度下降

for i : 1...iSampleNum

    for j : 1...iFeatureNum

        

时间复杂度:O(m*n),m为样例数目,n为特征数目



对梯度方向的一点思考:正类为1.0,负类为0.0。

h(x)=0.9, 正类1.0,预测正确,梯度为h(x)-y = 0.9 - 1.0 = -0.1,沿梯度相反方向0.1,逼近1.0.

h(x)=0.9, 负类0.0,预测错误,梯度为h(x)-y = 0.9 - 0.0 =  0.9,沿梯度相反方向-0.9,向0.0方向。

h(x)=0.1, 负类0.0,预测正确,梯度为h(x)-y = 0.1 - 0.0 =  0.1,沿梯度相反方向-0.1,向0.0方向。

h(x)=0.1, 正类1.0,预测错误,梯度为h(x)-y = 0.1 - 1.0 = -0.9,沿梯度相反方向0.9, 向1.0方向。


对于K元分类:多元分类的  h(x) = exp (W*X) / {1.0 + sum_exp (W*X)},对于iClassIndex <= K

                                            h(x) = 1.0 / {1.0 + sum_exp (W*X)},对于iClassIndex == K+1

也就是说需要多出一个默认类别K+1。该默认类别没有特征权重。


先介绍二元分类的随机梯度下降,伪代码如下:

for loop : 1...iLoopNum    for sample : 1...iSampleNum        计算样例sample的输出概率为dy        for feature : 1...iFeatureNum            更新特征权重w[feature] = dLearningRate * (dY - sample.class) * featureValue        if sample.class = 1.0        dCost -= log (dY)        else        dCost -= log (1.0 - dY)

下面介绍多元分类的随机梯度下降,伪代码如下:

for loop : 1...iLoopNum    for sample : 1...iSampleNum        计算样例sample的每个类别输出概率为prob[iClassNum]        for class : 1...iClassNum            if class == sample.class                for feature : 1...iFeatureNum                    更新特征权重w[class][feature] -= dLearningRate * (prob[class] - 1) * featureValue                     dCost -= log (prob[class])                          else if class != sample.class            for feature : 1...iFeatureNum                    更新特征权重w[class][feature] -= dLearningRate * prob[class] * featureValue  // 注意yi只与class == sample.class有关                dCost -= log (1.0 - prob[class])


0 0
原创粉丝点击