Logistic回归之梯度上升优化算法(一)

Logistic回归之梯度上升优化算法

一、Logistic回归

首先我们需要了解什么是Logistic回归。Logistic回归是一种分类算法,一般用于二分类问题,例如预测明天是否下雨,当然也可以用于多分类问题。本文主要是讨论二分类问题。二分类问题即输出结果一般只有两个情况,我们可以理解为函数的输出为0或1。具有这种性质的函数我们已经接触过,该函数成为海微塞德阶跃函数(Heaviside step function),或者直接称为单位阶跃函数。然而该函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃过程很难处理。所以使用Sigmoid函数,Sigmoid函数计算公式如下:

                                                                              \large g\left ( z \right )=\frac{1}{1+e^{-z}}

                                                           \large z = w_0x_0+w_1x_1+w_2x_2+\cdot \cdot \cdot +w_nx_n

                                                                                    \large z = W^{T}X

Z是函数的输入,将两个数值向量对应元素相乘然后全部加起来得到z值。向量x是分类器的输入数据,向量w也就是我们要找到的最佳参数(系数),从而使得分类器尽可能精确。图中上部分是没有w的的输入,图中下部分是有w的输入。使得Sigmoid函数看起来像一个阶跃函数。

 二、梯度上升法

为了寻找最佳参数w,需要用到最优化理论的一些知识。首先介绍梯度上升的最优化方法。梯度上升法基于的思想是:要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。如果梯度记为\large \bigtriangledown,则函数\large f(x,y)d的梯度由下表示:

这个梯度意味着要沿x的方向移动,沿y方向移动。其中,函数f(x,y)必须要在待计算的点上有定义并且可微。其实和我们高中求导求极值是一个意思。梯度算法的迭代公式如下:

其中\large \alpha为步长,也就是学习速率,控制更新的幅度。我们以函数\large f(x) = -x^{^{2}}+4x为例。比如从(0,0)开始,迭代路径就是1→2→3→4→...→n,直到求出的x为函数极大值的近似值,停止迭代,python3代码如下:

扫描二维码关注公众号,回复: 4028231 查看本文章
'''
函数说明:梯度上升算法测试函数
求函数f(x) = -x^2 + 4x的极大值
Parameters:
    无
Returens:
    无
'''
def Gradient_Ascent_test():
    def f_prime(x_old):
        return -2 * x_old +4    #f(x)的导数
    x_old = -1                  #初始值,给一个小鱼x_new的值
    x_new = 0                   #梯度上升算法初始值,即从(0,0)开始
    alpha = 0.01                #步长,也就是学习速率,控制更新的幅度
    presision = 0.00000001      #精度,也就是更新阈值
    while abs(x_old - x_new) >presision:
        x_old = x_new
        x_new = x_old + alpha * f_prime(x_old)  #上面提到的公式
    print(x_new)                                #打印最终求解的x
if __name__ == '__main__':
    Gradient_Ascent_test()

猜你喜欢

转载自blog.csdn.net/qq_25174673/article/details/83747938
今日推荐