机器学习----分类问题

来源:互联网 发布:用淘宝充话费怎么退款 编辑:程序博客网 时间:2024/05/17 08:53

1.简介

分类问题有许多应用,比如:判断一封邮件是否为垃圾邮件,肿瘤是否为良性?分类问题包括:两类分类多类分类,其中多类分类用到的是两类分类的思想。在我们看来,类别这个概念是可数的,所以分类问题属于离散问题,与上一讲的回归问题不同,它属于连续问题。但与回归问题类似的是,用机器学校处理分类问题时也是找一条回归曲线,通过设置阈值把数据分为离散的类,所以这一节我们重点关注如何找这条曲线

2. 逻辑斯谛回归(logistic regression)

总感觉这个回归的中文翻译怪怪的,下文中提到这个模型统一用英语(logistic regression)表示。下面我们来说明这条曲线是如何找到的。

2.1 分类思想

这一讲我们要处理的数据有明显的界限(boundary),这些数据如果是二维或者三维的可以明显区分出它们各自的类别,高维空间的数据虽然无法感知,但用到的思想是一样的。比如一个二维分类为问题(一般我们认为正类为1,负类为0):

这里写图片描述

我们可以看出它明显的分成两类,有了之前线性回归的思想,我们可以试着找出这样一条直线hθ(x)

这里写图片描述

hθ(x)<0.5时,我们可以预测x属于0类即y=0,当hθ(x)0.5时,我们可以预测x属于0类即y=0,在这个例子中看起来还不错,但是如果我们在增加几个数据点,再拟合曲线得到下图:

这里写图片描述

这时候再以0.5为标准去找点,发现这条线把原来属于正类的点归到负类(图中绿色圈出的点),很显然上讲说的线性回归明显不work, 由于线性回归是从无穷到无穷的映射,对于两类分类问题,我们只需要得到从无穷到[0,1]的映射,即0hθ(x)1。因此我们需要找另外一条回归曲线hθ(x),观察以上的两个图,我们发现这样的曲线满足上述条件:

这里写图片描述

这样无论在曲线左右加多少点都可以找到正确的类别。我们直接给出它的定义

hθ(x)=g(θTx)z=θTxg(z)=11+ez


hθ(x)=11+eθTx

θx都是1维,即只有一个特征时,取θ=1z=θTx=x,我们看看它的图像:

这里写图片描述

函数

hθ(z)=11+ez

具有性质:
1.z+ 时,y1;z 时,y0
2.θ越大图像越抖
3. 如果z>0,h(z)>0.5,我们就预测y=1;如果z<0,h(z)<0.5,我们就预测y=0
有没有发现这个曲线有点眼熟,对了,这就是我们在高中生物就学过的S型曲线,再或者是著名人口学家马尔萨斯的人口增长模型,我们把它引入去解决分类问题。注意到这只是一个特征的情况,两个特征时也可以画出类似的三维图形,但当特征多时这个模型就无法可视化了。但是我们可以用刚才得到的函数性质,并把它推广到多维空间。由于logistic回归得到的是一条回归曲线,上边说过我们通过设定阈值的方法把连续数据变成离散数据。那么,这个函数本身的意义是什么呢?对了,是概率,更准确的说是条件概率。我们来看函数的定义:
hθ(x)=p(y=1|x;θ)

这个定义的解释就是,给定x,把它分类成y=1的概率,我们之前设定阈值时也说过hθ(x)>0.5时,预测为1,从概率的角度解释这样做是可行的。

2.2决策边界(Decision Boundary)

上边的函数性质3中说到了, 如果z>0,h(z)>0.5,我们就预测y=1我们知道h(z)本身是复合函数,我们把原函数写回就可以得到一些新的性质,如:θTx>0,h(θTx)>0.5,我们就预测y=1θTx<0,h(θTx)<0.5,我们就预测y=0,而θTx=0就称为决策边界(Decision Boundary)。注意到,由于θTx并非总是表示线性,因此决策边界未必都是直线,下面我们看几个二维决策边界的例子。

1.hθ(x)=g(θ0+θ1x1+θ2x2)
由决策边界的定义的出它的边界为:θ0+θ1x1+θ2x2=0,很明显这是二维平面内的一条直线,三维情况下就是一个平面,而高维空间就是超平面。这种”一刀两断”的分类方法是我们最常见的。下面我们看它的示意图(θ0=3,θ1=1,θ2=1):

