《机器学习实战》--Logistic回归

逻辑回归中的输入和输出是非线性关系,这样可以把输出限定在某一范围内。一个常用的逻辑回归函数为Sigmoid函数

Sigmoid函数

Sigmoid函数表达式为

hθ(x)=g(θTx)=11+eθx

其形状如下:
逻辑回归.jpg
可以看出,对于给定的任何输入,其输出范围为(0, 1)。Sigmoid可以用于分类。给出一个阈值 η ,当输出大于 η 时,归类为1;当输出小于 η 时,归类为0。

梯度下降法

在求解优化问题时,常常难求闭式解。这时可以采用梯度下降法逼近最优解。在一个多参数(x_1,x_2,…,x_n)优化问题中,对某一参数x求梯度,梯度方向就是x增长最快的方向,梯度反方向就是x下降最快的方向。假设求解最小值(如果是凸优化),一直沿着梯度反方向,则可以找到其最优点;即使是非凸优化问题,梯度下降也有着很好的表现。

z=w0x0+w1x1+...+wnxn

写成向量为
z=WTX

如果目标函数为 f(x) ,那么梯度下降法更新函数为

wn=wn+αwnf(W)

上面这个公式可以一直迭代,直到达到某个终止条件。其中 α 为步长。
下面看一段《机器学习实战》中梯度更新的Python代码

def gradAscent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)             #convert to NumPy matrix
    labelMat = mat(classLabels).transpose() #convert to NumPy matrix
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):              #heavy on matrix operations
        h = sigmoid(dataMatrix*weights)     #matrix mult
        error = (labelMat - h)              #vector subtraction
        weights = weights + alpha * dataMatrix.transpose()* error #matrix mult
    return weights

输入dataMatIn表示权重矩阵,每一行都是一组权重系数;classLabels表示目标值,是个列向量。上面函数先把输入转换为NumPy数据。maxCycles表示迭代500次终止,alpha表示步长,weights初始化为n行1列的向量,值为1。

在for循环中,首先计算函数f(这里为sigmoid函数)的输出h,计算期望值(labelMat)和输出值h的误差error;这里dataMatrix.transpose()相当于梯度了。上面的代码看似简单,其实乘法使用了矩阵相乘。

随机梯度下降

梯度下降法,在每一步更新梯度时都要遍历所有数据集。如果数据集中数据量大,那么计算复杂度会太高。这时可以考虑随机梯度下降。随机梯度下降,在每次更新权重时,只使用一个样本,遍历所有样本来更新数据。
在数学上可以这样理解:梯度下降法中,使用所有数据量的梯度是函数f下降最快的方向;随机梯度下降法中,虽然梯度的方向不是函数下降最快的,但是也是下降的方向。

可以给出Python代码比较

def stocGradAscent0(dataMatrix, classLabels):
    m,n = shape(dataMatrix)
    alpha = 0.01
    weights = ones(n)   #initialize to all ones
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i]*weights))
        error = classLabels[i] - h
        weights = weights + alpha * error * dataMatrix[i]
    return weights

这个函数的输入和前面相同,但是这里面没有矩阵相乘了,每次使用一个数据(即一行数据)。

批梯度下降

随机梯度下降中,每次只使用一组数据,梯度下降则使用全部数据;一个折中的方法是使用部分数据,即批梯度下降法。
批梯度下降法中,可以随机/顺序从训练集中取N组数据,使用这N组数据来更新步长。

参考

可扩展机器学习——梯度下降(Gradient Descent)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值