基于Logistic回归和Sigmoid函数的分类【机器学习】

2023-11-16

(一)认识Logistic回归(LR)分类器

首先,Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题,利用Logistic函数(或称为Sigmoid函数),自变量取值范围为(-INF, INF),自变量的取值范围为(0,1),函数形式为:

由于sigmoid函数的定义域是(-INF, +INF),而值域为(0, 1)。因此最基本的LR分类器适合于对两分类(类0,类1)目标进行分类。Sigmoid 函数是个很漂亮的“S”形,如下图所示:

 

LR分类器(Logistic Regression Classifier)目的就是从训练数据特征学习出一个0/1分类模型--这个模型以样本特征的线性组合作为自变量,使用logistic函数将自变量映射到(0,1)上。因此LR分类器的求解就是求解一组权值是是名义变量--dummy,为常数,实际工程中常另x0=1.0。不管常数项有没有意义,最好保留),并代入Logistic函数构造出一个预测函数:

 

函数的值表示结果为1的概率,就是特征属于y=1的概率。因此对于输入x分类结果为类别1和类别0的概率分别为:

 

 

 

当我们要判别一个新来的特征属于哪个类时,按照下式求出一个z值:

 (x1,x2,...,xn是某样本数据的各个特征,维度为n)

进而求出---若大于0.5就是y=1的类,反之属于y=0类。(注意:这里依然假设统计样本是均匀分布的,所以设阈值为0.5)。LR分类器的这一组权值如何求得的呢?这就需要涉及到极大似然估计MLE和优化算法的概念了,数学中最优化算法常用的就是梯度上升(下降)算法。

Logistic回归可以也可以用于多分类的,但是二分类的更为常用也更容易解释。所以实际中最常用的就是二分类的Logistic回归。LR分类器适用数据类型:数值型和标称型数据。其优点是计算代价不高,易于理解和实现;其缺点是容易欠拟合,分类精度可能不高。

(二)Logistic回归数学推导

1,梯度下降法求解Logistic回归

首先,理解下述数学推导过程需要较多的导数求解公式,可以参考“常用基本初等函数求导公式积分公式”。

假设有n个观测样本,观测值分别为为给定条件下得到yi=1的概率。在同样条件下得到yi=0的条件概率为。于是,得到一个观测值的概率为

-----此公式实际上是综合公式(1)得出

因为各项观测独立,所以它们的联合分布可以表示为各边际分布的乘积:

(m表统计样本数目)                              

上式称为n个观测的似然函数。我们的目标是能够求出使这一似然函数的值最大的参数估计。于是,最大似然估计的关键就是求出参数,使上式取得最大值。

对上述函数求对数:

 

 

最大似然估计就是求使上式取最大值时的θ,这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。在Andrew Ng的课程中将J(θ)取为下式,即:J(θ)=-(1/m)l(θ),J(θ)最小值时的θ则为要求的最佳参数。通过梯度下降法求最小值。θ的初始值可以全部为1.0,更新过程为:

(j表样本第j个属性,共n个;a表示步长--每次移动量大小,可自由指定)

 

因此,θ(可以设初始值全部为1.0)的更新过程可以写成:

 

 (i表示第i个统计样本,j表样本第j个属性;a表示步长)

该公式将一直被迭代执行,直至达到收敛(在每一步迭代中都减小,如果某一步减少的值少于某个很小的值(小于0.001), 则其判定收敛)或某个停止条件为止(比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围)。

 

 

2,向量化Vectorization求解

Vectorization是使用矩阵计算来代替for循环,以简化计算过程,提高效率。如上式,Σ(...)是一个求和的过程,显然需要一个for语句循环m次,所以根本没有完全的实现vectorization。下面介绍向量化的过程:

约定训练数据的矩阵形式如下,x的每一行为一条训练样本,而每一列为不同的特称取值:

 

 

g(A)的参数A为一列向量,所以实现g函数时要支持列向量作为参数,并返回列向量。由上式可知hθ(x)-y可由g(A)-y一次计算求得。

θ更新过程可以改为:

 

 

 

综上所述,Vectorization后θ更新的步骤如下:

(1)求A=X*θ(此处为矩阵乘法,X是(m,n+1)维向量,θ是(n+1,1)维列向量,A就是(m,1)维向量)