这里写图片描述

2.hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22)
上述的一刀切的分类方法过于简单粗暴,有些情况下我们希望可以用曲线去分类,因此在直线的方程中加入平方项,熟悉微积分的同学可以一眼看出这种情况的decision boundary是闭合的二次曲线,当然我们举得例子是只有一个特征的二维情形。在三维情况下,加入二次项后,decision boundary是二次曲面。n维时,decision boundary是二次超曲面。我们来看这个例子(θ0=1,θ1=0,θ2=0,θ3=1,θ4=1):
这里写图片描述

同样的,要想让曲线(面)更自由,可以加入立方项,三次项,….,n次项,加的越多曲线的形状就会越随意,decision boundary对于训练集中的数据的分类效果就会越好(注意这里的措辞)。

2.3带价函数(Cost Function)

我们在回归问题中讨论过它的带价函数为:

J(θ)=12mi=1m(hθ(x(i))y(i))2

如果我们把这个专题讨论的hθ(x)直接代入的话会发现,带价函数不是凸函数,这样的函数存在很多局部最优解,因此无法找出最优解!但是我们可以把这个问题转化成凸问题,定义Logistic regression的cost function 为:
J(θ)=1mi=1mCost(hθ(x(i)),y(i))Cost(hθ(x(i)),y(i))=log(hθ(x))ify=1Cost(hθ(x(i)),y(i))=log(1hθ(x))ify=0

我们把两种情况下的函数图像画出来:
y=1

这里写图片描述

y=0
这里写图片描述

这个公式看着复杂,其实意思是很简单的,如果我们想要预测正类(y=1),用hθ(x)计算出的预测值越接近1,它是正类的概率就越高,则带价越低,恰好为1时带价为0;用hθ(x)计算出的预测值越接近0,它是正类的概率就越低,则带价越高,恰好为0时带价为无穷。预测负类(y=0)的解释越它类似,所以我们得出cost function的性质为:
如果hθ(x)=yCost(hθ(x),y)=0
如果y=0并且hθ(x)1, Cost(hθ(x),y)
如果y=1并且hθ(x)0, Cost(hθ(x),y)

对于分类问题y不是取1就是取0,我们用一个式子来表示这个函数:
J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

注意公式中,前一项和后一项不能同时存在,用向量表示为:
h=g(Xθ)J(θ)=1m(yTlog(h)(1y)Tlog(1h))

到目前为止,我们已经把linear regression 的cost function完全搞清楚,下面要研究的就是如何最小化cost function 以求出参数θ0,θ1,...,θn
与上一讲一样,我们把logistic regress 也写成一个模型:

假设:

hθ(x)=11+eθ0+θ1x1+...+θnxn

求参数:
θ0,θ1,...,θn

带价函数:
J(θ0,θ1,...,θn)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

目标:
minJ(θ0,θ1,...,θn)

如何求解这个最优化问题呢?

2.4求解带价函数

有个之前的基础,我们知道可以用梯度下降法求解凸优化问题,思路就是

参数:=参数-学习率×带价函数对该参数的偏导

用数学公式表示就是:
θj:=θjαmi=1m(hθ(x(i))y(i))x(i)jj=0,1,....,n

向量表示为:
h=11+eXθθ:=θαmXT(hy)

梯度下降法求解这个问题是可行的,在这里介绍一种更高效的方法。matlab中的优化工具箱中提供了共轭梯度法(conjugate gradient), BFGS, L-BFGS等这些方法来求最优解,这些方法被封装在一个fminunc(find minimization unconstrained)的函数中,再调用这个函数时需要手动编写cost function. 记住,这个cost function 输入多个变量,返回函数值,各个变量的偏导数值。
在logistic regression中:

