机器学习分为监督学习和无监督学习, 监督学习又分为 回归问题 和 分类问题, 接上篇笔记讲完线性回归,本文主要介绍监督学习-分类问题 中的 逻辑回归。
1. 二分类问题
(Binary Classification Problem)
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;区别一个肿瘤是恶性的还是良性的等等。
在这种二分类的问题中,我们预测的变量 ,其中 表示负向类(negative class), 表示正向类(positive class) ,例如可以用 表示良性肿瘤,用 表示恶性肿瘤,(但哪个是0哪个是1并不重要):
对于这种二分类问题,我们定义一种算法:逻辑回归算法( Logistic Regression),该算法的性质是:它的输出值永远在0到 1 之间。
(by the way,逻辑回归算法是分类算法,并不是回归算法。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 取值离散的情况。)
除了二分类问题,还有多分类问题(multi-class),例如 等等。
2. 假设函数
(Hypothesis)
逻辑回归模型的假设函数是:
-
: 特征向量(注意:这里的 是针对单个训练实例而言,参阅 逻辑回归向量化)
-
: 逻辑函数(Logistic function),其公式为:
- 逻辑函数也称为 S形函数(Sigmoid function),因为其函数形状为如下图的S形,由于取值范围在,也就限制了假设函数的值也在
合起来 ,我们得到逻辑回归模型的假设为:
对该假设的理解是:
对于给定的某个输入变量 ,根据选择的参数 ,计算输出变量 的可能性(estimated probablity),即
例如,如果对于给定的 ,通过已经确定的参数 计算得出,则表示有的机率为正向类,相应地为负向类的机率为 。
3. 决策边界
(Decision Boundary)
现在讲下决策边界(decision boundary)的概念。这个概念能更好地帮助我们理解逻辑回归的假设函数在计算什么。
在逻辑回归中,我们预测:
- 当 ,即 时,预测
- 当 ,即 时,预测
现在假设我们有一个分类模型,并且已经拟合好了参数 ,如下图所示,则
- 当 时,模型将预测 ,
- 当 时,模型将预测 。
我们可以绘制直线 ,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。
对于有高阶多项式的假设函数,也可以找到其决策边界,例如:
4. 代价函数
(Cost Function)
和线性回归一样,在分类问题中的逻辑回归也需要定义用来拟合参数的代价函数。
线性回归的代价函数为:
我们重新定义逻辑回归的代价函数为:
其中
这样构建的代价函数的特点是:
- 当实际的 时:
- 若预测的 也为1,则代价函数为0,误差为0
- 若预测的 不为1,则代价函数(即误差)随着变小而变大
- 当实际的 时:
- 若预测的 也为0,则代价函数为0,误差为0
- 若预测的 不为0,则代价函数(即误差)随着变大而变大
将构建的 简化如下(就是不用写成分段函数):
带入 :
此时的代价函数 会是一个凸函数,并且没有局部最优值(凸优化问题,暂时可以不管)
5. 梯度下降
由于得到的代价函数为凸函数,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
求导后得到:
虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的 与线性回归中不同,所以实际上是不一样的。
除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率 ,通常比梯度下降算法要更加快速。例如:
- 共轭梯度(Conjugate Gradient)
- 局部优化法(Broyden fletcher goldfarb shann,BFGS)
- 有限内存局部优化法(LBFGS)
最后还有一点,我们之前在谈线性回归时讲到的特征缩放,我们看到了特征缩放是如何提高梯度下降的收敛速度的,这个特征缩放的方法,也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。
6.多类别分类问题
(Multiclass Classification Problem)
除了 二分类问题(Binary Classification Problem),逻辑回归还可以用来解决 多分类问题。
首先用一个叫做“一对多”(one-vs-all)的分类算法举例:
- 邮件归类:用不同的标签区分不同类型的邮件,如:
- :来自工作的邮件
- :来自朋友的邮件
- :来自家人的邮件
- 药物诊断:如果一个病人因为鼻塞来到你的诊所,可能有如下结果:
- :他可能并没有生病
- :他可能患了感冒
- :他可能得了流感
之前的二元分类问题和现在的多分类问题,其数据集分布如下:
二元分布问题可以用逻辑回归进行分类,多分类问题也可以用相同的思想。下面将介绍如何进行一对多的分类工作,有时这个方法也被称为"一对余"方法。
-
用3种不同的符号来代表3个类别,如下图
-
先从用三角形代表的类别1()开始,创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,并拟合出一个合适的分类模型(或称为分类器),记为 :
-
类似地,第我们选择第二个类标记为正向类(),再将其它类都标记为负向类,将这个模型记作 ,…
-
以此类推,我们将得到的一系列模型记为(该公式的解释与二分类的假设函数相似):
-
当给出新的输入 ,需要预测输出 是哪一类时,我们要做的就是将 代入上述所有分类器 中,,然后选择一个让 最大的 ,即 ,就是 所属的类别。