【机器学习】分类问题和Logistic回归算法详解

news2024/11/17 21:25:41

在阅读本文前,请确保你已经掌握代价函数、假设函数等常用机器学习术语,最好已经学习线性回归算法,前情提要可参考https://blog.csdn.net/weixin_45434953/article/details/130593910

分类问题是十分广泛的一个问题,其代表问题是:

  • 一个邮件是否为垃圾邮件
  • 一个肿瘤是否为恶性肿瘤

我们通常用y来表示分类结果,其中最简单y值集合为 0 , 1 {0,1} 0,1,比如对于一个邮件是否为垃圾邮件,有“是垃圾邮件(1)”和“不是垃圾邮件(0)”两种y的取值。假设以肿瘤大小为x轴,是否为恶性肿瘤为y轴,并且有如下一个数据集:
在这里插入图片描述
很显然,这个数据集合是无法使用之前学习的线性回归集合进行拟合的。因为一旦将直线延长,就会出现一个大概率是恶性肿瘤的数据被判定为良性,如下图所示
在这里插入图片描述
要解决这个问题,可以使用logistic回归算法,下面我们将会学习这个算法。

Logistic回归算法

作为一个回归算法,Logistics回归算法当然也有假设函数 h θ ( x ) = θ T x h_\theta(x)=\theta^Tx hθ(x)=θTx(其中x是一个向量),我们将数据集输入到x中,最后会输出个预测结果y。当然,由于我们要解决的是分类问题,如上面分析所示,我们的 h θ ( x ) h_\theta(x) hθ(x)的取值应该是位于 [ 0 , 1 ] [0,1] [0,1]之间,而传统的 h θ ( x ) h_\theta(x) hθ(x)函数的取值范围是整个实数域,因此我们要改造下 h θ ( x ) h_\theta(x) hθ(x)函数,让他的取值范围落在 [ 0 , 1 ] [0,1] [0,1]之间。因此我们定义Logistic回归算法的 h θ ( x ) h_\theta(x) hθ(x)函数如下所示:
h θ ( x ) = g ( θ T x ) (1) h_\theta (x)=g(\theta^T x)\tag{1} hθ(x)=g(θTx)(1) g ( z ) = 1 1 + e − z (2) g(z)=\frac{1}{1+e^{-z}}\tag{2} g(z)=1+ez1(2)上面的2式被称之为Logistic函数,或者称为Sigmoid函数。该函数的图像如下:
在这里插入图片描述
对于 z ∈ R z\in R zR,Logistics函数的取值范围是 [ 0 , 1 ] [0,1] [0,1],因此,将(1)(2)结合起来可以得到 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^T x}} hθ(x)=1+eθTx1该函数的取值范围为[0,1]

我们需要做的,和之前线性回归一样,就是选定合适的参数 θ \theta θ来拟合我们的数据,从而在输入一定特征x的时候,可以获得正确的输出结果y。我们知道分类问题的结果一般只有0或1,而假设函数 h θ ( x ) h_\theta(x) hθ(x)的结果则代表着在输入特征为x的情况下,y=1的概率是多少,比如说,向量 x 0 x_0 x0代表着0号肿瘤的所有特征, h θ ( x 0 ) = 0.7 h_\theta(x_0)=0.7 hθ(x0)=0.7也就意味着该肿瘤为恶行的几率为0.7。

决策界限

那么当 h θ ( x ) h_\theta(x) hθ(x)等于多少的时候,我们会认为y=1呢?一个最简单的办法就是:当 h θ ( x ) ≥ 0.5 h_\theta(x)\geq 0.5 hθ(x)0.5的时候,我们认为当前情况下y=1;当 h θ ( x ) < 0.5 h_\theta(x)<0.5 hθ(x)<0.5的时候,我们认为y=0。我们再观察回Logistics函数,可以发现,当 z ≥ 0 z\geq0 z0的时候 h θ ( x ) ≥ 0.5 h_\theta(x)\geq 0.5 hθ(x)0.5,也就是当 θ T x ≥ 0 \theta^T x\geq0 θTx0

现在假设我们有如下的数据集,并且假设函数 h θ ( x ) h_\theta(x) hθ(x)如下:
在这里插入图片描述
我们假设 θ 0 = − 3 , θ 1 = 1 , θ 2 = 1 \theta_0=-3, \theta_1=1, \theta_2=1 θ0=3,θ1=1,θ2=1,那么我们可以在数据集上画出这样的一条线:
在这里插入图片描述
这将平面分为了两部分,其中在直线之下的会使得 h θ ( x ) < 0.5 h_\theta(x)<0.5 hθ(x)<0.5,我们会估计落在这部分的数据y=0。这一条切分平面的直线,我们称之为决策边界

