当前位置: 首页 > news >正文

逻辑回归(解决分类问题)

定义:逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模,预测一个事件发生的概率。逻辑回归通常用于二元分类问题,即将数据分为两个类别。它基于线性回归模型,但使用了逻辑函数(也称为S形函数)来将输出限制在0到1之间,表示事件发生的概率。逻辑回归可以通过最大似然估计或梯度下降等方法来进行参数估计,从而得到一个可以用于分类的模型。

一、逻辑回归入门

在分类肿瘤的例子中,我们将肿瘤分为恶性肿瘤和良性肿瘤。 对于恶性肿瘤赋值1(yes),对良性肿瘤赋值0(no)。并在坐标系中表示出其数据集以及对应的拟合曲线如下:

  

二、逻辑函数(对数几率函数)

        沿用上面的例子,假设原始数据集有一个值为0.7,我们应该如何来在坐标系中表示呢? 我们需要引用一个逻辑函数来描述这些位于0~1中间的数据。

        在所有的二分类问题中,我们需要将实值Z准华为0/1的值,最理想的函数肯定是分段函数(单位阶跃函数):

y=\begin{cases} 0& z<0\\ 0.5& z=0 \\ 1& z>0 \end{cases}

        但是分段函数不连续,因此不能单调可微调函数g^{-}(\cdot )转化为线性模型。所以我们希望找到一个用于替代分段函数的“近似替代函数”,希望它能够单调可微。逻辑函数(Sigmoid function)正是这样一个函数:

y=\frac{1}{1+e^{-z}}                (1)

当我们将逻辑函数作为g^{-}(\cdot )带入(1)式中可得:

y=\frac{1}{1+e^{-(wx^{T}+b)}}       (2)

 经过变换后得到:

ln\frac{y}{1-y}=w^{T}x+b   (3)

 若将y视作样本x为正例(恶性肿瘤)的可能性,则1-y是其反比的可能性,两者的比值\frac{y}{1-y}称为几率(odds),反映了x作为正例的相对可能性。按照通俗的话来说,我们可以视逻辑回归的输出结果为对于给定的输入x情况下输出y=1的概率。

        还是以肿瘤的例子说明:其中x为肿瘤尺寸,y为良性肿瘤0和恶性肿瘤1,如果从上述(2)中得到y=0.7,则说明对于x有70%的概率为恶性肿瘤。  

逻辑函数常见形式:

z=\vec{w}\cdot \vec{x}+b 

f_{\vec{w},b}(\vec{x})=g(\vec{w}\cdot \vec{x}+b)=\frac{1}{1+e^{-(\vec{w}\cdot \vec{x}+b)}}=P(y=1|x;\vec{w},b)

三、决策边界

在分类问题中,通过逻辑回归得到的输出只会是确定的整数;我们必须找到一个介于0~1之间的阈值flag作为决策边界。

判断的基本形式如下:通过样本值与flag进行比较来分类;

Is f_{\vec{w},b}(\vec{x})\geq flag?

Yes:\hat{y}=1    No:\hat{y}=0

因此,我们需要确定何时f_{\vec{w},b}(\vec{x})\geq flag的点;

有逻辑函数的基本变形形式可知在此时必有:

g(z)\geq flag\Rightarrow z>=flag\Rightarrow \vec{w}\cdot \vec{x}+b>=flag

因此我们可以将z=\vec{w}\cdot \vec{x}+b作为决策边界

 

 非线性的决策边界

分析决策边界的函数我们不难发现,对于非线性的决策边界我们可以综合多项式回归的知识进行求解。如下图中,使用w_{1}x_{1}^2+w_{2}x_{2}^2=1作为决策边界。

对于多元线性回归也可以同样推导 

相关文章:

  • 通过Wireshark抓包分析谈谈DNS域名解析的那些事儿
  • 通过开源端点可见性改善网络安全响应
  • 【React 常用的 TS 类型】持续更新
  • 树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动
  • QT笔记 - 添加项目到版本控制系统 - Git
  • mysql原理--redo日志2
  • 2024,会更好嘛?
  • golang学习-流程控制
  • Golang+Gorm库使用踩坑——未标识primarykey导致创建后无法返回修改
  • 大白菜U盘安装系统-戴尔电脑
  • 【JVM 基础】类字节码详解
  • SwiftUI CoreData Picker
  • 基于昇腾910B搭建多节点K8s集群
  • 二维差分算法详解
  • Sentinel限流、熔断
  • Java小白进阶笔记(3)-初级面向对象
  • JS实现简单的MVC模式开发小游戏
  • k8s 面向应用开发者的基础命令
  • leetcode46 Permutation 排列组合
  • mysql 数据库四种事务隔离级别
  • SegmentFault 2015 Top Rank
  • spring-boot List转Page
  • Vue 重置组件到初始状态
  • vue数据传递--我有特殊的实现技巧
  • yii2中session跨域名的问题
  • 动态魔术使用DBMS_SQL
  • 基于遗传算法的优化问题求解
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何使用 JavaScript 解析 URL
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-图和图算法
  • 通过git安装npm私有模块
  • 微服务入门【系列视频课程】
  • 系统认识JavaScript正则表达式
  • 正则与JS中的正则
  • Python 之网络式编程
  • 组复制官方翻译九、Group Replication Technical Details
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #pragma multi_compile #pragma shader_feature
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (2)(2.10) LTM telemetry
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .gitignore
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core控制台应用程序初识
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 反射的使用
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET(C#) Internals: as a developer, .net framework in my eyes