逻辑回归----Python实现

本文介绍了逻辑回归的Python实现,包括梯度下降和随机梯度下降两种优化方法。实验结果显示,虽然随机梯度下降的准确度较低,但其作为在线学习算法,对新样本的响应更快,且消耗资源更少。
摘要由CSDN通过智能技术生成

逻辑回归是个二分类问题,具体原理网上有很多,这里只列出Python实现过程。
原理参考:逻辑回归

参考《机器学习实战》,对于逻辑回归参数寻优时,采用梯度下降法和随机梯度下降两种方法实现。

Python定义梯度下降函数:

# 梯度下降法
def gardDescent(dataMatIn,classLabels):
    dataMatrix = mat(dataMatIn) 
    labelMatrix = mat(classLabels).T
    m,n = shape(dataMatrix)     # 得到数据规模
    # 迭代步长
    alpha = 0.01
    # 迭代次数
    maxCycles = 5000
    weights = ones((n,1))       # help(numpy.ones)
                                # 设定初始参数,全为1
    for k in range(maxCycles):
        h = sigmoid(dataMatrix * weights)  # sigmoid函数已定义
        E = (h - labelMatrix)
        weights = weights - alpha * dataMatrix.T * E
    return weights

Python定义随机梯度下降函数:

梯度上升算法在每次更新回归系数时都需要遍历整个数据集,一种改进方法是一次仅用一个样本点来更新回归系数,该方法称为随机梯度上升算法。由于可以在新样本到来时对分类器进行增量式更新,因而随机梯度上升算法是一个在线学习算法。与“在线学习 ”相对应 ,一次处理所有数据被称作是“批处理” 。

随机梯度上升算法可以写成如下的伪代码

所有回归系数初始化为 1
对数据集中每个样本:
    计算该样本的梯度
    使用 alpha x gradient ^ ,得到新回归系数值
返回回归系数值
# 随机梯度上升算法
# 每次对参数的更新都只用一个样本值,属于在线算法
def stocGradAscent0(dataMatrix,classLabels):
    dataMatrix = array(dataMatrix)
    m,n = shape(dataMatrix)
    alpha = 0.01
    weights = ones(n)
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i] * weights))
        E = classLabels[i] - h
        weights = weights + alpha * E * dataMatrix[i]
    return weights

可以 看到 ,随机梯度下降算法与梯度下降算法在代码上很相似,但也有一些区别:

  • 第一 ,后者的变量 & 和误差 都是向量,而前者则全是数值;
  • 第二 ,前者没有矩阵的转换过程,所有变量的数据类型都是 numpy 数组。

Python实现逻辑回归

from numpy import *
import matplotlib.pyplot as plt

print('\n###############logistic regression#####################')

# 载入数据
def loadDataSet():

    dataMat = [];   labelMat = []
    fr = open('testSet.txt')
    # 逐行读入数据,然后strip去头去尾,用split分组
    for line in fr.readlines():
        lineArr = line.strip().split('   ')
        dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
        labelMat.append(int(lineArr[2]))
    return dataMat,labelMat

# 定义sigmoid函数
def sigmoid(inX):
    return 1.0/(1+exp(-inX))

########## 梯度下降法,见上面
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值