目录
1 模型引入与概述
机器学习的第一个算法也是最简单的算法是线性回归,对于输入x,模型输出的y是连续的,这也是回归问题(预测)和分类问题的区别,分类问题,二分类问题
都是离散值,而回归问题
。明明是分类算法为什么称作Logistic regression,个人理解是因为Logistic Function的输出是
之间的实数,这与回归问题的输出是如出一辙的。
1.1 sigmoid函数
下面进行Logistic regression模型的详解,Logistic regression不仅能解决二分类问题,也能处理多分类问题,以二分类问题为例,多分类问题会在后面讲解。Logistic regression的主要思想是使得目标函数的输出
,而能够使得函数输出在0,1之间的则关键在于阶跃函数sigmoid function:
,sigmoid函数的图像如下图所示:从图上可以看出,对于输入值大于零,输出值大于0.5;输入值小于零,输出值小于0.5,这也是用于分类的依据,另外,当输入值接近正无穷大时,函数输出为1,当输入值趋近无穷小时,函数输出为0。
1.2 模型表示
对于Logistic regression模型,具体表示为:
,
即:
模型预测的是对于给定x和参数,其输出值为1的概率:
,并且有
.
其决策边界表示为:
当时,模型预测输出的值为1。
下面介绍两个简单的例子便于理解:
(1)线性边界:对于模型 ,预测y=1,如果
,即决策边界为
(2)非线性边界:对于模型,
,即当
,预测输出y=1
1.3 代价函数
Logistic regression模型抽象表示为:给定训练集,
,
,
,
。
模型的代价函数若用线性回归的形式表示则为,计算第i个样本的损失即为
.
如果将sigmoid函数代入到代价函数,函数为非凸的,有很多的局部最优解,梯度下降法不能保证收敛到全局最小值,因而我们需要重新构造一种代价函数,并且该代价函数能够很好的衡量误差的大小。构造Logistic Regression模型的代价函数为
对于y=1,
当样本标签值为1,而函数预测标签值为0时,此时的损失值极大,体现了惩罚,反之,标签值为1,预测值也为1时,损失值为0.对于y=0的情况同样如此。
1.4 梯度下降法
下面详细介绍模型的损失函数以及梯度下降的求解:损失函数y=0和y=1统一写成
,因而
需要最小化损失函数,得到参数,梯度下降法为
,
需要注意的是对于每个的更新应该同步进行,即一次性更新所有的
。
对上式求解的解析如下:
记中括号里面的式子为A,则有
2 matlab代码实现
以代价函数为例,
,
%代价函数
function [jval,gradient]=costFunction(theta)
jval=(theta(1)-5)^2+(theta(2)-5)^2;
gradient=zeros(2,1);
gradient(1)=2*(theta(1)-5);
gradient(2)=2*(theta(2)-5);
%主函数
options=optimset('GradObj','on','MaxIter',100);
initialTheta=zeros(2,1);
[optTheta,functionVal,exitFlag]=fminunc(@costFunction,initialTheta,options);
3 Logistic regression的多分类
对于邮件,除了区分是否是垃圾邮件,同样可以对邮件的来源分成工作邮件、朋友邮件、家庭邮件、个人爱好邮件。
如下例的三分类问题,如下图图1所示:
图1 图2 图3
上图图2先将第一类作为一类,其他两类看作相同的另一类,该伪训练集得到的结果是,即预测输出为1的概率,同样上图图2是将第二类作为一类,而剩余两类作为同一类,得到的结果是
,即预测输出为2的概率,对于第三类依此类推,最后输出选择概率大的作为分类结果。
4 总结
Logistic regression分类方法思想简单,易于实现,不管是二分类还是多分类,都能用此模型完成,它的本质是预测某个样本所属于某标签的概率,其关键在于代价函数的构造,既能体现惩罚,又能与模型结果相契合,妙哉!(第一次写博客,感受到了前辈们写博客的辛苦,万事开头难,有不足之处希望能够在后期改正,保持认真对待的态度)