草庐IT

【机器学习】Logistic 分类回归算法 (二元分类 & 多元分类)

计算机魔术师 2023-10-14 原文

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

该文章收录专栏
✨— 机器学习 —✨

【机器学习】logistics分类

一、线性回归能用于分类吗?

l o g i s t i c logistic logistic(数理逻辑)回归算法(预测离散值 y y y 的 非常常用的学习算法

假设有如下的八个点( y = 1 或 0 ) y=1 或 0) y=10),我们需要建立一个模型得到准确的判断,那么应该如何实现呢

  • 我们尝试使用之前文章所学的线性回归 h θ ( x ) = θ T ∗ x h_\theta(x) = \theta^T*x hθ(x)=θTx 来拟合数据( θ \theta θ是参数列向量,注意这里的 x x x是关于 x i x_i xi的向量,其中 x 0 = 1 , 即 x 0 ∗ θ 0 = 常数项 x_0=1, 即 x_0*\theta_0 = 常数项 x0=1,x0θ0=常数项),并在0~1设置一个阈值 y = 0.5 所对应的 x 0.5 值 y = 0.5 所对应的 x_{0.5} 值 y=0.5所对应的x0.5 x x x 大于 x 0.5 x_{0.5} x0.5 的点则为1,否则为0,预测会得到如下粉丝直线

上一篇文章: 【机器学习】浅谈正规方程法&梯度下降

假设我们再增加一个数据点,如下图右方,按照如上算法对应的拟合直线 h θ ( x ) h_\theta(x) hθ(x)则如下蓝色直线,此时得到错误的预测 (对于结果为1也小于 x 0.5 x_{0.5} x0.5)

所以综上所诉,用线性回归来用于分类问题通常不是一个好主意,并且线性回归的值会远远偏离0或1,这显示不太合理。

所以梯度下降算法中引出 logistic regression 算法

二、二元分类

2.1假设函数

我们希望能把 h θ ( x ) = θ T ∗ x h_\theta(x) = \theta^T*x hθ(x)=θTx 结果在 0 ~ 1 之间,

这里引入 s i g m o i d sigmoid sigmoid 函数 (也叫做 l o g i s t i c logistic logistic 函数) —— g ( x ) = 1 1 + e − x g(x) = \frac{1}{1 + e ^{-x}} g(x)=1+ex1

s i g m o i d sigmoid sigmoid函数图像是一个区间在 0 ~ 1的S型函数, x ⇒ ∞ x \Rightarrow\infty x y ⇒ 1 y\Rightarrow1 y1 x ⇒ − ∞ x \Rightarrow-\infty x y ⇒ 0 y\Rightarrow0 y0

  • h θ ( x ) = g ( θ T ∗ x ) = 1 1 + e − θ T ∗ x h_\theta(x) =g( \theta^T*x) = \frac{1}{1 + e ^{- \theta^T*x}} hθ(x)=g(θTx)=1+eθTx1
    那么我们的函数结果结果就会在0 ~ 1 之间

那现在我们所要做的便是需要求得参数 θ \theta θ 拟合模型

如下图,假设肿瘤案例,如下 x x x为一个病人 同样的用列向量表示 x x x的参数,那么参数一tumorSize便是肿瘤的大小,那么我们可以假设输出结果为 0.7 ,意思就是医生会告诉这个病人很不幸,会有很大(70%)的概率得到肿瘤。

  • 那么公式可以表示为 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1|x;\theta) hθ(x)=Py=1∣x;θ
  • 即在 x x x的条件下 求给定 y y y (概率参数为 θ \theta θ)的概率


那么在 y y y只有 0 和 1 的情况下,有如下公式 (二者为对立事件,符合全概率公式)

  • P ( y = 1 ∣ x ; θ ) + P ( y = 0 ∣ x ; θ ) = 1 P(y=1|x;\theta)+ P(y=0 |x;\theta)= 1 Py=1∣x;θ+Py=0∣x;θ=1
  • 1 − P ( y = 0 ∣ x ; θ ) = P ( y = 1 ∣ x ; θ ) 1 - P(y=0 |x;\theta)= P(y=1|x;\theta) 1Py=0∣x;θ=Py=1∣x;θ

概率结果只在0 ~ 1中

  • 假设如下

那么此时我们可以设置阈值 g ( z ) g(z) g(z) = 0.5,大于 0.5 的点则为1,否则为0

即在 z < 0 z<0 z<0(即 θ T ∗ x \theta^T*x θTx)中 g ( z ) g(z) g(z)< 0.5, 此时预测为0,在 z > 0 z>0 z>0(即 θ T ∗ x \theta^T*x θTx) 时, g ( z ) > 0 g(z)>0 g(z)>0 预测值为1

2.1.1 案例一