(2)求E=g(A)-y(E、y是(m,1)维列向量)

(3)求 (a表示步长)

 

3,步长a的选择

 

a的取值也是确保梯度下降收敛的关键点。值太小则收敛慢,值太大则不能保证迭代过程收敛(迈过了极小值)。要确保梯度下降算法正确运行,需要保证 J(θ)在每一步迭代中都减小。如果步长a取值正确,那么J(θ)应越来越小。所以a的取值判断准则是:如果J(θ)变小了表明取值正确,否则减小a的值。

选择步长a的经验为:选取一个a值,每次约3倍于前一个数,如果迭代不能正常进行(J增大了,步长太大,迈过了碗底)则考虑使用更小的步长,如果收敛较慢则考虑增大步长,a取值示例如:

…, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1…。

4,特征值归一化

Logistic 回归也是一种回归算法,多维特征的训练数据进行回归采取梯度法求解时其特征值必须做scale,确保特征的取值范围在相同的尺度内计算过程才会收敛(因为特征值得取值范围可能相差甚大,如特征1取值为(1000-2000),特征2取值为(0.1-0.2))。feature scaling的方法可自定义,常用的有:

1) mean normalization (or standardization)

(X - mean(X))/std(X),std(X)表示样本的标准差

2) rescaling

(X - min) / (max - min)

5,算法优化--随机梯度法

梯度上升(下降)算法在每次更新回归系数时都需要遍历整个数据集, 该方法在处理100个左右的数据集时尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度就太高了。一种改进方法是一次仅用一个样本点来更新回归系数,该方法称为随机梯度算法。由于可以在新样本到来时对分类器进行增量式更新,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算,因而随机梯度算法是一个在线学习算法。(与“在线学习”相对应,一次处理所有数据被称作是“批处理”)。随机梯度算法与梯度算法的效果相当,但具有更高的计算效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Logistic回归和Sigmoid函数的分类【机器学习】 的相关文章

  • 7-7

    思路 在整个二维数组上下各加上一行0 然后从左到右 一列一列进行判断 判断的是数字改变次数 这里一列一列的找是因为可以把1 6 8分解成一片一片的元素 而且1 lt 8 lt 6 不知道能看懂不 代码里去掉 输入例子 可以得到 0 0 0

