Logistics Rrgression(Logistics回归)

3 篇文章 0 订阅
3 篇文章 0 订阅

Logistics Rrgression(Logistics回归)

Logistic回归
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高。适用数据类型:数值型和标称型数据。
Logistic回归的一般过程
(1) 收集数据:采用任意方法收集数据。
(2) 准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳。
(3) 分析数据:采用任意方法对数据进行分析。
(4) 训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。
(5) 测试算法:一旦训练步骤完成,分类将会很快。
(6) 使用算法:首先,我们需要输入一些数据,并将其转换成对应的结构化数值; 接着,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于 哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作。

前导知识

Sigmoid函数

s(x)=11ex

x 为0时,Sigmoid函数值为0.5,随着x的增大,对应的Sigmoid值将趋近与1;而随着 x 的减小,Sigmoid值将逼近于0。如果刻度足够大,Sigmoid函数看起来很像一个阶跃函数。(如下两图)

特性:

s(x)=ex(1ex)2=s(x)(1s(x))

![屏幕快照 2017-08-20 09.04.22](/Users/liwei/Desktop/屏幕快照 2017-08-20 09.04.22.png)

![屏幕快照 2017-08-20 09.07.27](/Users/liwei/Desktop/屏幕快照 2017-08-20 09.07.27.png)

最大似然估计(Maximum Likelihood Estimate,MLE)

​ 它是建立在极大似然原理的基础上的一个统计方法,极大似然原理的直观想法是:一个随机试验如有若干个可能的结果A,B,C,…。若在仅仅作一次试验中,结果A出现,则一般认为试验条件对A出现有利,也即A出现的概率很大。一般地,事件A发生的概率与参数 θ 相关,A发生的概率记为P(A, θ ),则 θ 的估计应该使上述概率达到最大,这样的 θ 顾名思义称为极大似然估计。

梯度上升法(Gradient Ascent)公式推导

记Sigmoid函数的输入为 x ,对应的分类为y

x=θ0x0+θ1x1+θ2x2+···+θnxn


hθ(x)=g(θTx)=11+eθTx(θx)

由于Sigmoid函数的性质,我们对分类做如下处理
y={01hθ(x)<0.5hθ(x)>0.5

于是我们假设:
P(y=1|x;θ)=hθ(x)P(y=0|x;θ)=1hθ(x)

所以
P(y|x;θ)=hθ(x)y(1hθ(x))1y

根据极大似然估计,假设样本与样本之间独立,整个样本生成的概率即为所有样本生成概率的乘积, L(θ) 最大时取得最佳回归系数
L(θ)=P(y⃗ |x⃗ ;θ)=i=1nP(y(i)|x(i);θ)=i=1nhθ(x(i))y(i)(1hθ(x(i)))(1y(i))y⃗ x⃗ n,y(i)x(i)i

为方便计算,对总概率
L(θ)
取自然对数
l(θ)=ln(L(θ))=i=1ny(i)ln(hθ(x(i)))+(1y(i))ln(1hθ(x(i)))=i=1ny(i)ln(g(θTx(i)))+(1y(i))ln(1g(θTx(i)))

通过梯度上升法求出
l(θ)
最大时对应的各个回归系数
l(θ)θj=i=1n(y(i)g(θTx(i))1y(i)1g(θTx(i)))(g(θTx(i))θj)=i=1n(y(i)g(θTx(i))1y(i)1g(θTx(i)))g(θTx(i))(1g(θTx(i)))θTx(i)θj=i=1n(y(i)(1g(θTx(i)))(1y(i))g(θTx(i)))xj=i=1n(y(i)hθ(x(i)))xj=(yhθ(x))xj

所以最终梯度上升求最佳回归系数的表达式为:
θ=θ+α(yhθ(x))xαxθ

重复计算此表达式,直到该结果收敛(既与训练集中的数据相差小于某个值)或者重复到一定次数时。

随机梯度上升(Stochastic Gradient Ascent)

随机梯度上升法是为了解决大数据需要计算特别久的情况。采用每次随机选择一个样本来更新回归数据,使回归系数更快的收敛。

代码解释

# -*- coding: UTF-8 -*-
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): # sigmoid函数
    return 1.0/(1+exp(-inX))

def gradAscent(dataMatIn, classLabels): # 梯度上升
    dataMatrix = mat(dataMatIn)
    labelMat = mat(classLabels).transpose() # transpose函数为转置函数
    m,n = shape(dataMatrix)
    alpha = 0.001 # 步长
    maxCycles = 500 # 最多循环500次
    weights = ones((n,1)) # 将回归系数最开始都初始为1
    for k in range(maxCycles):
        '''
            以下均为矩阵计算,而非数组计算
            其中weight为回归系数labelMat为y,h为h(x),dataMartix为x
        '''
        h = sigmoid(dataMatrix * weights)
        error = (labelMat - h)
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值