逻辑回归(Logistic Regression)和线性回归不同的地方在于,逻辑回归主要用于处理分类问题,针对的结果是散列值。例如给出一些肿瘤样本,通过逻辑回归可以判断肿瘤的状态时良性还是恶性。
关于逻辑回归,一些刚接触到这个概念的同学难免会产生疑问:为什么逻辑回归用于处理分类问题,名字里却含有回归?其实分类模型和回归模型有着相同的本质,分类模型可以将回归模型的结果离散化,回归模型也可以将分类模型的结果连续化 。
对于逻辑回归的损失函数,如果依照之前线性回归中的公式,那么绘制出来的函数图像属于非凸函数图像,并不能用梯度下降法很好的求得极小值点。所以逻辑回归定义了新的损失函数:
上面我们得到了损失函数J(θ)的损失函数:
同样的我们可以使用for循环来对θj的值分开迭代,更简单的方法是使用向量法整体求解,向量法的求解公式为:
为了更好的了解他们的使用方法,我们在这里用实例简单的介绍一下。不用担心实现细节,因为Matlab中已经为我们封装好了他们的调用方法,可以直接拿来使用。这里以 J(θ) = (θ1-5)^2 + (θ2-5)^2 函数为例,我们需要做的就是指定向量θ的初始值 [0, 0],让算法拟合出J(θ)值最小时向量θ的值。
首先需要我们构造损失函数CostFunction,返回单次迭代后J(θ)的值和梯度值向量:
% costFunction.m文件
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); % 这是一个为最优化方法设置参数选项的方法,
成对传入参数,前一个为选项名称,后一个为选项的值。设置梯度目标参数'GrandObj'为'on',设置迭代次数
'MaxIter'为100
>> initialTheta = zeros(2,1); % 初始化向量θ
>> [optTheta, functionVla, exitFlag] = fminunc(@coustFunction,initialTheta,options) % 为无约束优化
提供大型和中型优化算法,默认使用BFGS算法。传入损失函数的引用、参数和之前设置的选项,返回θ向量、损失函数的值
和是否收敛的标记
多分类
多分类问题也可以按照二分类问题的思路进行类比推导,思路是每次将要区分出来的值作为一个群体,将剩余数据作为一个群体,按照二分类的方法拟合出判定边界。如此作用每一类数据,就可以得到满足y=1,2,3...k 时的分界曲线,然后将他们组合到一个J(θ)中即可。过拟合
到了这里还没完,还要介绍一下过拟合的问题。在训练模型过程中,模型当然跟训练集数据越吻合越好,不过过度拟合反而会让结果适得其反。以下三个图像就代表的是欠拟合、正好拟合和过拟合的情况。可以看到第一个图像与训练集吻合程度较差,第三个图像能完美拟合每一个数据,其实这两个都是不理想的模型。虽然第三个模型能很好的预测训练集中的数据,但是它显然不能很好的预测新数据,用专业术语来说就是它的泛化能力较差。
有两个有效的方法能避免过拟合:
1、减少特征数量。这里可以选择人为减少特征的数量,还可以使用模型选择算法来筛选。
2、正则化。正则化会保留所有的特征,但是会减少参数θj的大小。
正则化
在训练集数据不够或者over training时,常常会导致过拟合。过拟合就是向原始模型引入惩罚因子,以防止过拟合和提高模型繁华能力的一类方法的统称。在实际场景我们总是会发现,最好的拟合模型(从最小泛化误差的意义上)是一个适当正则化的模型。
梯度下降法求解
不管是逻辑回归还是线性回归,将正则化方法代入后得到的损失函数都满足如下公式常规方程
如果在逻辑回归和线性回归中对结合了正则化的函数采用常规方程的解法,求解公式会发生一些变化:关于常规方程的解法这里不做赘述,具体可参照上一篇文章。