随机推荐

  • C#Tcp服务端主动断开,客户端无法感知问题

    服务端使用tcplistener接收连接请求 客户端使用tcpclient connect主动连接 在一对一的情况下 1个服务端只连接1个客户端时 服务端调用client Close 主动关闭连接后 客户端接收函数 revString br
  • Helm & Kubernetes Offline Deploy Rancher v2.7.5 Demo (helm 离线部署 rancher 实践)

    文章目录 1 简介 2 预备条件 3 选择 SSL 配置 4 离线安装的 Helm Chart 选项 5 下载介质 6 生成证书 7 镜像入库 8 安装 rancher 9 配置 nodeport 10 配置 ingress 11 界面访问
  • [1168]OSS ossutil64安装及使用

    文章目录 下载和安装 Linux系统安装 Windows系统安装 使用 oss下载到指定文件夹 从指定文件夹上传到oss相应的bucket下 设置ossutil的语言 clearOssData sh 下载和安装 下载地址 https hel
  • 一道有趣的面试:Trie 树及其改进

    0x00 导言 Trie 树是一种常见的数据结构 用以解决在给定单词在字典中是否存在的问题 而且支持动态的增删词典内容 常见的实现结构如下 struct node bool is word struct node 26 对于任意词典 查找给
  • 木马制作——图片木马制作

    木马制作 图片木马制作 一 简单说明 图片木马指的是图片格式的文件木马 图片格式包括jpg png等 原理是将木马程序和图片捆绑在一起 达到伪装的目的 程序可以是脚本语言或者编译语言 在web渗透中 通常将脚本编写的webshell和图片合
  • janus以及coturncentos8的配置_排错填坑完结篇

    前言 查阅了不少资料 网上对janus以及coturn的配置比比皆是 不过 我发现了一个问题 那就是 janus要直接对接coturn作为turn服务器吗 为什么 janus的demo例子 譬如 video room 能不能在手机4g网络上
  • netty文件上传断点续传的演示

    Netty文件上传断点续传的演示 一 理论和协议规范和工具类等 1 实现原理 netty文件上传采用自定义的协议方式实现 断点续传主要是依据RandomAccessFile类的随机读写能力 主要流程是客户端发起请求 将需要上传文件名称 路径
  • Leetcode[数组] 分发饼干 -- 贪心算法

    0 题目描述 leetcode原题链接 分发饼干 1 预排序 双指针 利用贪心算法的思想 每次都先满足胃口最小的孩子 直到有效饼干分完 或者小胃口孩子都被满足则停止分发 class Solution def findContentChild
  • 区块链浏览器搭建

    嗨喽 大家好 不知道大家是否遇见过类似的问题 自己使用以太坊源代码搭建了一个开发网私链时 缺少了主网或者测试网的区块链浏览器这种区块链数据直观展示的工具 那么今天就带大家一起搭建一个适合自己的区块链浏览器使用 文章目录 一 环境准备 1 1
  • 利用BFD协议提高SD-WAN网络的故障收敛时间

    BFD简介 为了减小设备故障对业务的影响 提高网络的可用性 设备需要能够尽快检测到与相邻设备间的通信故障 以便能够及时采取措施 从而保证业务继续进行 现有的故障检测方法主要包括以下几种 1 硬件检测 例如通过SDH Synchronous
  • 第三章 C++之面向对象

    C 基础进阶系列文章 目录 第一章 C 之函数 第二章 C 之引用实现游戏对话框显示 第三章 C 之面向对象 第二章 C 之面向对象 C 基础进阶系列文章 前言 一 什么是面向对象 二 抽象与类 1 C 中的类 2 类的声明 3 创建第一个
  • Java基础知识总结(史上最全)

    Java基础知识总结 写代码 1 明确需求 我要做什么 2 分析思路 我要怎么做 1 2 3 3 确定步骤 每一个思路部分用到哪些语句 方法 和对象 4 代码实现 用具体的java语言代码把思路体现出来 学习新技术的四点 1 该技术是什么
  • openssl编程指南

    openssl编程指南 对于openssl应用编程这方面的详细文档很少 我是通过认真分析openssl源码包中的示例代码来学习并结合man文档来理解它的基本结构的 SSL通讯模型为标准的C S结构 除了在TCP层之上进行传输之外 与一般的通
  • ubuntu18.04使用jlnk下载程序

    ubuntu使用JLink下载程序 JLink安装 JLink官网下载最新的JLink驱动程序 ubuntu使用的是deb包 下载时选J Link Software and Documentation Pack下面的链接 使用sudo dp
  • 基于梯度下降的线性回归(Gradient Descent For Linear Regression)

    概述 梯度下降是很常用的算法 它不仅被用在线性回归上和线性回归模型 平方误差代价函数 在本次 我们要将梯度下降和代价函数结合 我们将用到此算法 并将其应用于具体的拟合直线的线性回归算法里 梯度下降算法和线性回归算法比较如图 左边梯度下降 右
  • Python 队列(Queue)用法

    一 队列 Queue Python的Queue模块中提供了同步的 线程安全的队列类 包括FIFO 先入先出 队列Queue LIFO 后入先出 队列LifoQueue 和优先级队列PriorityQueue 这些队列都实现了锁原语 能够在多
  • Win32程序之进程的原理

  • 面试题更新之-使用 base64 编码的优缺点

    文章目录 base64 编码是什么 使用 base64 编码的优缺点 base64 编码是什么 Base64编码是一种将二进制数据转换为ASCII字符的编码方式 它将三个字节的二进制数据分割成四组 每组6个比特 然后将这些6个比特转换为可打
  • IP有效性检查(C language)

    STATUS ip valid check const char v p Str int i int tmp char p NULL if strlen v p Str gt 15 return ERROR p char v p Str t
  • 基于Logistic回归和Sigmoid函数的分类【机器学习】

    一 认识Logistic回归 LR 分类器 首先 Logistic回归虽然名字里带 回归 但是它实际上是一种分类方法 主要用于两分类问题 利用Logistic函数 或称为Sigmoid函数 自变量取值范围为 INF INF 自变量的取值范围