您当前的位置: 首页 >  逻辑回归

风间琉璃•

暂无认证

  • 4浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

逻辑回归(Logistic Regression)

风间琉璃• 发布时间:2021-12-04 22:03:36 ,浏览量:4

文章目录
  • 前言
  • 一、模型描述
  • 二、逻辑回归算法
    • 1.假设函数
    • 2.决策边界
    • 3.代价函数
    • 4.梯度下降
    • 5.优化算法
  • 三、 多类别分类
  • 总结

一、模型描述

前面的预测值都是连续的,若预测值是离散的,则被称为分类问题,但是同样还是属于督促学习

在分类问题中,尝试预测的是结果是否属于某一个类,比如:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;区别一个肿瘤是恶性的还是良性的

从简单的二元分类讨论,将因变量(dependent variable)可能属于的两个类分别称为负向类( negative class)和正向类( positive class),则因变量 y属于(0,1) ,其中 0 表示负向类, 1 表示正向类

注:y只能取0和1这两个值,在两个类别中,正负类是任务约定的

eg: 在肿瘤预测问题中,可以用线性函数来做分类 在这里插入图片描述 在这里插入图片描述 对于线性回归,可以设置分类器阈值为0.5。如果假设函数输出的值大于0.5,可以预测为y = 1;如果小于0.5,可以预测y=0

对于初始的前八个数据点来说,分类效果比较好,但是如果加入上图中右上角的第九个数据点,线性回归对分类问题的拟合不是很好

二、逻辑回归算法

对于分类, 𝑦 取值为 0 或者 1,如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于 0,即使所有训练样本的标签 𝑦 都等于 0 或 1

尽管知道标签应该取值 0 或者 1,但是如果算法得到的值远大于 1 或者远小于 0 的话,可能该算法失效

所以接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间

1.假设函数

对于前面的分类问题,引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间,逻辑回归模型的假设是: ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋) 其中: 𝑋 代表特征向量, 𝑔 代表逻辑函数( logistic function)是一个常用的逻辑函数为 S 形函数( Sigmoid function), 公式为 在这里插入图片描述 函数图像如下: 在这里插入图片描述 源码:

import numpy as np
def sigmoid(z):
	return 1 / (1 + np.exp(-z))

ℎ𝜃(𝑥)的作用:对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性( estimated probablity)即ℎ𝜃(𝑥) = 𝑃(𝑦 = 1|𝑥; 𝜃)

在这里插入图片描述

如果对于给定的𝑥,通过已经确定的参数计算得出ℎ𝜃(𝑥) = 0.7,则表示有 70%的几率𝑦为正向类,相应地𝑦为负向类的几率为 1-0.7=0.3

2.决策边界

在这里插入图片描述 如图,在逻辑回归中,预测:

当ℎ𝜃(𝑥) >= 0.5时,预测 𝑦 = 1 当ℎ𝜃(𝑥) < 0.5时,预测 𝑦 = 0

根据上面绘制出的 S 形函数图像:

𝑧 = 0 时 𝑔(𝑧) = 0.5 𝑧 > 0 时 𝑔(𝑧) > 0.5 𝑧 < 0 时 𝑔(𝑧) < 0.5

又 𝑧 = 𝜃𝑇𝑥 ,即:

𝜃𝑇𝑥 >= 0 时,预测 𝑦 = 1 𝜃𝑇𝑥 < 0 时,预测 𝑦 = 0

eg:如下图,假设有一模型 在这里插入图片描述 参数𝜃 是向量[-3 1 1],则当−3 + 𝑥1 + 𝑥2 ≥ 0,即𝑥1 + 𝑥2 ≥ 3时,模型将预测 𝑦 =1,绘制直线𝑥1 + 𝑥2 = 3,这条线便是模型的分界线,将预测为 1 的区域和预测为 0 的区域分隔开,也被称为决策边界,这里只不过是线性的

决策边界是假设函数的属性,由参数θ决定,它不是数据集的属性。θ一旦决定,决策边界也就被决定

eg: 如图,另一假设模型(非线性决策边界) 在这里插入图片描述 对于一个图形来说,需要用曲线才能分隔 𝑦 = 0 的区域和 𝑦 = 1 的区域,需要二次方特征:ℎ𝜃(𝑥) = 𝑔(𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2 + 𝜃3𝑥12 + 𝜃4𝑥22), 其中𝜃=[-1 0 0 1 1],则得到的判定边界恰好是圆点在原点且半径为 1 的圆形

对于第二个图形或者更复杂的图形可以用非常复杂的模型来适应非常复杂形状的判定边界

3.代价函数

对于线性回归模型,定义的代价函数是所有模型误差的平方和。理论上来说,也可以对逻辑回归模型沿用这个定义 在这里插入图片描述

但是问题在于,当将ℎ𝜃(𝑥)代入到代价函数中时,得到的代价函数是一个非凸函数( non-convexfunction),如下图

在这里插入图片描述 可以看成代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值

