码迷,mamicode.com
首页 > 其他好文 > 详细

机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)

时间:2016-04-28 01:56:56      阅读:510      评论:0      收藏:0      [点我收藏+]

标签:

之前我们已经大概学习了用线性回归(Linear Regression)来解决一些预测问题,详见:
1.《机器学习笔记01:线性回归(Linear Regression)和梯度下降(Gradient Decent)》
2.《机器学习笔记02:多元线性回归、梯度下降和Normal equation》
3.《机器学习笔记03:Normal equation及其与梯度下降的比较》


说明:本文章所有图片均属于Stanford机器学课程,转载请注明出处


面对一些类似回归问题,我们可以通过线性回归方法来拟合一个函数,以此来预测数据,但它的输出是连续的。有时候呢,我们需要一种方法给出一个判定结果,例如”同意(agree)”、”不同意(disagree)”。、下面呢就是关于这个方法的新内容,叫做分类(Classification)问题。又例如,如果我们需要预测一辆汽车是好的还是坏的,只有两种结果:好、坏。这种输出为0或者1的问题,就叫做分类问题,而我们对应与此种问题所采用的方法即是逻辑回归(Logistic regression)


1.分类及其表示(Classification and Representation)

i.分类(Classification)

首先来看看分类(Classification)问题,在第一段中已经简单介绍了什么是分类问题,下面再来举几个例子:

Examples Purposes
Email Spam / Not Spam?
Online Transaction Fraudulent (Yes / No?)
Tumor Malignant / Benign?

第一个例子是判断垃圾邮件,对一封邮件,我们需要判断它是否为垃圾邮件;第二个例子是在线交易,我们需要判断这个交易是否有欺诈的嫌疑;最后一个例子是肿瘤评估,我们需要对一个病人的病情进行综合分析,来判断肿瘤是恶性的还是良性的。

详细地,我们以肿瘤评估为例。我们有如下图所示的一些样本,其横坐标表示肿瘤的大小,纵坐标表示性态(良性还是恶性):

技术分享

假设我们用一条直线 hθ(x)=θTX 来拟合这些数据,其图像可能大致如下:
技术分享

如上图所示, hθ(x) 为紫色的直线,如果我们选择 0.5 作为一个基准点来判断一个肿瘤是良性还是恶性的:
Ifhθ(x)0.5,predict"y=1"
Ifhθ(x)<0.5,predict"y=0"
那么对于上面的数据,看起来好像还不错。但是我们增加一组额外的样本来看看:
技术分享

如上图所示,我们增加了一组数据,通过线性回归(Linear Regression)得到了一条蓝色的直线,但是其看起有点不那么理想,例如有几个恶性肿瘤,也会被分类为良性肿瘤。所以,在分类问题中,线性回归通常不是一个很好的办法。所以我们需要使用逻辑回归(Logistic regression)来解决分类问题。逻辑回归是一个分类算法(classification algorithm)在逻辑回归中,我们要求 0hθ(x)1,下面我们就来看看逻辑回归的假设函数。


ii.假设函数(Hypothesis)

上面我们提到了,在只有两种结果的分类问题中,它的输出不是 0 即是 1 ,所以我们想要将分类器(classifier)的输出控制在 [0,1] 上。在线性回归中,我们的假设函数为 hθ(x)=θTX ,显然其输出并不只限于区间 [0,1] ,所以线性回归中的假设函数在逻辑回归(Logistic regression)中是不合适的。这里我们使我们的假设函数为:

hθ(x)=g(θTX)
其中,函数g的形式为:
g(z)=11+e?z
其图像为:

技术分享

其与 y 轴的交点为 (0,0.5) ,所以假设函数为:
hθ(x)=11+e?θTX


现在我们来看一下逻辑回归(Logistic regression)的假设函数的具体意义是什么。
这里的函数 hθ(x) 代表的是关于输入 x ,使得 y=1 的可能性。来举个例子:
假设有两个特征:

[x1x2]=[1tumorSize]
其中 x1 为 1,这是我们之前约定好的(文章开头列出的文章), x2 表示肿瘤的大小。假如 hθ(x)=0.7 ,这就表示病人的肿瘤为 恶性肿瘤的可能性为 0.7 。进一步地,可以将假设函数表示为:
hθ(x)=P(y=1|x;θ)