我们假设他的各个 θ \theta θ 参数向量参数为-3,1,1

此时如果满足 g ( z ) g(z) g(z)> 0.5 , 也就是横坐标 z z z(这里的 z z z 是对应线性方程) 大于零,预测 y 为 1 条件则如下:

化简为条件 x 1 + x 2 > = 3 x_1 + x_2 >=3 x1+x2>=3 , 这个条件所对应的几何意义:

即一条切割线的右侧,此时 s i g o m i d 函数的 z 坐标 > 0 sigomid函数的z坐标>0 sigomid函数的z坐标>0 , y值 大于0.5

此时该切割线分割除了两个区域,分别是 y = 0 与 y = 1 y=0 与 y=1 y=0y=1的 情况,我们把这条边界,称为决策边界,这些都是关于假设函数的属性,决定于其参数,与数据集属性无关

2.1.2例子二

有数据集如下:

我们假设函数为多项式高阶函数,并对其参数假设赋值如下。

那我们的预测y=1时, s i g o m i d sigomid sigomid横坐标 z z z满足条件为

可以得到其决策边界decision boundory —— x 1 2 + x 2 2 = 1 x_1^2+x_2^2 =1 x12+x22=1

  • 强调: 决策边界并不是数据集的属性,而是假设函数以及其参数的属性,数据集则是用于拟合参数 θ \theta θ
    不同的高阶多项式 会得到不一样的决策边界
    如:

2.2 拟合logistic回归参数 θ i \theta_i θi

  • 代价函数

我们给定如数据集

m m m个样本,同样将每一个 x x x n + 1 n+1 n+1维向量表示(向量每个元素即特征,其中 x 0 为 1 x0为1 x01 ) 分类标签 y y y只有 0,1结果

  • 那么我们如何选择参数 θ \theta θ呢?

在往篇文章中我们线性回归的均方差代价函数可以变化如下:

简化函数,我们省略上标

因为 s i g o m i d sigomid sigomid 是复杂的非线性函数,如果直接以函数作为代价函数,那么所求模型对应代价函数为非凹函数,会有非常多的局部最优,如下图

我们不能保证其可以下降到函数最优

我们往往希望找到如下的凹型代价函数,以可以找到参数最优。

故我们需要找到另外的代价函数保证我们可以找到全局最小值

三、logistic代价函数

3.1 当 y = 1 y=1 y=1代价函数图像

对该代价函数,我们可以画出当 y = 1 y=1 y=1时的图像。(由于 s i g o m i d sigomid sigomid 函数值域在0~1,对应代价函数横坐标为0 ~1)

为了方便理解我们可以画出,对数函数的图像 l o g ( z ) log(z) log(z) ( z = h θ ( x ) ) z = h_\theta(x)) z=hθ(x)) )

  • 从图中我们也可以看到作为代价函数 很好的性质
  1. C o s t ⇒ 0 Cost \Rightarrow 0 Cost0时,即代价函数为0,此时有 h θ ( x ) ⇒ 1 h_\theta(x)\Rightarrow1 hθ(x)1 即模型拟合优秀

  2. C o s t ⇒ ∞ Cost \Rightarrow\infty Cost时,即代价函数 ⇒ ∞ \Rightarrow\infty ,此时 h θ ( x ) ⇒ 0 h_\theta(x) \Rightarrow 0 hθ(x)0即为 。此时说明模型拟合非常差

显然当 y = 1 y=1 y=1 时 这个代价函数满足我们的要求

3.2 当 y = 0 y=0 y=0代价函数图像

对应 y = 0 y=0 y=0的情况下:

  • 如下图
  1. C o s t ⇒ 0 Cost \Rightarrow 0 Cost0时,即代价函数为 ⇒ 0 \Rightarrow0 0此时有 h θ ( x ) ⇒ 0 h_\theta(x)\Rightarrow0 hθ(x)0 即模型拟合优秀

  2. C o s t ⇒ ∞ Cost \Rightarrow\infty Cost时,即代价函数 ⇒ ∞ \Rightarrow\infty ,此时 h θ ( x ) ⇒ 1 h_\theta(x) \Rightarrow 1 hθ(x)1即为 。函数惩罚很大

同样的符合代价函数性质

至此,我们定义了关于单变量数据样本的分类代价函数,我们所选择的代价函数可以为我们解决代价函数为非凹函数的问题以及求解参数最优,接下来我们使用梯度下降算法来拟合 l o g i s t i c logistic logistic 算法

四、 代价函数与梯度下降

为了避免让代价函数分为 y = 1 , y = 0 y = 1,y= 0 y=1,y=0两种情况 ,我们要找一个方法来把这两个式子合并成一个等式,以便更简单写出代价函数,并推导出梯度下降。

公式如下图蓝色字体公式