function [J, grad] = costFunction(theta, X, y)m = length(y); h=1./(1+exp(-X*theta));J=(-y'*log(h)-(1-y)'*log(1-h))/m;  %返回costfunction的值for j=1:length(theta)                            grad(j)=(X(:,j)'*(h-y))/m;      %返回各个偏导数值endend

optimset函数设定求解最小值的各种参数,如

options=optimset('GradObj','on','MaxIter',100)

就是说用于求最小值的函数会提供梯度,并且最大迭代次数为100
最后调用fminunc可以找出cost function 取最小值情况下的各个θ

[optTheta, functionVal,exitFlag]=fminunc(@costFunction,[0,0,...,0],option)

上式中的[0,0,…,0]是各个θ的初值

3.多类分类问题

除了最常见的两类分类问题之外,多类分类问题也会经常遇到,我们把多类分类问题当作两类分类问题来解决。如给天气分类,天气的类别有阴晴雨雪,我们可以把整个数据分为阴天与非阴天;晴天与非晴天;雨天与非雨天;雪天与非雪天。这样就相当于对一组数据做四组两类分类问题,最后找出概率最大(上文提到hθ(x)返回结果的解释是概率)的那个分类。用数学模型表示就是:

y{0,1,2,...,n}h(0)θ(x)=P(y=0|x;θ)h(1)θ(x)=P(y=1|x;θ)...h(n)θ(x)=P(y=n|x;θ)hθ(x)=maxi(h(i)θ(x))

有了hθ(x)的表达式,在利用上文的方法就可以求出各个θ

4.过拟合(overfit)

上文提到过,如果想要更好的区分训练样本中的数据,可以加入一些平方项,立方项等,但是有一些代数基础的同学就会知道,高阶多项式是严重病态的因为它过于敏感,就是说稍微改变一下系数函数值就会发生很大的变化,这点是很显然的。 我们把这种在训练集上表现出很好的效果,在测试集中则效果很差的现象称为过拟合(overfit),如果hθ(x)不足以说明测试集描述测试集的数据,我们称之为欠拟合(underfit)。这两种都不是我们想要的结果,欠拟合时可以加一些高阶多项式修正,加多了则可能会导致过拟合现象。所以这节我们研究如何在它们之间找到平衡(trade off)。一般来说解决过拟合的方法有两种:

  1. 减少特征向量的个数,目前有些算法可以自动选择出特征.

  2. 正规化方法(Feature Regulization),这个方法可以保留所以特征。

通过仔细分析我们发现,高阶多项式之所以会对函数值影响很大,是因为它的对应系数θi过大,如果,我们让这个θi0那这个特征项对函数值的影响就不会那么大。另一种解释就是把θi看作权值,有些特征我们为它赋予很大的权重,有些则很小,这样一来就避免过拟合。我们就会有疑问到底要缩小那些特征项呢?答案是:缩小所有,让算法自动去选择。那么是如何做到缩小所有项的呢,很简单,只需要在cost function中入一个反映θ的项即可,注意到由于θ有正负,我们考虑它的平方项,这样一来:

对于线性回归(linear regression),新的 cost function就变为:

J(θ)=12mi=1m(hθ(x(i))y(i))2+λ2mj=1nθ2j

向量表示为:
J(θ)=12m(hy)T(hy)+λ2mθTθ

对于logistic regression, 新的cost function变为:
J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθ2j

向量表示为:
J(θ)=1m(yTlog(h)(1y)Tlog(1h))+λ2mθTθ

λ的作用是让两者平衡,λ过大,在求最小值时第二项会考虑的过多,就会发生欠拟合,λ过小,则第二项考虑过少,就会发生过拟合,所以它的值要多次实验才能得到。另外,我们不调整常数项对应的参数,即θ0,因此对于新的cost function, 我们用梯度下降法求调整后的各个θ值,
对于linear regression:
θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0θj:=θjα[1mi=1m(hθ(x(i))y(i))x(i)j+λmθj]j=1,2,...,n

对于logistic regression:
θ0:=θ0α1mi=1m(11+eθTx(i)y(i))x(i)0θj:=θjα[1mi=1m(11+eθTx(i)y(i))x(i)j+λmθj]j=1,2,..,n

同样,他们都有自己的向量表达式,即
linear regresion:
h=Xθθ:=θαmXT(hy)+αλmθ

logistic regression:
h=11+eXθθ:=θαmXT(hy)+αλmθ

一定要学会一个公式的向量表达式,这种式子对于编程来说是很便利的,这讲主要讨论了机器学习中的分类问题,用到的回归函数是linear regression, 记住它的cost function稍微有所不同,而求解cost function的方法也引入了其他的一些更高效的算法,下一讲我们研究如何把更多的linear regression组合起来的问题,即人工神经网络

0 0
原创粉丝点击