一、 关于回归

在分类中问题中,如果给定一个输入,其所产生的输出是一个布尔值,那么这是是与否型的答案;而在输出是数值型的值下,我们所希望的学习结果不是C={0, 1},而是一个连续的函数。我们倾向于将数值的输出写成关于输入的函数,数值输入称为自变量,数值输出称为因变量。我们希望通过对训练数据集学习后得出一个类似下面的函数关系式(这里以简单线性为例)。

在二元分类中,我们需要一个这样的函数:它能够接收所有的输入并能预测类别,即0或1。Sigmoid函数正是我们需要的函数,

sigmoid函数它具有以下性质:

a、函数输入为0时,Sigmoid结果为0.5。

b、随着输入x值的增大,Sigmoid函数接近1,随着x的减小,其值接近于0。

我们将上面拟合得到函数g(x)代入Sigmoid函数中,若g(x)输出值大于0时,Sigmoid函数结果大于0.5,g(x)值小于0时,Sigmoid函数小于0.5。这样Sigmoid函数把g(x)函数值转为为后验概率,也即Sigmoid函数大于0.5概率时,我们将X类标标记为1,而概率小于0.5时,X类标记为0。

sigmoid函数值越大,我们越有把握将X正确地分类。

二、寻找最佳拟合曲线

针对g(x)函数回归系数的求解,我们使用梯度上升优化法多次迭代求出最佳参数。

所谓梯度是指多元函数在某一点处的一阶偏导数向量。一个梯度应用直观理解的例子是热传导问题,物体温度沿着各个方向传播速度是不相同的,那么沿着哪条方向温度变化率是最小或最大的呢?还有是在爬山过程中,我们朝着哪个方向迈出一步上升的幅度最大呢?答案是沿着梯度的方向,温度变化率最大、迈出一步上升幅度最大。梯度上升法用于求解最大值,梯度下降法用于求解最小化问题。

基于上面提到的理论,我们在训练数据集中经过多次迭代后求解出最佳拟合参数,之后便能够在测试数据集中预测类别。

三、公式推导

四、更新回归系数

根据以上计算得出的梯度公式,我们每次迭代更新回归系数W公式为:

更新回归系数

alpha为学习因子(learning factor)或者称为步长(stepsize),该参数决定每次沿梯度方向移动多少。alpha值选择很重要,如果alpha值偏大,则可能导致函数摆动甚至发散,如果偏小,使得函数收敛速度很慢,计算开销偏大。同时,运用梯度方法求解最优化问题,最终结果可能不一定是全局最优,可能只是局部最优解。因为,在使用梯度方法优化过程中,它寻找的是最近的一个极值点,因此来说,函数仅存在一个极值点时才能达到全局最优。

求解最优化问题,梯度方法较为简单,但结果相当有效。我们还需注意的是标准梯度上升法在每次更新回归系数W时,都要遍历整个数据集,当数据规模很大情况下,内存开销和计算量很大。下面介绍一种在线学习算法--随机梯度上升法。

随机梯度上升法基本思想是:在每一次迭代更新回归系数时,其不是遍历整个数据集,而是一次仅用一个样本点来更新回归系数。更高级的思想是,我们不再像上面对alpha参数保持不变,而是随着迭代次数的增加,逐渐减小alpha值,也即越靠近最优解时,我们移动的步长越小以防越过最优解。同时,样本点也可以随机选取以减少周期性波动。

五、代码实现

1、标准梯度上升法

def gradAscent():

dataMat = []

labelMat = []

with open('testSet.txt') as fr:

for line in fr.readlines():

lineArr = line.strip().split()

dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])

labelMat.append(int(lineArr[2]))

dataMatrix = mat(dataMat)

labelMat = mat(labelMat).transpose()

m, n = shape(dataMatrix)

alpha = .001

maxCycles = 500

weights = ones((n, 1))

# print 'weights:', weights

for k in range(maxCycles):

h = sigmoid(dataMatrix * weights)

error = (labelMat - h)

weights += alpha * dataMatrix.transpose() * error

return weights

2、sigmoid方法

def sigmoid(inx):

return 1.0 / (1 + exp(-inx))

3、改进的随机梯度上升法

def stocGradAscentImproved(numIter=150):

"""Improved Stochastic gradient ascent method"""

with open('testSet.txt') as fr:

for line in fr.readlines():

lineArr = line.strip().split()

dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])

labelMat.append(int(lineArr[2]))

dataMat = array(dataMat)

labelMat = array(labelMat)

m, n = shape(dataMat)

weights = ones(n)

for j in range(numIter):

dataIndex = range(m)

for i in range(m):

alpha = 2 / (1.0 + j + i) + 0.01 # 更快地收敛

randIndex = int(random.uniform(0, len(dataIndex)))

h = sigmoid(sum(dataMat[randIndex] * weights))

error = classLabels[randIndex] - h

weights += alpha * error * dataMat[randIndex]

del dataIndex[randIndex] # 已选过的样本点删除

return weights

4、其中testSet.txt文件部分内容:

-0.017612 14.053064 0

-1.395634 4.662541 1

-0.752157 6.538620 0

-1.322371 7.152853 0

0.423363 11.054677 0