由于 y 只有两个情况 0,1 ,利用该性质 当y = 1 时,y=0情况的多项式消去,y = 0 时同理,这样就成功表达了两种不同情况的函数

  • 通过将式子合并为一个等式,代价函数(cost function) 变化为如下(参考:统计学的极大似然法为不同模型已知数据寻找参数的方法,即选取概率最大的参数
    最大似然函数参考文章


同样,我们为了求最小化代价函数以拟合参数 θ \theta θ,使用梯度下降

  • 同样,将微积分求其偏导
  • 并用此公式更新每个参数 (注意是:同步更新)

4.1 线性回归与logistic回归的梯度下降规则

我们可以惊奇的发现以上公式与线性回归时所用来梯度下降的方程一样

那么线性回归和logistic回归是同一种算法吗?

线性回归和logistic在梯度下降更新的函数区别在于: h θ ( x i ) h_\theta(x^i) hθ(xi)

  1. 对于线性回归 : h θ ( x ) = θ T ∗ x h_\theta(x) = \theta^T*x hθ(x)=θTx
  2. 对于logistic回归: h θ ( x ) = 1 1 + e − θ T ∗ x h_\theta(x) = \frac{1}{1 + e ^{- \theta^T*x}} hθ(x)=1+eθTx1

虽然在梯度下降算法看起来规则相同,但假设的定义发生了变化,所以梯度下降和logistic回归是完全不一样的算法

  • 我们用此算法更新各个参数,可以通过for进行实现,也可以通过向量化进行实现。

关于向量化,可以参考文章 【机器学习】向量化计算 – 机器学习路上必经路


同样的,在对于线性回归的梯度下降中,我们使用到了特征缩放数据标准化,同样的,这对于 l o g i s t i c logistic logistic 回归算法同样适用。

数据标准化可参考文章: 【机器学习】梯度下降之数据标准化

五、高级优化算法

高级优化算法,与梯度下降相比能够大大提高 l o g i s t i c logistic logistic 回归速度,也使得算法更加适合大型数据集机器学习问题。
除了使用梯度下降算法,还有诸多如下算法


优点如下

  • 不需要选择学习率 α \alpha α ( 存在智能内循环,智能选择最佳的学习率 α \alpha α
  • 下降速率快得多

缺点

  • 太过于复杂了

在实际解决问题中,我们很少通过自己编写代码求平方根或者求逆矩阵,我们往往都是使用别人写的好的数据科学库,如numpy

有如下例子(求两个参数)

我们可以通过梯度下降来求得参数,如下求偏导:

octave代码实现如下;

这是一个简单的二次代价函数,现在我们如何将其用在logistic回归算法中呢?

在logistic回归中,我们使用如下的 θ \theta θ参数向量 (使用参数向量化)

所以在实现这些高级算法,其实是使用不同的高级库函数,虽然这些算法在调试过程中,更加麻烦,但是其速度远远大于梯度下降,所以面对机器学习问题中,往往使用这些算法。

六、多元分类:一对多

例如将邮件分为亲人,朋友,同事。例如将天气分类,下雨,晴天等、我们可以将这些用数字0,1,2表达,以上这些都是多类别分类

与二分类图像不同(右图

首先,我们将该数据集划分为三类

我们要做的就是将这数据集转换为三个独立的二元分类问题, 我们将创建一个新的**”伪“训练集**,其中第二类第三类为负类,第一类为正类(如下图右侧)


并拟合一个分类器 h θ 1 ( x ) h_\theta^1(x) hθ1(x),接下来我们来实现一个标准的逻辑回归分类器,通过训练,我们可以得到一个决策边界

  • 同理,将其他两类样本如上创建数据集,以及对应的拟合分类器,进行一个标准的逻辑回归分类器,得到对应边界

    总而言之,我们拟合出了三个分类器

h θ i ( x ) = P ( y = i ∣ x ; θ ) ( i = 1 , 2 , 3 ) h_\theta^i(x) = P(y=i|x;\theta) (i=1,2,3) hθi(x)=P(y=ix;θ)(i=1,2,3)

每个分类器都对应与之的情况训练,y = 1, 2, 3 的情况

我们训练了逻辑回归分类器 h θ i ( x ) = P ( y = i ∣ x ; θ ) ( i = 1 , 2 , 3 ) h_\theta^i(x) = P(y=i|x;\theta) (i=1,2,3) hθi(x)=P(y=ix;θ)(i=1,2,3),用于预测 y = i y= i y=i 的概率,为了做出预测,我们向分类器输入一个 x x x,期望获得预测,我们需要在这三个回归分类器中运行输入 x x x,选出结果中概率最大的一个(最可信)的那个分类器,就是我们要的类别。

有关【机器学习】Logistic 分类回归算法 (二元分类 & 多元分类)的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  8. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  9. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