机器学习算法(二)逻辑回归的原理和实现

这里写图片描述
首先明确是分类而不是回归
逻辑回归的名字中虽然带有回归两个字,不过这是一个并不是一个回归算法,而是一个分类算法,他是在线性回归的基础上加入了sigmoid函数,将线性回归的结果输入至sigmoid函数中,并且设定一个阈值,如果大于阈值为1,小于阈值为0


sigmoid 函数:
这里写图片描述

在图中我们可以看到 x -> -∞ 时 y 趋向与0,反之趋向于 1

def sigmoid (x):
    return (1 / (1 + np.exp (-x)))

逻辑回归的推导过程

准备公式
sigmoid函数 : 这里写图片描述
预测函数 : 这里写图片描述
用概率的形式表示时间是否发生:
在样本 x 的条件下 y = 1 的概率 : 这里写图片描述
在样本 x 的条件下 y = 0 的概率 : 这里写图片描述
上面两个公式合并: 这里写图片描述

通过最大似然函数求损失函数
这里写图片描述
这里写图片描述
这里在x 和 y 上的上标标忘了打了,用来表示第i个数据

损失函数这里写图片描述


在这里我们发现损失函数是一个恒正的函数,所以我们使用梯度上升算法,这个和梯度下降算法并没有什么区别
梯度上升迭代函数 : 这里写图片描述
偏导函数,为了推导方便,暂时省略求和计算
偏导公式进行链式分解: 这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
上面三式综上:这里写图片描述


综上可以得
这里写图片描述


程序实现:

def gradAscent(dataMatIn, classLabels):
    dataMatrix = np.mat(dataMatIn)                                        #转换成numpy的mat
    labelMat = np.mat(classLabels).transpose()                            #转换成numpy的mat,并进行转置
    m, n = np.shape(dataMatrix)                                            #返回dataMatrix的大小。m为行数,n为列数。
    alpha = 0.001                                                        #移动步长,也就是学习速率,控制更新的幅度。
    maxCycles = 500                                                        #最大迭代次数
    weights = np.ones((n,1))
    for k in range(maxCycles):
        h = sigmoid(dataMatrix * weights)                                #梯度上升矢量化公式
        error = labelMat - h
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights.getA()                                                #将矩阵转换为数组,返回权重数组
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值