机器学习之逻辑斯提回归(Logistic Regression)模型

机器学习之逻辑回归模型

  • 1、逻辑回归模型介绍
  • 2、逻辑回归数学原理
  • 3、算法及Python实现
  • 4、小结

1、逻辑回归模型介绍

这里主要介绍二项逻辑回归模型,逻辑回归是一种分类模型,由条件概率分布P(Y|X)表示,形式为参数化的逻辑斯提分布。这里,随机变量X取值为实数,随机变量Y取值为1或0,通过监督学习的方法来估计模型参数。

2、逻辑回归数学原理

Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Sigmoid函数(或称为Logistic函数),函数形式为:

g(z)=11+ez g ( z ) = 1 1 + e − z

Sigmoid 函数如下图所示

这里写图片描述

逻辑回归的损失函数定义如下(具体推导过程可以查阅其他资料,这里不再赘述)

Cost(hθ(x),y)={log(hθ(x)),y=1log(1hθ(x)),y=0 C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) , y = 1 − l o g ( 1 − h θ ( x ) ) , y = 0

J(θ)=1mi=1nCost(hθ(xi),yi)=1m[i=1nyiloghθ(xi)+(1yi)log(1hθ(xi))] J ( θ ) = 1 m ∑ i = 1 n C o s t ( h θ ( x i ) , y i ) = − 1 m [ ∑ i = 1 n y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ]

注:公式中的h为sigmoid函数

梯度下降法求的最小值
θ更新过程:
这里写图片描述
即:
θj:=θjα1mi=1m(hθ(xi)yi)xji θ j := θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j

3、算法及Pyhton实现

输入:训练数据T={( x1,y1),(x2,y2),,(xm,ym x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m )},其中 xi=(x(1)i,x(2)i,,x(n)i,)T,x(j)i x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ , x i ( n ) , ) T , x i ( j ) 是第i个样本的第j个特征, ym y m 表示第m个样本的标签。
输出:实例x的类。
Python实现代码如下(所用到的数据集horse.rar

from numpy import *
def sigmoid(inX):
    return 1.0/(1+exp(-inX))
def stocGradDescent1(dataMatrix,classLabels,numIter=150):
    m,n = shape(dataMatrix)
    weights = ones(n)
    for j in range(numIter):
        dataIndex = list(range(m))
        for i in range(m):
            alpha = 4/(1.0+j+i)+0.01
            randIndex = int(random.uniform(0,len(dataIndex)))
            h = sigmoid(sum(dataMatrix[randIndex]*weights))
            error = h - classLabels[randIndex]
            weights = weights - alpha *error*dataMatrix[randIndex]
            del(dataIndex[randIndex])
    return weights
def classifyVector(inX,weights):
    prob = sigmoid(sum(inX*weights))
    if prob > 0.5:
        return 1.0
    else:
        return 0.0
def colicTest():
    frTrain = open('./horse/horseColicTraining.txt')
    frTest = open('./horse/horseColicTest.txt')
    trainingSet =[]; trainingLabels = []
    for line in frTrain.readlines():
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(21):
            lineArr.append(float(currLine[i]))
        trainingSet.append(lineArr)
        trainingLabels.append(float(currLine[21]))
    trainWeights = stocGradDescent1(array(trainingSet),trainingLabels,500)
    errorCount = 0; numTestVec = 0.0
    for line in frTest.readlines():
        numTestVec += 1.0
        currLine = line.strip().split('\t')
        lineArr = []
        for i in range(21):
            lineArr.append(float(currLine[i]))
        predClass = int(classifyVector(array(lineArr),trainWeights))
        groundLabel = int(currLine[21])
        if predClass != groundLabel:
            errorCount += 1
    errorRate = (float(errorCount)/numTestVec)
    print('The Predict Class is %d'%predClass),
    print('The Ground Truth is %d'%groundLabel)
    print('the error rate of this test is: %f'%errorRate)
    return errorRate
def multiTest():
    numTests = 10; errorSum = 0.0
    for k in range(numTests):
        errorSum += colicTest()
    print("after %d iterations the average error rate is: %f"%(numTests,errorSum/float(numTests)))

执行程序

multiTest()

输出结果如下
这里写图片描述

4、小结

Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法完成,最常见的是梯度下降算法,又可以简化为随机梯度下降算法(SGD),逻辑回归在机器学习中运用非常普遍,值得大家研究透彻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值