逻辑回归与过拟合问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ferriswym/article/details/66477387

逻辑回归(Logistic Regression)

分类问题(classification)是机器学习要解决的另一大类问题,这里用到的方法是逻辑回归(logistic regression),也是目前机器学习领域应用最广泛的方法。先从基本的二分类问题入手,即输出 y 只有 0,1 两种结果。
对于分类问题,只有离散有限的取值,显而易见的,用线性回归的表示方法并不能很好地表示,因此需要把假设函数的形式改写一下,引入S型函数(sigmoid function),也称逻辑函数(logistic function)。改写形式如下:

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

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


S型函数图像

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

hθ(x)=P(y=1|x;θ)=1P(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)


这里写图片描述

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

扫描二维码关注公众号,回复: 3202715 查看本文章

这里写图片描述

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

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

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

直观地看代价函数就是


这里写图片描述 这里写图片描述

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

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

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

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

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

代入 J(θ) 的表达式,最后得到
θj:=θjαmi=1m(hθ(x(i))y(i))x(i)j

J(θ) 的表达式和 θj 的迭代式写成向量形式
J(θ)=1m(yTlog(h)(1y)Tlog(1h))
θ:=θαmXT(hy)

在实际应用中,相对于梯度下降法有很多算法可以使迭代收敛速度更快,如共轭梯度(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)


欠拟合和过拟合

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

解决过拟合的方法是:

  1. 减少特征的数量
    • 手动选择需要保留的数据
    • 使用模型选择的算法
  2. 正规化
    • 保留所有特征,但是减小参数 θ 的大小

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


正规化改变假设函数的形式

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

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

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

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

θ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}

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

θ=(XTX+λL)1XTy
其中
L=0111

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

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

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

而梯度下降法的迭代方程与线性回归中的形式一样,只是其中假设函数的表达式不一样。

猜你喜欢

转载自blog.csdn.net/ferriswym/article/details/66477387