即给定参数 θ ,关于输入 x ,使得 y=1 的可能性。进一步,我们也可以知道如下的结论:
P(y=0|x;θ)+P(y=1|x;θ)=1
P(y=0|x;θ)=1?P(y=0|x;θ)
假设函数的形式就讲到这里,下面讲一讲判定界限(Decision boundary)


iii.判定界限(Decision Boundary)

前面提到了 hθ(x)=P(y=1|x;θ) ,那什么时候 hθ(x) 的值为 1 ,什么时候为 0 呢?一般规定:

{10if hθ(x)0.5 ;if hθ(x)<0.5 .
同时,我们发现对于函数 g(z)

技术分享

z0 时,hθ(x)0.5 ,当 z<0 时,hθ(x)<0.5 。即对于 hθ(x)=g(θTX)0.5 ,有 θTX0 ;同理,对于 hθ(x)=g(θTX)<0.5 ,有 θTX<0

现在我们就来看看判定界限(Decision boundary)的具体内容,假如我们有如图所示的样本集合:

技术分享

同时假设,假设函数(hypothesis function)hθ(x)=g(θ0+θ1x1+θ2x2) ,并假设 θ0=?3,θ1=θ2=1 。所以此时有:
z=?3+x1+x2
根据前面的内容,我们知道若要 y=1,就必须使得 z0 ,在这里即使得:
?3+x1+x20
其等价于:
x1+x23
。 我们将直线 x1+x2=3 的图像添加到上面的样本分布图中可以得到如下图像:
技术分享

根据高中就学过的线性规划知识,为与直线右上方的点都能满足不等式 ?3+x1+x20 ,即满足 z0 。而这条直线就是所谓的判定界限(Decision boundary)。同时需要指出的是,这条直线只跟参数 θ 有关,跟样本集无关。

再来看看非线性的情况,样本集如下:

技术分享

若假设函数为 hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22) ,假设
θ=?????????10011????????
则若要 hθ(x)0.5(或者说要是得y=1),就必须使得:
?1+x21+x220
即:
x21+x221
若把曲线 x21+x22=1 的图像添加到上面的样本集中,可以得到如下图像:
技术分享

所以图中这条紫色的线也就是函数 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))} ,其中

x=????????x0x1x2...xn????????,x0=1,y{0,1}
,我们有假设函数:
hθ(x)=11+e?θTX
那么到底怎么得到最优的 θ 呢?首先要做的就是更改误差函数的形式。

线性回归中,误差函数为:

J(θ0,θ1,...,θn)=12mi=1m(hθ(x(i))?y(i))2

将求和前面的 12 放到求和部分里面得到:
J(θ0,θ1,...,θn)=1mi=1m12(hθ(x(i))?y(i))2
在这里,我们换一种形式来表示函数来代替 12(hθ(x(i))?y(i))2
Cost(hθ(x(i)),y(i))=12(hθ(x(i))?y(i))2
, 如果把上标 i 去掉,得到:
Cost(hθ(x),y)=12(hθ(x)?y)2
然而非常不幸的是,如果我们将假设函数 hθ(x)=11+e?θTX 代入函数 Cost(hθ(x),y) ,再将函数 Cost(hθ(x),y) 代入误差函数 J(θ) ,所得到的误差函数并不是一个凹函数或者凸函数,意思是函数 J(θ) 将会有局部最优点(local optima),所以不能对误差函数执行梯度下降法:

技术分享

而我们需要的误差函数应该是这样的:
技术分享

为了能够使用梯度下降发求得最佳 θ ,我们将误差函数做一些改变。这里,我们引入新的误差函数:
Cost(hθ(x),y)={?log(hθ(x))?log(1?hθ(x))if y=1 ;if y=0 .

为什么要把上面这个分段函数作为误差函数呢?我们可以看出,当 y=1 的时候,其图像为:
技术分享

从图中可以看出,在训练的过程中,如果样本的输出 y=1 ,预测值 hθ(x) 也为 1,那么其误差 Cost=0 。而当样本的输出 y=1 ,预测值 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)

之前我们提到误差函数:

