入门机器学习(四)--Logistic回归
1.分类(Classification)
如何开发一个分类算法,以对肿瘤进行恶性或良性分类为例。
如果要对以上数据进行线性回归可以这么做:
如果h(x)≥0.5,那么输出为"y=1",如果h(x)<0.5,那么输出为"y=0"
但是,如果在数据的右边增加一个点:
那么根据线性回归,得到的分类曲线如下图蓝色线所示:
这样,取0.5为阈值的话就是明显不合理的。其实将线性回归用于分类问题一般来说是不合适的。用线性回归做分类的特点是:
分类的目标是0或者1,但是假设函数的输出可能大于1也可能小于0,所以接下来提出一种逻辑回归,它的特点是:
输出总是在[0,1]之间。逻辑回归是一种分类算法。
2. 假设函数(Hypothesis Representation)
相对于线性回归,逻辑回归所使用的假设函数是在线性回归的基础上做一些修改,如下所示:
其中g函数为:
结合之后,逻辑回归的假设函数为:
g(z)函数被称为sigmoid函数或者logistic函数,两个名字是等价的,其函数图像如下图所示:
观察图像可知,z趋向正无穷时,g(z)趋近于1,z趋向负无穷的时候,g(z)趋近于0.所以假设函数h(x)的取值范围为[0,1]
举例对该假设函数做数说明:
如果输入为以下值(x0=1的原因是为了以矩阵的形势表示假设函数),输出h(x)=0.7
这个输出的意思是有70%的概率,患者的肿瘤是恶性的。
假设函数的输出可以由以下概率公示来表示:
3. 决策边界(Decision Boundary)
从上图的sigmoid函数可以看出,当z>0的时候,g(z)大于0.5,当z<0的时候,g(z)<0.5.所以可以根据Z的值(θ^T·X)来进行分类,当Z大于0的时候,可以判断为正例,当Z小于0的时候,可以判断为负例。
接下来,假设我们的假设函数如下所示,并且已经得到了最优参数为[-3,1,1]
数据集如下图所示
如果预测y=1,那么根据之前的推论,则需满足 -3+x1+x2≥0 即x1+x2≥3
如果预测y=0,那么根据之前的推论,则需满足 -3+x1+x2<0 即x1+x2<3
可以得出,x1+x2=3是预测正反例的分界线,将其画出来为:
该曲线被称作决策边界,线上的点对应的是h(x)=0.5的情况。该情况下的决策边界是线性的,那么非线性的决策边界该怎么表示呢?另一个例子:
假设函数如下所示,其最优参数为[-1,0,0,1,1]
与上一例的分析相同,通过预测正反例可以得到其决策边界函数:
其决策边界函数为: 该函数是一个圆,其在数据集上的呈现为:
注意:决策边界不是由数据集决定的,即使数据集消失,决策边界仍然不会改变。决策边界是由假设函数的参数决定的,而数据集是决定假设函数的参数的。
4. 代价函数(Cost Function)
对于以下训练集和假设函数,怎么选择最优的参数θ呢?
对于线性回归,其代价函数为:
如果逻辑回归也用这个代价函数的话,由于h(x)是sigmoid函数,所以J(θ)不是凸函数,其图像大致如下图所示:
其不是凸函数,所以由很多局部最优解,这对求解最优参数特别不利。将代价函数写成如下的形式:
其中,令
则该函数就是逻辑回归的代价函数,它的函数图像如下所示:
该函数能够很好的诠释远离真实标签和贴近真实标签的代价的趋势。
5. 简化代价函数与梯度下降(Simplified cost function and gradient descent)
逻辑回归的代价函数比较复杂,可以用另一种比较简单的方式来表达。根据第四节的描述,逻辑回归的代价函数如下:
由于输出是0或者1,所以可以将以上的代价函数写在一起:
为了求取最优的参数θ,我们的目的是最小化J(θ),并且迭代地进行梯度下降:
带入之后,即:
注意:这个迭代公式虽然和线性回归时的一样,但是我们这里的h(x)是sigmoid函数,而不是θ^T·X,所以二者的梯度下降是截然不同的。
6. 高级优化(Advanced Optimization)
共轭梯度法,BFGS, L-BFGS
这些算法与梯度下降法相比,优缺点为:
优点:不需要人工选择学习率α,一般比梯度下降快
缺点:比梯度下降法更复杂,一般不能自己实现,要调用已经存在的软件库。
举个例子,如何使用这些方法:
Octave实现:
7. 多元分类:一对多(Multi-class classificaition:one-vs-all)
何为多元分类,就是将一组特征数据分成多个类别。比如e-mail可以分组成为工作,朋友,家庭等等类别
下面就是一个三分类的例子,怎么对下面这个数据进行分类呢?
方法就是将多元分类转化为一对多的问题,如下图所示,将其中的一个类别当做一类,其余的数据当做另一类,把这个问题转化为二元分类问题,然后对该问题求解假设函数h1(x)。
求得h1(x)之后,通上一步,将另一个类单独当做一类,其余的数据当做另一类,求得该二分类问题的h2(x)
同以上两个步骤,得到h3(x)。
得到三个假设函数之后,即完成了多分类问题,训练数据一次经过h1(x),h2(x),h3(x),即可完成分类。