您的位置:首页 > 编程语言 > Python开发

Logistic回归算法(梯度上升)

2016-03-12 16:28 676 查看
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循环里的前两句是计算真是类别与预测类别的差值,接下来按照差值的方向调整回归系数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息