面对一些类似回归问题,我们可以通过线性回归方法来拟合一个函数,以此来预测数据,但它的输出是连续的。有时候呢,我们需要一种方法给出一个判定结果,例如”同意(agree)”、”不同意(disagree)”。、下面呢就是关于这个方法的新内容,叫做分类(Classification)问题。又例如,如果我们需要预测一辆汽车是好的还是坏的,只有两种结果:好、坏。这种输出为0或者1的问题,就叫做分类问题,而我们对应与此种问题所采用的方法即是逻辑回归(Logistic regression)。
1.分类及其表示(Classification and Representation)
i.分类(Classification)
首先来看看分类(Classification)问题,在第一段中已经简单介绍了什么是分类问题,下面再来举几个例子:
Examples | Purposes |
---|---|
Spam / Not Spam? | |
Online Transaction | Fraudulent (Yes / No?) |
Tumor | Malignant / Benign? |
第一个例子是判断垃圾邮件,对一封邮件,我们需要判断它是否为垃圾邮件;第二个例子是在线交易,我们需要判断这个交易是否有欺诈的嫌疑;最后一个例子是肿瘤评估,我们需要对一个病人的病情进行综合分析,来判断肿瘤是恶性的还是良性的。
详细地,我们以肿瘤评估为例。我们有如下图所示的一些样本,其横坐标表示肿瘤的大小,纵坐标表示性态(良性还是恶性):
假设我们用一条直线 hθ(x)=θTX 来拟合这些数据,其图像可能大致如下:
如上图所示, hθ(x )为紫色的直线,如果我们选择 0.5 作为一个基准点来判断一个肿瘤是良性还是恶性的:
如上图所示,我们增加了一组数据,通过 线性回归(Linear Regression)得到了一条蓝色的直线,但是其看起有点不那么理想,例如有几个恶性肿瘤,也会被分类为良性肿瘤。所以,在分类问题中, 线性回归通常不是一个很好的办法。所以我们需要使用 逻辑回归(Logistic regression)来解决分类问题。逻辑回归是一个 分类算法(classification algorithm)在逻辑回归中,我们要求 0≤hθ(x)≤11,下面我们就来看看逻辑回归的假设函数。
ii.假设函数(Hypothesis)
上面我们提到了,在只有两种结果的分类问题中,它的输出不是 0
即是 1 ,所以我们想要将 分类器(classifier)的输出控制在 [0,1]] 上。在 线性回归中,我们的假设函数为 hθ(x)=θTX ,显然其输出并不只限于区间 [0,1]],所以线性回归中的假设函数在逻辑回归(Logistic regression)中是不合适的。这里我们使我们的假设函数为:
其与 y 轴的交点为 (0,0.5)) ,所以假设函数为:
现在我们来看一下逻辑回归(Logistic regression)的假设函数的具体意义是什么。
这里的函数 hθ(x))
的可能性。来举个例子:
假设有两个特征:
iii.决策边界(Decision Boundary)
前面提到了 hθ(x)=P(y=1|x;θ)))
,那什么时候 hθ(x)) 的值为1 1 ,什么时候为0 0呢?一般规定:
当 z≥00 时, hθ(x)≥0.50.5 ,当 z<00 时, hθ(x)<0.50.5 。即对于 hθ(x)=g(θTX)≥0.50.5 ,有 θTX≥00 ;同理,对于 hθ(x)=g(θTX)<0.50.5 ,有 θTX<00 。
现在我们就来看看决策边界(Decision boundary)的具体内容,假如我们有如图所示的样本集合:
同时假设, 假设函数(hypothesis function)为 hθ(x)=g(θ0+θ1x1+θ2x2) ),并假设 θ0=−3,θ1=θ2=11 。所以此时有:
根据高中就学过的线性规划知识,为与直线右上方的点都能满足不等式 −3+x1+x2≥00 ,即满足 z≥00 。而这条直线就是所谓的 决策边界(Decision boundary)。同时需要指出的是,这条直线只跟参数 θ θ 有关,跟样本集无关。
再来看看非线性的情况,样本集如下:
若假设函数为 hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22) ),假设
所以图中这条紫色的线也就是函数 hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22) )的 决策边界(Decision boundary)。如果我们的假设函数更加复杂,其决策边界的形状会更加的奇怪,并且不仅只限于二维、三维,也可以是一条高维的曲线,只是我们无法用图形表示出来。接下来讨论误差函数。
逻辑回归模型(Logistic Regression Model)
i.误差函数(Cost Function)
同线性回归一样,我们需要一个误差函数来帮助我们选择最佳的参数 θ
。假设有 m 组训练集 {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}},其中
在线性回归中,误差函数为:
将求和前面的 12 放到求和部分里面得到:
而我们需要的误差函数应该是这样的:
为了能够使用梯度下降发求得最佳 θ ,我们将误差函数做一些改变。这里,我们引入新的误差函数:
为什么要把上面这个分段函数作为误差函数呢?我们可以看出,当 y=11 的时候,其图像为:
从图中可以看出,在训练的过程中,如果样本的输出 y=11 ,预测值 hθ(x)) 也为1 1,那么其误差 Cost=00 。而当样本的输出 y=11 ,预测值 hθ(x) 为 0 时,那么其误差 Cost=∞ ,所以这是一个比较好的误差函数模型。
而当 y=0 的时候,其图像为:
跟上面同理,如果样本的输出 y=0 ,预测值 hθ(x) 为 1,那么其误差 Cost=∞ 。而当样本的输出 y=0 ,预测值 hθ(x) 也为 0 时,那么其误差 Cost=0 。而且我们可以看到,这个误差函数是没有局部最优值的,所以我们可以在这个误差函数上执行梯度下降法。
ii.简化的误差函数和梯度下降(Simplified Cost Function and Gradient Descent)
简化的误差函数(Simplified Cost Function)
之前我们提到误差函数:
注意:其中 y 总是为 1 或 0 。,但是上面这个形式不利于我们进行一些计算,比如求偏导。所以我们把函数 Cost(hθ(x),y) 改写为:
由上面这个式子可知:
所以我们可以将误差函数改写为:
梯度下降(Gradient descent)
跟线性回归如出一辙,在逻辑回归中,我们也需要用梯度下降来求解 θ
。和线性回归一样,梯度下降的形式如下:
也许有人会问,前面的误差函数一大堆嵌套,为什么求偏导还是等于 αm∑mi=1(hθ(x(i))−y(i))x(i)j
,下面就来求一求(高能预警,计算量巨大)。
1.为了方便后面的计算,我们先求函数 g(z)=11+e−z
的导数:
g(x)′=(11+e−x)′=−(1+e−x)′(1+e−x)2=−1′−(e−x)′(1+e−x)2=0−(−x)′(e−x)(1+e−x)2=−(−1)(e−x)(1+e−x)2=e−x(1+e−x)2=(11+e−x)(e−x1+e−x)=g(x)(+1−1+e−x1+e−x)=g(x)(1+e−x1+e−x−11+e−x)=g(x)(1−g(x))
好了,然后再来求 J(θ)
的偏导:
所以说,不要怀疑,偏导数的确是这么多。误差函数就讲到这里。
iii.高级优化法(Advanced Optimization)
留个位置在这里,以后再写
多输出类型分类法(Multiclass Classification)
前面讲得都是输出为两类的情况,下面来讲讲多类(大于2)的分类问题。多类分类其实很简单,我们先来看几个生活中的例子:
问题 | 需要的分类 |
---|---|
Email foldering | Work、Friends、Family、Hobby |
Medical diagrams | Not ill、Cold、Flu |
Weather | Sunny、Cloudy、Rain、Snow |
上面三个例子都是我们可能遇到的分类问题,那么对于这种问题,该如何处理呢?
假设我们有如下的样本集:
我们一般采用一种叫 One-VS-All 的方法,即将一种类型看作一类,其它类型看作另一类:
所以,我们可以单独给每一个类都训练一个 分类器(Classifier),即可达到多类分类的目的。