Logistic下的代价函数

接下来我们需要分析Logistics回归算法的代价函数,让我们来复习下,代价函数主要是用来衡量算法输出结果和实际的正确值的拟合程度,代价函数 J ( θ ) J(\theta) J(θ)主要作用就是找到合适的 θ \theta θ值,使得代价函数 J ( θ ) J(\theta) J(θ)最小,从而使得算法拟合效果最优。 一般的代价函数表达式如下:
J ( θ ) = 1 m ∑ i = 1 n 1 2 C o s t ( h θ ( x ( i ) ) , y ) J(\theta)=\frac{1}{m}\sum_{i=1}^n\frac{1}{2}Cost(h_\theta(x^{(i)}),y) J(θ)=m1i=1n21Cost(hθ(x(i)),y)我们之前学习的线性回归算法的Cost函数为 C o s t ( h θ ( x ( i ) ) , y ) = ( h θ ( x ( i ) ) − y ( i ) ) 2 Cost(h_\theta(x^{(i)}),y) = (h_\theta(x_{(i)})-y_{(i)})^2 Cost(hθ(x(i)),y)=(hθ(x(i))y(i))2但是如果在Logistics中使用这种Cost函数会导致代价函数为一个非凸函数,这主要是因为Logistics的假设函数 h θ ( x ) h_\theta(x) hθ(x)中含有指数项的原因,在这不展开阐述,总之,其函数可能会类似于下图的形状。
在这里插入图片描述
可以看到上面有很多的局部最优值,如果使用梯度下降函数,它在大多数情况是无法拟合到最优值的。那么我们的需求就很清晰了,我们希望可以找到一个Cost函数,可以使得 J ( θ ) J(\theta) J(θ)的函数是一个凸函数,或者单弓型函数。那么实际上,他的Cost函数如下:
C o s t ( h θ ( x ( i ) ) , y ) = { − l o g ( h θ ( x ) ) i f   y = 1 − l o g ( 1 − h θ ( x ) ) i f   y = 0 \begin{equation} Cost(h_\theta(x^{(i)}),y) = \begin{cases} -log(h_\theta(x))& if\: y=1\\ -log(1-h_\theta(x))& if\: y=0\\ \end{cases} \end{equation} Cost(hθ(x(i)),y)={log(hθ(x))log(1hθ(x))ify=1ify=0
看起来式子十分复杂,但是容我仔细分析下:上文提到,h(x)代表的是算法认为y=1的概率是多少,并且 h ( x ) ∈ [ 0 , 1 ] h(x)\in [0,1] h(x)[0,1],那么当y=1的时候,Cost曲线如下图所示:
在这里插入图片描述
当h(x)越接近1,Cost函数的值越接近0,这样得出来的代价函数也越小。也就是在真实结果y=1的情况下,如果h(x)=1,也就是函数认为该实例一定为1,证明它完全预测成功了,那么Cost=0,最终得出的代价函数也会非常小,即使h(x)=0.9,也就是函数认为有90%的概率该实例为1,那Cost的值还不到0.05,最终代价函数的增加幅度也很小,因为它确实也大概率预测成功了。如果他对于一个y=1的实例预测值为0,也就是他认为该实例不可能为1,那么Cost函数将会狠狠地"惩罚"这个学习算法,Cost的值会直接趋于无穷大,从而导致代价函数也无穷大,很明显,这是一个很糟糕的 θ \theta θ取值

反之,如果y=0的时候其函数图像如下:
在这里插入图片描述
很显然,这和上面刚好相反。举一反三即可。

代价函数的简化和梯度下降

上面的Logistics代价函数可以总结为两个式子:
J ( θ ) = 1 m ∑ i = 1 n 1 2 C o s t ( h θ ( x ( i ) ) , y ) (1) J(\theta)=\frac{1}{m}\sum_{i=1}^n\frac{1}{2}Cost(h_\theta(x^{(i)}),y)\tag{1} J(θ)=m1i=1n21Cost(hθ(x(i)),y)(1)
C o s t ( h θ ( x ( i ) ) , y ) = { − l o g ( h θ ( x ) ) i f   y = 1 − l o g ( 1 − h θ ( x ) ) i f   y = 0 (2) \begin{equation} Cost(h_\theta(x^{(i)}),y) = \begin{cases} -log(h_\theta(x))& if\: y=1\\ -log(1-h_\theta(x))& if\: y=0\\ \end{cases} \end{equation}\tag{2} Cost(hθ(x(i)),y)={log(hθ(x))log(1hθ(x))ify=1ify=0(2)
当然,由于y只有等于1或者等于0两种取值,我们可以将2式简化为如下形式: C o s t ( h θ ( x ( i ) ) , y ) = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) (3) Cost(h_\theta(x^{(i)}),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))\tag{3} Cost(hθ(x(i)),y)=ylog(hθ(x))(1y)log(1hθ(x))(3)观察可以知道,3式和2式是等价的。

将他们合起来就得到了代价函数 J ( θ ) J(\theta) J(θ) J ( θ ) = 1 m ∑ i = 1 n 1 2 [ − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) ] J(\theta)=\frac{1}{m}\sum_{i=1}^n\frac{1}{2}[-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))] J(θ)=m1i=1n21[ylog(hθ(x))(1y)log(1hθ(x))]

