目录
前言
在本节,我们开始讨论分类问题。
一、逻辑回归算法介绍
背景介绍:
在分类问题中,我们要预测的变量 𝑦 是离散的。在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。
因此,如下图所示,我们将因变量y(dependent variable)可能属于的两个类分别称为负向类( negative class)和正向类( positive class),则因变量 y 0,1 ,其中 0 表示负向类, 1 表示正向类。(0与1的含义没有固定,0常表示没有某个东西)
通过判断假设函数与阈值的关系,来预测分类。
如果我们还是按照往常使用线性回归问题来解决的话,假设函数的输出值可能远大于1/小于0,但y的标签取值是0和1,这样就不是很适合。因此我们引入逻辑回归算法, 这个算法的性质是:它的输出值永远在 0 到 1 之间。
逻辑回归算法:
逻辑回归算法是分类算法,我们将它作为分类算法使用。它适用于标签 𝑦 取值离散的情况,如: 1 0 0 1。
二、算法假说表示
其中: 𝑋 代表特征向量 ,𝑔 代表逻辑函数,是一个S形图像(它可以叫做logistics function,也可以称为Sigmoid function),公式如下:
g(z) =
函数图像如下:
从概率论的角度,(𝑥)可以表示为:(𝑥)= 𝑃(𝑦 = 1|𝑥; 𝜃),它的含义是对于给定的𝑥,通过已经确定的参数计算出y为1的概率。显而易见,y为正向类与y为负向类的概率相加必然为1。
三、决策边界
根据函数图像,我们可以得到以下转换:
𝑧 = 0 时 𝑔(𝑧) = 0.5
𝑧 > 0 时 𝑔(𝑧) > 0.5
𝑧 < 0 时 𝑔(𝑧) < 0.5
又 𝑧 = 𝑥 ,即:
𝑥 >= 0 时,预测 𝑦 = 1
𝑥 < 0 时,预测 𝑦 = 0
因此,假设我们已知θ的值,那么便可以画出(𝑥)的函数图像。假设我们有一个模型,举例如下:
并且参数𝜃 是向量[-3 1 1]。 则当-3 + 𝑥1 + 𝑥2 ≥ 0,即𝑥1 + 𝑥2 ≥ 3时,模型将预测 𝑦 =1。 我们可以绘制直线𝑥1 + 𝑥2 = 3,这条线便是我们模型的分界线,将预测为 1 的区域和预测为 0 的区域分隔开,称作决策边界。
通过给定θ的值,我们可以用非常复杂的模型来适应非常复杂形状的决策边界。
四、逻辑回归算法的代价函数
回想一下线性回归模型,我们定义的代价函数是所有模型误差的平方和,它长这样:
理论上来说,我们也可以对逻辑回归模型沿用这个定义。但当我们将(𝑥) =带入时,我们得到的代价函数将是一个非凸函数,它可能会长这样:
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
因此,我们重新定义逻辑回归的代价函数为:
其中,
(𝑥)与cos函数的图像大致如下(回想以下log函数的图像即可理解)
这样构建的𝐶𝑜𝑠𝑡((𝑥), 𝑦)函数的特点是:
- 当实际的 𝑦 = 1 且(𝑥)也为 1 时误差为 0,当 𝑦 = 1 但(𝑥)不为 1 时误差随着(𝑥)变小而变大;
- 当实际的 𝑦 = 0 且(𝑥)也为 0 时代价为 0,当𝑦 = 0 但(𝑥)不为 0 时误差随着(𝑥)的变大而变大。
四、简化、推导代价函数
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
推导过程比较简单,主要运用了log的计算公式和推导公式即可,注意是复合函数推导哦~具体可以去网上搜一下看看,我的推导过程写在笔记上了。
向量化后的表达形式(方便程序实现,这里*代表的是数乘)
PS:除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有: 共轭梯度( Conjugate Gradient), 局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)。
五、逻辑回归与多类别分类
这里,我们介绍一下如何使用逻辑回归 (logistic regression)来解决多类别分类问题。
什么叫多类别分类呢?这里举个例子:
如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 𝑦 = 1 这个类别来代表;或者患了感冒,用 𝑦 = 2 来代表;或者得了流感用𝑦 = 3来代表。这里的分类就有1、2、3三种。
对于一个多类分类问题,我们的数据集或许看起来像这样:
我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
现在我们有一个训练集,好比上图表示的有 3 个类别,我们用三角形表示 𝑦 = 1,方框表示𝑦 = 2,叉叉表示 𝑦 = 3。我们下面要做的就是使用一个训练集,将其分成 3 个二元分类问题。
我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的“伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
由此可知,我们可以将多个类中的一个类标记为正向类( 𝑦 = 1),然后将其他所有类都标记为负向类,这个模型记作(𝑥),以此类推,可以得到(𝑥)、(𝑥)...
最后我们得到一系列的模型简记为:(𝑥) = 𝑝(𝑦 = 𝑖|𝑥; 𝜃)其中: 𝑖 = (1,2,3. . . . 𝑘)
最后,为了做出预测,我们给出输入一个新的 𝑥 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 𝑥,然后我们选择一个让 (𝑥)最大的𝑖,即max(𝑥)。