J(θ)=1mi=1mCost(hθ(x(i)),y(i))
Cost(hθ(x),y)={?log(hθ(x))?log(1?hθ(x))if y=1 ;if y=0 .

注意:其中 y 总是为 10 。,但是上面这个形式不利于我们进行一些计算,比如求偏导。所以我们把函数 Cost(hθ(x),y) 改写为:
Cost(hθ(x),y)=?ylog(hθ(x))?(1?y)log(1?hθ(x))
由上面这个式子可知:

如果
y=1 Cost(hθ(x),y)=?ylog(hθ(x))
y=0 Cost(hθ(x),y)=?(1?y)log(1?hθ(x))


所以我们可以将误差函数改写为:

J(θ)=1mi=1mCost(hθ(x(i)),y(i))=?1mi=1m[y(i)log(hθ(x(i)))+(1?y(i))log(1?hθ(x(i)))]
这个形式的误差函数就便于我们进行梯度下降了。


梯度下降(Gradient descent)

跟线性回归如出一辙,在逻辑回归中,我们也需要用梯度下降来求解 θ 。和线性回归一样,梯度下降的形式如下:

Repeat{θj:=θj?α??θjJ(θ)}
和线性回归相同,我们通过对 θj 求偏导直到收敛:
Repeat{θj:=θj?αmi=1m(hθ(x(i))?y(i))x(i)j}
其中 mi=1hθ(x(i)) 可以向量化为 g(Xθ)mi=1y(i) 可以向量化为 ymi=1x(i)j 可以向量化为 XT ,所以将上面这个式子向量化后得到:
θ:=θ?αmXT(g(Xθ)?y)
其中
X=???????????x(1)0x(2)0x(3)0...x(m)0x(1)1x(2)1x(3)1...x(m)1x(1)2x(2)2x(3)2...x(m)2...............x(1)nx(2)nx(3)n...x(m)n???????????
所以
XT=??????????x(1)0x(1)1x(1)2...x(1)nx(2)0x(2)1x(2)2...x(2)nx(3)0x(3)1x(3)2...x(3)n...............x(m)0x(m)1x(m)2...x(m)n??????????
另外需要注意 (g(Xθ)?y) 是一个 m 维的列向量,上式的正确性是可以肯定的。

也许有人会问,前面的误差函数一大堆嵌套,为什么求偏导还是等于 αmmi=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(θ) 的偏导:

??θjJ(θ)=??θj?1mi=1m[y(i)log(hθ(x(i)))+(1?y(i))log(1?hθ(x(i)))]=?1mi=1m[y(i)??θjlog(hθ(x(i)))+(1?y(i))??θjlog(1?hθ(x(i)))]=?1mi=1m??y(i)??θjhθ(x(i))hθ(x(i))+(1?y(i))??θj(1?hθ(x(i)))1?hθ(x(i))??=?1mi=1m??y(i)??θjσ(θTx(i))hθ(x(i))+(1?y(i))??θj(1?σ(θTx(i)))1?hθ(x(i))??=?1mi=1m??y(i)σ(θTx(i))(1?σ(θTx(i)))??θjθTx(i)hθ(x(i))+?(1?y(i))σ(θTx(i))(1?σ(θTx(i)))??θjθTx(i)1?hθ(x(i))??=?1mi=1m??y(i)hθ(x(i))(1?hθ(x(i)))??θjθTx(i)hθ(x(i))?(1?y(i))hθ(x(i))(1?hθ(x(i)))??θjθTx(i)1?hθ(x(i))??=?1mi=1m[y(i)(1?hθ(x(i)))x(i)j?(1?y(i))hθ(x(i))x(i)j]=?1mi=1m[y(i)(1?hθ(x(i)))?(1?y(i))hθ(x(i))]x(i)j=?1mi=1m[y(i)?y(i)hθ(x(i))?hθ(x(i))+y(i)hθ(x(i))]x(i)j=?1mi=1m[y(i)?hθ(x(i))]x(i)j=1mi=1m[hθ(x(i))?y(i)]x(i)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),即可达到多类分类的目的。


上面就是逻辑回归、分类的大概内容,希望能帮助到大家。
如有错误,期望您能纠正,留言或者是e-mail:artprog@163.com

——–转载请注明出处——–

机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)

标签:

原文地址:http://blog.csdn.net/artprog/article/details/51241581

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!