logistics回归--梯度上升算法以及改进--用于二分类

1.sigmoid函数应用

  • logistics回归是用来分类的,并且属于监督学习,分类也是仅限于二分类,就是结果非0即1 (这种函数通常称作跃阶函数)
  • 这个时候就出现问题了 01之间的分界点怎么处理?
  • 引入sigmoid函数 图像见下图

sigmoid函数图像

2.算法中的数学思想

举个引例:求 函数y = -x^2+3x+1 的最大值
很简单 求得导数 y’ = -2x+3
当且仅当x=1.5时函数y取得最大值
然而并不是所有的函数都可以这么一下求出来
所以 就利用了梯度上升的方法来求极值(最大值)

# y = -x^2+3x+1
# y'= -2x+3
def fun(inx):
    return (-2*inx+3)

if __name__ == '__main__':
    xNew = 2
    xOld = 0
    eps = 0.00001
    alpha = 0.01
    while abs(xOld - xNew) > eps: # 梯度上升 步长*'方向'
        xOld = xNew
        xNew = xNew + alpha * fun(xNew)
    print xNew
  • 拓展到矩阵 就有了不一样的表达式 解释logistic中的梯度上升
  • 求出最佳回归系数的目的是为了带入到sigmoid函数
  • 每个数据点都乘上一个回归系数 带入sigmoid函数 得到0-1之间的值 实现分类目的

3.算法伪代码–梯度上升算法

每个回归系数置为1
     for 0-loopNum
     带入sigmoid计算估计值
     更新回归系数的向量
返回系数矩阵

4.缺点不足

要想得到好的结果时间花费大
容易欠拟合 精度不太高

5.改进算法-随机梯度上升算法

  • 随机选取样本来更新回归系数
  • 步长时刻改变
  • 减少了运算复杂程度

6.伪代码-随机梯度上升算法

每个回归系数置为1
     for 0-loopNum
           for 0-n所有的点
                 更新步长
                 随机选取数据点带入sigmoid计算估计值
                 更新回归系数的向量
                 标记已经随机使用的点
返回系数矩阵

# -*- coding:utf-8 -*-

from numpy import *


def classify(inX, theta):  # 分类器0/1二分类
    res = sigm(sum(theta * inX))
    if res > 0.5:
        return 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值