logistic回归改进

编程入门 行业动态 更新时间:2024-10-22 21:37:18

<a href=https://www.elefans.com/category/jswz/34/1749617.html style=logistic回归改进"/>

logistic回归改进

在上一篇文章中,我们已经介绍过了logistic回归也用python代码实现了logistic回归,这张我们主要介绍如何来改进logistic回归算法的效率和性能。上篇文章中也介绍主要是使用了梯度上升算法进行迭代来计算参数的值,这篇文章,我们使用随机上升梯度算法来实现logistic回归,随机梯度上升算法和梯度上升算法的效果差不多,梯度上升算法每次迭代的时候是使用所有的数据集进行迭代的,而随机梯度上升算法每次迭代的时候是使用一个数据进行迭代的。所以,从时间上来说,随机梯度算法要节省不少时间,一般对于数据集比较大的数据都是采用随机梯度算法。

梯度上升算法,对数据集进行logistic线性回归的效果图,可以看出分类错误的点还是非常少的,效果还算不错,但是计算了500*300次乘法,100表示的是每次进行迭代的时候,100个数据集都需要与weights(权重)相乘最后通过海威萨德尔阶跃函数来获取标签值。


下面是随机梯度上升算法的效果图,可以看出来其实它们的效果差不多,但是随机梯度上升算法相对于梯度上升算法来说,计算量要少的多,它只计算了100*3次乘法,下面是随机梯度上升的实现算法

#随机梯度上升算法
def stocGradAscent0(dataMatrix,classLabels):#获取矩阵的行数和列数m,n = np.shape(dataMatrix)#设置步长alpha = 0.01#初始化权重(系数)weights = np.ones(n)for i in range(m):#这里的h是标量,梯度上升中的h、error、weights均为矩阵h = sigmod(np.sum(dataMatrix[i]*weights))#error是标量error = classLabels[i] - h#数组类型weights = weights + alpha * error * dataMatrix[i]return weights


下面,我们对随机梯度上升算法进行改进,将随机梯度上升算法的迭代次数变成可设置,来提高随机梯度上升算法的分类效果,我们可以发现改进后的随机梯度上升算法的效果与梯度上升的效果图相当,这个还只是迭代了150次的效果图,改进版的随机梯度上升算法主要改动了两个地方,第一个地方就是alpha的计算方法,由之前的定量0.01改成了alpha=4/(1.0 + j + i) + 0.01,目的是为了缓解系数的波动。可以观察到,随着迭代次数的增加alpha会减少,但是不会为0,因为还有一个常数项。第二改动的地方就是,每次的迭代的值都是随机的,目的是为了减少周期性的波动。其实,细细思考一下,这个随机梯度上升其实和梯度上升算法没什么差别嘛。每次迭代的时候都将所有的数据集遍历了,只是它是随机取值的而已嘛。但是,事实真是如此吗?显然不是,随机梯度上升和梯度上升的本质区别不在于它们每次迭代的时候是否将所有的集都遍历了,而在于梯度上升每次是将整个数据集迭代运算来更新权重,而随机梯度上升算法每次只是将一个数据迭代运算来更新权重的。其实,整体的迭代速度还要比每个的迭代速度要快,原因在于矩阵的运算速度通常要比循环运算快,所以,当我们进行计算的时候尽量少用循环,多用矩阵。这里改进的alpha其实还有一个特点就是,刚开始的时候alpha的值会比较大,而后面alpha的值会越来越少,这样就会导致刚开始的时候每一次的步长会比较大,进而会加快alpha的收敛速度。

#改进版的随机梯度上升算法,默认迭代次数为150
def stoGradAscent1(dataMatrix,classLabels,numIter = 150):m,n = np.shape(dataMatrix)weights = np.ones(n)for j in range(numIter):dataIndex = [k for k in range(m)]for i in range(m):alhpa = 4/(1.0 + j + i) + 0.01randIndex = int(random.uniform(0,len(dataIndex)))h = sigmod(np.sum(dataMatrix[randIndex] * weights))error = classLabels[randIndex] - hweights = weights + alhpa * error * dataMatrix[randIndex]del(dataIndex[randIndex])return weights



更多推荐

logistic回归改进

本文发布于:2024-03-23 23:47:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744268.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:logistic

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!