所以不得不重新定义代价函数 在这里插入图片描述 𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦)函数的特点是: (1)当实际的 𝑦 = 1 且ℎ𝜃(𝑥)也为 1 时误差为 0,当 𝑦 = 1 但ℎ𝜃(𝑥)不为 1 时误差随着ℎ𝜃(𝑥)变小而变大 (2)当实际的 𝑦 = 0 且ℎ𝜃(𝑥)也为 0 时代价为 0,当𝑦 = 0 但ℎ𝜃(𝑥)不为 0 时误差随着 ℎ𝜃(𝑥)的变大而变大

简化𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦) :

𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦) = −𝑦 × 𝑙𝑜𝑔(ℎ𝜃(𝑥)) − (1 − 𝑦) × 𝑙𝑜𝑔(1 − ℎ𝜃(𝑥))

带入代价函数: 在这里插入图片描述 代价函数构建完成,可以用梯度下降算法来求得能使代价函数最小的参数 在这里插入图片描述 虽然使用的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋)与线性回归中不同。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的

源码:

import numpy as np
def cost(theta, X, y):
	theta = np.matrix(theta)
	X = np.matrix(X)
	y = np.matrix(y)
	first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
	second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
	return np.sum(first - second) / (len(X))
4.梯度下降

前面我们知道逻辑回归的代价函数: 在这里插入图片描述 试图找尽量让𝐽(𝜃) 取得最小值的参数𝜃 在这里插入图片描述 要最小化关于𝜃的函数值,通常用的梯度下降法的模板 在这里插入图片描述 要反复更新每个参数,用这个式子来更新,就是用它自己减去学习率 𝛼 乘以后面的微分项,即 在这里插入图片描述 如果有 𝑛 个特征,参数向量𝜃包括𝜃0 𝜃1 𝜃2 一直到𝜃𝑛,必须用上式来同时更新所有𝜃的值,推荐使用向量化的实现,可以把所有这些 n 个参数同时更新

线性回归和逻辑回归的梯度下降 在这里插入图片描述 更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西,适用于线性回归中的特征放缩同样适用于逻辑回归,如果特征范围差距很大的话,那么应用特征缩放的方法,可以让逻辑回归中梯度下降收敛更快

5.优化算法

除了梯度下降以外,还有其他一些优化算法更高级、更复杂,如共轭梯度法(conjugate gradient),BFGS和L-BFGS

优点: 不需要手动选择学习率α,在给出计算导数项和代价函数的方法之后,这些算法有一个“只能内循环”,称为线搜索算法(line search algorithm),它可以自动尝试不同的学习速率α并自动选择一个好的学习率α。它甚至可以为每次迭代选择不同的学习速率,收敛速度比梯度下降快

但是比梯度下降复杂

三、 多类别分类

前面都是通过逻辑回归解决二元分类,也可以使用逻辑回归 (logistic regression)来解决多类别分类问题,具体来说,通过一个叫做"一对多" (one-vs-all) 的分类算法

eg: 假如说现在需要一个学习算法能自动地将邮件归类到不同的文件夹里, 或者说可以自动地加上标签,也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么就有了这样一个分类问题:其类别有四个,分别用𝑦 = 1、 𝑦 = 2、 𝑦 = 3、𝑦 = 4 来代表

二元分类和多分类模型 在这里插入图片描述 用 3 种不同的符号来代表 3 个类别,如何得到一个学习算法来进行分类呢

二元分类可以使用逻辑回归,可以将数据集一分为二为正类和负类,用一对多的分类思想,可以将其用在多类分类问题上 在这里插入图片描述 基本思想:有一个训练集,上图表示的有 3 个类别,用三角形表示 𝑦 = 1,方框表示𝑦 = 2,红叉表示 𝑦 = 3。要做的就是使用该训练集,将其分成 3 个二元分类问题

(1)先从用三角形代表的类别 1 开始,创建一个新的"伪"训练集,包含类型 2和类型 3定为负类,类型1设定为正类,如下图,拟合出一个合适的分类器 在这里插入图片描述 三角形是正样本,而圆形代表负样本,设置三角形的值为 1,圆形的值为 0,下面来训练一个标准的逻辑回归分类器,这样就得到一个正边界

具体实现:为了能实现这样的转变,将多个类中的一个类标记为正向类( 𝑦 = 1),然后将其他所有类都标记为负向类,模型记作ℎ𝜃(1)(𝑥)。类似地选择另一个类标记为正向类( 𝑦 = 2),再将其它类都标记为负向类,将这个模型记作 ℎ𝜃(2)(𝑥),依此类推…

模型简记: ℎ𝜃(𝑖)(𝑥) = 𝑝(𝑦 = 𝑖|𝑥; 𝜃) , 其中: 𝑖 = (1,2,3. . . . 𝑘)

在这里插入图片描述 在需要做预测时,将所有的分类机都运行一遍, 然后对每一个输入变量,选择最高可能性的输出变量即可

ℎ𝜃(𝑖)(𝑥),其中 𝑖 对应每一个可能的 𝑦 = 𝑖,最后,为了做出预测,给出输入一个新的 𝑥 值,用这个做预测。要做的就是在三个分类器里面输入 𝑥,然后选择一个让 ℎ𝜃(𝑖)(𝑥)最大的𝑖

总之,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论𝑖值是多少,都有最高的概率值,预测𝑦就是那个值

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0499s