【机器学习】正则化对过拟合和欠拟合的影响

模型过拟合和欠拟合的图像特征

偏差大表示欠拟合,而方差大表示过拟合,我们这一节再深入探讨下过拟合和欠拟合问题。一个经典的图如下:
【机器学习】正则化对过拟合和欠拟合的影响_第1张图片
其中d=1为欠拟合,d=4为过拟合,而d=2则刚刚好。回顾下刚刚说的使用训练集和交叉验证集计算出来的误差(又称代价函数) J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ),当d=1的时候,模型欠拟合,那么 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)都很大,因为模型对训练集的拟合都不好,对交叉验证集训练出来的结果只会更烂,此时一般来说 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)很接近,但是 J c v ( θ ) J_{cv}(\theta) Jcv(θ)略高。当d=4的时候,模型过拟合,模型对训练集的拟合已经很好了,但是泛化能力很差,因此 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)比较小,但是 J c v ( θ ) J_{cv}(\theta) Jcv(θ)比较大。 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)图像如下
【机器学习】正则化对过拟合和欠拟合的影响_第2张图片

方差、偏差和正则化

本节继续深入讨论方差和偏差的关系,以及正则化是如何影响这两者的。
假设对于假设函数 h ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 h(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4 h(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4我们使用如下的正则化代价函数训练 J ( θ ) = 1 2 m ∑ i = 1 m h θ ( x ( i ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 m θ j 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^m h_\theta(x^{(i)}-y^{(i)})^2+\frac{\lambda}{2m}\sum_{j=1}^m\theta_j^2 J(θ)=2m1i=1mhθ(x(i)y(i))2+2mλj=1mθj2那么可能会有如下图三种情况
左边是 λ \lambda λ非常大的情况,也就是对于任意偏差的惩罚都十分重,这时候图像会倾向于欠拟合(高偏差);右边是 λ \lambda λ非常小的情况,也就是对于任意偏差的惩罚都十分轻微,这时候图像会倾向于过拟合(高方差),就和没使用正则化差不多。只有正则化参数大小适中才能获得泛化能力强偏差小的模型。 另外我们设训练函数为 J t r a i n ( θ ) = 1 2 m ∑ i = 1 m h θ ( x ( i ) − y ( i ) ) 2 J_{train}(\theta) = \frac{1}{2m}\sum_{i=1}^m h_\theta(x^{(i)}-y^{(i)})^2 Jtrain(θ)=2m1i=1mhθ(x(i)y(i))2
也就是去掉正则化项,同样,我们将交叉验证的代价函数和测试集的代价函数设置为 J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v h θ ( x c v ( i ) − y c v ( i ) ) 2 J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}} h_\theta(x^{(i)}_{cv}-y^{(i)}_{cv})^2 Jcv(θ)=2mcv1i=1mcvhθ(xcv(i)ycv(i))2 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t h θ ( x t e s t ( i ) − y t e s t ( i ) ) 2 J_{test}(\theta) = \frac{1}{2m_{test}}\sum_{i=1}^{m_{test}} h_\theta(x^{(i)}_{test}-y^{(i)}_{test})^2 Jtest(θ)=2mtest1i=1mtesthθ(xtest(i)ytest(i))2

我们会以每次翻一番的速度更新 λ \lambda λ的值,并且得出代价函数 J ( θ ) J(\theta) J(θ)最小的时候的 θ \theta θ值。然后通过计算出的 θ \theta θ计算 J c v ( θ ) J_{cv}(\theta) Jcv(θ),其基本计算过程如下:
t r y   λ = 0 → m i n J ( θ ) → θ ( 1 ) → J c v ( θ ( 1 ) ) try\:\lambda=0\to minJ(\theta)\to \theta^{(1)}\to J_{cv}(\theta^{(1)}) tryλ=0minJ(θ)θ(1)Jcv(θ(1))
t r y   λ = 0.01 → m i n J ( θ ) → θ ( 2 ) → J c v ( θ ( 2 ) ) try\:\lambda=0.01\to minJ(\theta)\to \theta^{(2)}\to J_{cv}(\theta^{(2)}) tryλ=0.01minJ(θ)θ(2)Jcv(θ(2))
t r y   λ = 0.02 → m i n J ( θ ) → θ ( 3 ) → J c v ( θ ( 3 ) ) try\:\lambda=0.02\to minJ(\theta)\to \theta^{(3)}\to J_{cv}(\theta^{(3)}) tryλ=0.02minJ(θ)θ(3)Jcv(θ(3))
t r y   λ = 0.04 → m i n J ( θ ) → θ ( 4 ) → J c v ( θ ( 4 ) ) try\:\lambda=0.04\to minJ(\theta)\to \theta^{(4)}\to J_{cv}(\theta^{(4)}) tryλ=0.04minJ(θ)θ(4)Jcv(θ(4))

t r y   λ = 10.24 → m i n J ( θ ) → θ ( 12 ) → J c v ( θ ( 12 ) ) try\:\lambda=10.24\to minJ(\theta)\to \theta^{(12)}\to J_{cv}(\theta^{(12)}) tryλ=10.24minJ(θ)θ(12)Jcv(θ(12))

假设我们计算出 J c v ( θ ( 5 ) ) J_{cv}(\theta^{(5)}) Jcv(θ(5))的值最小,那么我们可以用选择出来的 θ ( 5 ) \theta^{(5)} θ(5)来计算出其 J t e s t ( θ ( 5 ) ) J_{test}(\theta^{(5)}) Jtest(θ(5))的值,该值可以衡量模型对新样例泛化的能力

之前我们谈到,如果正则化参数很小,那么会过拟合;反之则会欠拟合,我们画出正则化参数和 J c v ( θ ) J_{cv}(\theta) Jcv(θ)以及 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)的关系。
【机器学习】正则化对过拟合和欠拟合的影响_第3张图片
其中紫红色的为 J c v ( θ ) J_{cv}(\theta) Jcv(θ),蓝色的为 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ),因为 λ \lambda λ小的时候,过拟合对训练集拟合很好,但是泛化能力很差;而 λ \lambda λ过大的时候,欠拟合对训练集都拟合不充分,其泛化能力也很差

