Logistic回归算法(梯度上升)

Logistic回归算法是一个最优化算法,回归就是拟合的过程。Logistic回归的思想就是利用现有数据对分类边界建立线性回归公式,今天我们用这个算法来解决二值分类问题。

这里介绍一个名叫Sigmoid的公式,这个函数是一种阶跃函数,(详细含义可以去问度娘)利用这个函数我们可以预测二值分类问题,为了使用Logistic回归分类器,我们需要在每一个特征值上乘以一个回归系数,然后把所有的值加起来,代入到Sigmoid函数中当它的值大于0.5的数据被分到1类,小于0.5的被分到0类。这里最佳回归系数可以有多种方法确定,这里先介绍一种利用梯度上升优化算法求解回归系数。testSet.txt下载(提取码:0dc4)

from numpy import *

def loadDataSet():
    dataMat = []; labelMat = []
    fr = open('testSet.txt')
    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

def sigmoid(inX):
    return 1.0/(1+exp(-inX))

def gradAscent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)            
    labelMat = mat(classLabels).transpose() 
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):              
        h = sigmoid(dataMatrix*weights)     
        error = (labelMat - h)              
        weights = weights + alpha * dataMatrix.transpose()* error 
    return weights
第一个函数还是初始化数据,dataMat是属性数据集,在dataMat的第一列都设置为1主要是为了方便计算。labelMat存储的是标签数据。第二个函数即是Sigmoid函数公式。第三个函数是最主要的函数,用于计算最佳回归系数。首先将存储特征值的列表转换成矩阵形式。以便进行计算,将标签数据转换成列向量。alpha是向目标移动的步长,maxCycles是迭代次数,我们可以改变这两个值来确定最佳的回归系数。for循环里的前两句是计算真是类别与预测类别的差值,接下来按照差值的方向调整回归系数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值