python实现逻辑回归

本文介绍了逻辑回归在分类问题中的应用,重点讲解了如何通过引入Sigmoid函数将线性回归转化为分类任务,并利用极大似然估计及梯度下降法进行参数优化。

逻辑回归常用于分类问题,最简单诸如二分类问题:是否是垃圾邮件?比赛是赢是输?

对于线性回归问题, z = w0*x0+w1*x1+w2*x2+...

一般的通过最小二乘法学习参数w来预测 给定一个x值时z的大小,其值域在(-∞,+∞),而对于分类问题,显然预测值是离散的,通过引入S函数先将值域y缩小到(0,1),这样子,

当y>=0.5, 可分为正例

当y<0.5,可分为负例。这样预测问题就转化为分类问题了。

那么预测函数就写成

其中Z=ω.T x , ω是参数列向量,x是样本向量

那么样本xj为 正例的概率可以表示成

import numpy as np
def predict(x,w):
    return 1.0/1.0+np.e**(-x.dot(w)))

 

如果每个样本都分类正确,概率都为1,这当然是我们所最希望的,极大似然估计就是这样一个想法:假设样本间独立,找出一组参数使得当前样本出现的可能性最大,即将每个样本的概率相乘,使得概率最大。基于这个想法,我们就通过求极大似然函数的最大值来求解参数w

很明显,上面这个表达式不适合优化方法的求解,我们给他加一个对数,可以知道并不会改变极大值性质,这是由于对数函数的凸性。 那么就有对数似然函数

我们可以取对偶问题,求损失函数最小值

采用梯度下降法,对其求导

 

这样子就得到w的更新公式:   (g即为h)

α是步长,也称为学习速率,α旁边的因子就是由损失函数计算出来梯度值。

def iter_w(x, y, a, w):
prediction
= predict(x,w) g = (prediction - y) * x w = w+ a * g * (1.0 / y.size) return w

迭代,max_epochs表示迭代数

while counter < max_epochs:
    counter += 1
    for i in range(len(Y)):
        w = update(X[i,:], Y[i], a, w)

在实际学习中需要测试 不同的步长对学习结果的影响,进而选取比较合适的步长

from sklearn.cross_validation import KFold

 

转载于:https://www.cnblogs.com/who-a/p/5650959.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值