求得最小代价函数的任务自然就交给了梯度下降算法,对于每一个变量 θ j \theta_j θj反复采取以下式子处理: θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta) θj:=θjαθjJ(θ)另外我们已经知道 J ( θ ) J(\theta) J(θ),对导数进行计算可以得出 ∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 n ( h θ ( x ( i ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m}\sum_{i=1}^n(h_\theta(x^{(i)}-y{(i)})x_j^{(i)} θjJ(θ)=m1i=1n(hθ(x(i)y(i))xj(i)则可以得出梯度下降的实际函数为 θ j : = θ j − α 1 m ∑ i = 1 n ( h θ ( x ( i ) − y ( i ) ) x j ( i ) \theta_j := \theta_j-\alpha\frac{1}{m}\sum_{i=1}^n(h_\theta(x^{(i)}-y{(i)})x_j^{(i)} θj:=θjαm1i=1n(hθ(x(i)y(i))xj(i)由于我们的代价函数已经是一个凹函数了,那梯度下降是可以得到最优值的。上述的例子中,为了方便理解, θ \theta θ中只有一个值,一个数据实例中也只有一个特征x来用于预测y的取值,实际上运用的时候, θ \theta θ可以是一个含有多个元素的向量,当数据集给出若干个特征 x i x_i xi的时候,可以用Logistics来进行拟合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图表控件LightningChart JS v.4.1已经发布!引入虚线模式

LightningChart JS是性能最高的JavaScript图表库&#xff0c;专注于实时数据可视化。是Web上性能最高的图表库具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画。…

固态硬盘基础知识:M.2 NVMe PCIe SATA的含义及区别

SATA接口 固态硬盘开始流行于笔记本电脑上&#xff0c;使用SATA接口&#xff0c;尺寸与笔记本硬盘相同&#xff0c;为2.5英寸。 那个时候&#xff0c;如果台式机需要加装固态硬盘&#xff0c;需要使用硬盘架&#xff0c;将固态硬盘安装在硬盘架上&#xff0c;然后再安装与机箱…

5.2.3 IP数据报(一)IP数据报的格式

5.2.3 IP数据报&#xff08;一&#xff09;IP数据报的格式 我们知道要想实现全球范围的通信除了地址要统一之外&#xff0c;数据格式也要统一&#xff0c;所以就有了IP分组&#xff0c;或者被称之为IP数据报&#xff0c;下面我们来学习IP分组的格式。如图 总体来说一个IP分组…

JetBrains的Java集成开发环境IntelliJ 2023版本在Linux系统的下载与安装配置教程

目录 前言一、IntelliJ安装二、使用配置总结 前言 IntelliJ IDEA Ultimate是一款功能强大的Java集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署Java应用程序。注&#xff1a;已在CentOS7.9和Ubuntu…

带大家来认识下SUMIF函数

如果您需要在Excel表格中对特定条件下的数据进行求和&#xff0c;那么SUMIF函数是一个非常有用的工具。SUMIF函数允许您在满足指定条件的情况下&#xff0c;将符合条件的单元格的值相加起来。在本文中&#xff0c;我们将向您介绍如何使用SUMIF函数来处理您的表格数据。 如下图…

想定制鞋子?先给脚部建模吧!

最近灌篮高手的电影正在火热上映中&#xff0c;湘北大战山王的比赛从漫画搬上了大荧幕&#xff0c;看得人热血沸腾&#xff0c;直呼“爷青回”&#xff0c;恨不得马上换上球衣球鞋&#xff0c;再去球场上挥汗如雨一番。 灌篮高手 同时NBA的季后赛也在如火如荼的进行中&#xf…

Cmake学习记录(九)--使用Cmake交叉编译Android .so库

文章目录 一、前言二、使用NDK进行编译的相关代码四、使用交叉工具链进行编译四、参考链接 一、前言 目前Android编译.so的话使用Android Studio比较简单&#xff0c;但是有时候时候Android Studio的话还需要创建一个Android的项目&#xff0c;这里记录下脱离Android Studio单…

华为OD机试真题B卷 Java 实现【百钱买百鸡问题】,附详细解题思路

一、题目描述 公元五世纪&#xff0c;我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”&#xff1a;鸡翁一值钱五&#xff0c;鸡母一值钱三&#xff0c;鸡雏三值钱一。百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏各几何&#xff1f; 现要求你打印出所有花一百元买一百…

2023-05-31-[音视频处理] FFmpeg使用指北1-视频解码

本文将详细介绍如何使用ffmpeg 4.4在C中解码多种格式的媒体文件&#xff0c;这些媒体文件可以是视频、视频流、图片&#xff0c;或是桌面截屏或USB摄像头的实时图片。解码文件后&#xff0c;还将每帧图片转换为OpenCV的Mat格式以供后续使用。 文章目录 1 基于ffmpeg的媒体文件解…

Java之旅(五)

运算符 算术运算符 加法&#xff08;&#xff09;减法&#xff08;-&#xff09;乘法&#xff08;*&#xff09;除法&#xff08;/&#xff09;取余&#xff08;%&#xff09;一元运算符 自增运算符&#xff08;&#xff09;自减运算符&#xff08;--&#xff09;变量前就先运…

基于Yarn搭建Flink

基于Yarn搭建Flink 1. 概述 1.1 Yarn 简介 Apache Hadoop YARN是一个资源提供程序&#xff0c;受到许多数据处理框架的欢迎。Flink服务被提交给 YARN 的 ResourceManager&#xff0c;后者再由 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager…

Apache DolphinScheduler——开源大数据调度器神器(国人之光)

本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 1. 简 介 Apache DolphinScheduler(海豚调度),国人之光&#xff0c;是许多国人雷锋开源在Apache的顶级项目&#xff0c;主要功能就是负责任务的调度处理。 1.1 概 念 Apache DolphinScheduler是一个分布式去…

CentOS6 通过shell脚本的离线安装MySQL5.7.40(rpm)

说明: 在项目的实施过程中,多次遇到安装MySQL的工作,尤其在内网环境下,无法使用在线yum源,只能使用源码或采用rpm离线安装的方式进行安装,在安装过程中会遇到各种各样的问题,小编特地就rpm离线安装方式进行了整理及验证,并通过shell脚本的方式实现一键安装。使用此脚本…

软件性能测试有哪些方法?性能测试报告怎么编写?

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。在软件的质量保证中起着重要的作用&#xff0c;它包括的测试方法丰富多样。 一、常用的软件性能测试方法包括以下几种&#xff1a; 1、负载测试&#xff1a;模拟真实用户场…

连续十年亏损,哔哩哔哩估值遭质疑

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 财务业绩 2023年3月2日&#xff0c;哔哩哔哩&#xff08;BILI&#xff09;公布了其2022年第四季度和2022财年全年的财务业绩&#xff0c;财报显示哔哩哔哩的用户数量和收入均实现了稳步增长。2022年第四季度的总收入达到了…

【MySQL】单表获取库存数

系列文章 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类&#xff08;推荐阅读&#xff0…

港联证券今日投资前瞻:人工智能再迎催化 关注房地产板块超跌机会

昨日&#xff0c;A股午后探底回升&#xff0c;沪指尾盘翻红&#xff0c;深成指、创业板指走高。截至收盘&#xff0c;沪指微涨0.09%报3224.21点&#xff0c;深成指涨0.44%报10869.55点&#xff0c;创业板指涨0.67%报2218.6点&#xff0c;科创50指数涨1.56%&#xff1b;两市合计…

高质量椭圆检测库

目录 前言 效果展示 检测库 简介 安装库 用法 测试 论文算法步骤简读 1. lsd 检测 2. lsd group 3. 生成初始 ellipse 4. 聚类 前言 椭圆检测是工业中比较常用的一种检测需求。目前常用的基于传统图像处理的椭圆检测方法是霍夫变换&#xff0c;但是霍变换的检测率…

【基于前后端分离的博客系统】Servlet版本

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一. 项目简介 1. 项目背景 2. 项目用到的技…

玩转ChatGPT:Transformer分类模型

一、写在前面 之前&#xff0c;我们介绍了Sklearn包以及Boost辈的各种分类模型&#xff0c;这些模型都很经典了&#xff0c;实际上也很强大&#xff0c;比如说Xgboost。 然而&#xff0c;近期随着ChatGPT的大火&#xff0c;其底层框架Transformer也逐渐火了&#xff0c;现在大…