您的位置:首页 > 其它

逻辑回归与过拟合问题

2017-03-26 17:32 211 查看

逻辑回归(Logistic Regression)

分类问题(classification)是机器学习要解决的另一大类问题,这里用到的方法是逻辑回归(logistic regression),也是目前机器学习领域应用最广泛的方法。先从基本的二分类问题入手,即输出y只有0,1两种结果。

对于分类问题,只有离散有限的取值,显而易见的,用线性回归的表示方法并不能很好地表示,因此需要把假设函数的形式改写一下,引入S型函数(sigmoid function),也称逻辑函数(logistic function)。改写形式如下:

hθ(x)=g(θTx) g(z)=11+e−z即hθ(x)=11+e−θTx

直观地看g(z)(S型函数)的图像是



其值域的范围是(0,1),定义域是(−∞,+∞)。这样,就把一个离散的问题转化成一个连续函数表示的问题,可以看做是hθ(x)表示y输出1的概率,用概率的数学表示是:

hθ(x)=P(y=1|x;θ)=1−P(y=0|x;θ)

例如,hθ(x)=0.7表示y=1的概率是0.7,此时y=0的概率是0.3。这样,可以通过计算hθ(x)的值预测y,当hθ(x)≥0.5时认为y=1,当hθ(x)<y时认为y=0。

通过计算hθ(x)≥0.5和hθ(x)<0.5时x的取值范围,可以得到y=1和y=0的分界,这条界线称为决策边界(decision boundary)



决策边界并不一定是直线,对于非线性的情况,会出现不同的形状。



而另一点需要强调的是,决策边界并不是样本的性质,而是决定于假设函数,或者说对问题的建模。

类比于线性回归,需要建立一个代价函数(cost function)来表示假设函数hθ(x)与输出y的偏差,由于假设函数形式的改变,在线性回归中的代价函数形式在这里也不适用。在逻辑回归中,代价函数定义为:

J(θ)=Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))y=1y=0

直观地看代价函数就是





这里这样理解:当y=1且hθ(x)=1时,J(θ)=0,即“代价”很小;当y=1且hθ(x)=0时,J(θ)→+∞,即“代价”很大。对于y=0的情况也是同样理解。

整合上面的两个等式,可以得到一个统一的表达式:

J(θ)=−1m∑i=1m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))

在此类似于在线性回归中用梯度下降法优化代价函数的问题,这里应用梯度下降法的迭代公式:

θj:=θj−α∂∂θjJ(θ)

代入J(θ)的表达式,最后得到

θj:=θj−αm∑i=1m(hθ(x(i))−y(i))x(i)j

把J(θ)的表达式和θj的迭代式写成向量形式

J(θ)=1m(−yTlog(h)−(1−y)Tlog(1−h)) θ:=θ−αmXT(h−y)

在实际应用中,相对于梯度下降法有很多算法可以使迭代收敛速度更快,如共轭梯度(Conjugate gradient)、BFGS、L-BFGS。Andrew教授的建议是利用现成的库去实现这些算法而不需要自己编写代码。如在Matlab/Octave的实现:

首先写出代价函数及其偏导

function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end


然后调用fminunc()优化函数

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);


多分类问题(Multiclass Classification)

多分类问题是用一对多(one-vs-all)方法,把多分类的问题转化成多个二分类的问题,再用逻辑回归的方法解决。

假设y=0,1,2,...,n,把问题分解成n+1个二分类问题,分别计算假设函数h(i)θ(x),然后取其中的最大值作为一次的判断

h(0)θ=P(y=0|x;θ)h(1)θ=P(y=1|x;θ)...h(n)θ=P(y=n|x;θ)prediction=maxi(h(i)θ(x))

过拟合问题(Overfitting)

下图从左到右分别是对同一个样本的欠拟合(underfitting)、合适、过拟合(overfitting)



欠拟合是指拟合形式过于简单不能反映样本的走向而不能对数据进行准确预测。与之相对的,所谓过拟合,即对一个样本的拟合形式过于严格(要求经过所有样本点),导致曲线的形式变得奇怪而不能正确反映样本的趋势走向,不能对样本以外的数据进行正确预测。

解决过拟合的方法是:

减少特征的数量

手动选择需要保留的数据

使用模型选择的算法

正规化

保留所有特征,但是减小参数θ的大小

对于正规化(regularization)可以这样理解:

假设现在假设函数的形式是θ0+θ1x+θ2x2+θ3x3+θ4x4,已经过拟合,通过正规化方法减小θ的值,当θ3和θ4的值很小时,后两项的贡献可以忽略不计,这时假设函数的形式可近似看作θ0+θ1x+θ2x2,正好合适。



这样,通过改写代价函数的形式,增加“惩罚”项,以增加对参数θ的目标优化。

对于线性回归,代价函数为:

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

其中对于梯度下降法,每次的迭代方程为:(θ0项不惩罚)

θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))x(i)0 θj:=θj−α[(1m∑i=1m(hθ(x(i))−y(i))x(i)j)+λmθj]j∈{1,2,...,n}

对于标准方程法,改写成:

θ=(XTX+λL)−1XTy 其中L=⎡⎣⎢⎢⎢⎢⎢⎢⎢011⋱1⎤⎦⎥⎥⎥⎥⎥⎥⎥

改写成这样有一个附加好处,就是加入λL项后矩阵一定可逆。

对于逻辑回归,代价方程改写为:

J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+λ2m∑j=1nθ2j

而梯度下降法的迭代方程与线性回归中的形式一样,只是其中假设函数的表达式不一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习
相关文章推荐