0.406704 7.067335 1

0.667394 12.741452 0

-2.460150 6.866805 1

0.569411 9.548755 0

stocGradAscentImproved方法在训练数据集求解出回归系数W,也即解出拟合曲线了,之后使用测试数据集预测类标号。如果sigmoid函数计算结果值大于0.5,则标记为1,而小于0.5标记为0。

在测试数据集上多次迭代求平均错误率。

六、总结

1、选择合适的分类器函数,这里使用sigmoid函数,我们在高中生物课学习过该参数,即种群S型生长曲线。sigmoid函数能够把拟合计算得到的曲线转换为后验概率,当sigmoid函数值大于0.5时,我们把该类标记为A类,小于0.5时,标记为B类。

2、在大规模数据集中,由于标准梯度上升法在每次迭代更新回归系数时,它都是遍历整个数据集,因此,该方法占用的内存空间和计算量很大。

3、公式算法应自己推导一遍以便对程序有更好的理解。

二元logistic模型案例_基于Logistic回归的二元分类应用(含公式推导)相关推荐

  1. 二元logistic模型案例_二元逻辑回归的简介与操作演示

    二元逻辑回归介绍 定义 Logistic回归主要用于因变量为分类变量(如是否等)的回归分析,自变量可以为分类变量,也可以为连续变量.它可以从多个自变量中选出对因变量有影响的自变量,并可以给出预测公式用 ...

  2. 二元logistic模型案例_二元选择(logistic的s )模型.ppt

    二元选择(logistic的s )模型 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. ...

  3. sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss)

    sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss) # 广义线性模型中的各种连接函数: ...

  4. 二元logistic模型案例_SPSS二项logistic回归分析案例实践,做个预测模型

    SPSS二项logistic回归分析案例实践,做个预测模型 自己动手实践是学习统计软件工具的捷径之一. 收集到某公司各个商户id,以及他们的注册时长.营业收入.成本数据,以及合作续约的情况,现在我们想 ...

  5. 人口logistic模型公式_最新人口指数增长模型和logistic模型教学文案

    根据美国人口从1790年到1990年间的人口数据(如下表),确定人口指数增长模型和Logistic 模型中的待定参数,估计出美国2010年的人口,同时画出拟合效果的图形. 表1 美国人口统计数据 指数 ...

  6. 基于java的网上花店销售系统_基于JAVA的鲜花销售系统(含全套CAD图纸).doc

    基于JAVA的鲜花销售系统(含全套CAD图纸) 编号 太湖学院 毕业设计(论文) 题目: 信机 系 专业 学 号: 学生姓名: 指导教师: 201年5月2日太湖学院本科毕业设计(论文) 诚 信 承 诺 ...

  7. logit回归模型假设_常见logistic回归模型有哪几种?

    日常统计分析中,较为常见的logistic回归分析主要包括三种形式,分别是二项logistic回归,无序多分类logistic回归和有序多分类logistic回归. 这三种统计方法,在SPSS统计软件 ...

  8. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  9. three相机在模型上_基于 three.js 的 3D 粒子动效实现

    作者:个推web前端开发工程师 梁神 一.背景 粒子特效是为模拟现实中的水.火.雾.气等效果由各种三维软件开发的制作模块,原理是将无数的单个粒子组合使其呈现出固定形态,借由控制器.脚本来控制其整体或单 ...

最新文章

  1. 为什么叫python编程-Python这么火,为什么说它不是未来的编程语言?
  2. SQL语句学习之路3
  3. windows系统上openssh client的离线安装
  4. Dom4j工具--XML的DOM解析(下)--写操作
  5. [Godot] v4.0.alpha1 GDScript 实现第三人称控制器
  6. 中国荔枝市场趋势报告、技术动态创新及市场预测
  7. [转载] python zip 文件解压中文乱码问题解决
  8. 江湖魔头-BugkuCTF平台
  9. 工业视觉检测厂家十大排名
  10. 深度学习中框架中reshape和transpose的区别
  11. LNMP+WordPress部署
  12. 场景编程集锦 - 吉米的总统梦想
  13. 解决office,word奔溃的问题
  14. E575: viminfo: Illegal starting char in line: hello=Hello\ \!\How\ are\ you\ \?
  15. 1349. 最大公约数
  16. [日常训练] Surprise me
  17. luogu 1558 色板游戏
  18. 计算机玩游戏不能全屏,电脑游戏不能全屏怎么办 电脑游戏不能全屏的解决方法...
  19. Jenkins 从零开始安装部署
  20. 【JESD204系列】六、加解扰模块的设计原理

热门文章

  1. tomcat localhost log 和 tomcat catalina log分别是什么日志
  2. Python键盘输入
  3. 微信一次性订阅消息流程
  4. 在Word里怎么设置每页不同的页眉
  5. fedora11 文泉驿micro-hei字体设置
  6. 详解C盘Windows文件夹里重要文件的作用
  7. rtk服务器协议,南方rtk服务器地址和端口
  8. 百度代码配置化实践:配置化是业务架构三化之一
  9. 个人如何搭建云手机出租?ARM服务器搭建机房教程
  10. 面试官问你的职业生涯规划是什么,该如何回答?