学习曲线

学习曲线可以验证你的模型是否正确,或者改进算法的精度。我们以训练集的数量m作为横轴,将代价函数作为纵轴,那么可以得出如下的图像:
【机器学习】正则化对过拟合和欠拟合的影响_第4张图片

如果只有训练集一个样例,那么训练集可以拟合的十分精准——只需要找到任意一条经过该点的曲线便可,但是其泛化能力是很差的。随着样例数量增加,实际上假设函数无法精确经过每一个样例,此时 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)会有所上升,但是逐渐总结出规律后,样例和假设函数的偏差不会太大,因此 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)在上升后会逐渐趋于平缓。而模型的泛化能力则是随着训练集样本的增加而逐渐增强的,因此 J c v ( θ ) J_{cv}(\theta) Jcv(θ)一开始会很高,然后逐渐下降。

在欠拟合(高偏差)的情况下,如果我们增大训练量会怎么样?(如图右边)
【机器学习】正则化对过拟合和欠拟合的影响_第5张图片
结果是没什么用,因为假设函数次数不够,哪怕增加了样例其假设函数(也就是误差)还是很高。同样的,连训练集都搞不定就更别提交叉验证集了,其结果是 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)都很高。其结论是,如果在欠拟合的情况下,增大训练集数据量会使得 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)逐渐趋于平缓,但其值依旧较高。

在过拟合(高方差)的时候,如果增加样本量会如何?
【机器学习】正则化对过拟合和欠拟合的影响_第6张图片

可以看出样本小的时候对训练集拟合很好,但是泛化能力很差。随着样本量增大,假设函数很难将所有训练集样本都拟合的很好,因此 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)会轻微上升,但是换来的是其泛化能力的增强——因为模型学会应对更多情况了因此 J c v ( θ ) J_{cv}(\theta) Jcv(θ)会逐渐下降,而如果持续增大样本来给你,其 J c v ( θ ) J_{cv}(\theta) Jcv(θ) J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)会逐渐靠近,最后 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)只比 J c v ( θ ) J_{cv}(\theta) Jcv(θ)大一些,而总的来说,两个值都会比在欠拟合情况下要小得多

总结

接下来我们总结若干应对各种问题的方法:
修正过拟合(高方差):增加训练及数量、使用更少的特征、增加正则化参数的值
修正欠拟合(高偏差):增加额外的特征、增加假设函数的复杂度和次方数、减小正则化参数的值

你可能感兴趣的:(机器学习,机器学习,算法)