过拟合
无论线性回归还是逻辑回归均可能出现过拟合问题。举一个线性回归过拟合的例子。
代码如下:
%% 过拟合举例
% 作者:sddfsAv
% 日期:20190429
% 编程环境:Octave5.1.0
clear
clc
%% 生成数据集
x1=[1:4 5:0.5:8 9:0.2:10];
y1=0.01*x1.^3-0.1*x1-5;
x=[x1 11:15];
y=[y1 y1(end)*ones(1,5)];
%% 拟合
x_1=x;
x_2=x.^2;
x_3=x.^3;
x_4=x.^4;
x_5=x.^5;
X=[ones(length(x),1) x_1' x_2' x_3' x_4' x_5'];
theta=inv(X'*X)*X'*y';
%% 实际曲线与拟合曲线对比
x2=1:0.1:16.5;
x_1=x2;
x_2=x2.^2;
x_3=x2.^3;
x_4=x2.^4;
x_5=x2.^5;
X_test=[ones(length(x2),1) x_1' x_2' x_3' x_4' x_5'];
y_overfitting=theta'*X_test';
plot(x,y,'*',x2,y_overfitting)
title('Overfitting Example') % Octave坑爹不能用中文
xlabel('x');ylabel('y');
legend('Real Curve','Overfitting Curve','location','northwest'); % 还是不能用中文,中式英文凑合看吧
print -dpng figure1
拟合结果:
从图中可以看到拟合的曲线呈现上升的趋势,而实际上在
x
>
10
x>10
x>10后
y
y
y的值基本不再发生变化。所以这样的预测函数
h
θ
(
x
)
h_\theta(x)
hθ(x)是不可接受的。
正则化
正则化可以在一定程度上削弱过拟合。正则化的核心在于改变目标函数,相比于线性回归的目标函数,应用于正则化的目标函数为:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
i
=
1
m
θ
j
2
]
J(\theta)=\frac{1}{2m}[\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum^{m}_{i=1}\theta^2_j]
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λi=1∑mθj2]
通过对
θ
\theta
θ求导可以得到解析解(也可以使用梯度下降法)
θ
=
(
X
X
T
+
λ
[
0
0
⋯
0
0
1
⋯
0
⋮
⋮
⋱
⋮
0
0
.
.
.
1
]
)
−
1
X
T
y
\boldsymbol\theta =(XX^T+\lambda \left[ \begin{matrix} 0 & 0 & \cdots & 0 \\ 0 & 1 & \cdots& 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & ... & 1 \end{matrix} \right])^{-1}X^Ty
θ=(XXT+λ⎣⎢⎢⎢⎡00⋮001⋮0⋯⋯⋱...00⋮1⎦⎥⎥⎥⎤)−1XTy
当
λ
>
0
\lambda>0
λ>0时,上式中矩阵必定可逆。
取
λ
=
5
\lambda=5
λ=5,对上面的代码稍作修改即可得到拟合结果。
可以看出正则化后的预测函数在一定程度上削弱了拟合的精度,但同时也削弱了过拟合效应,至少预测结果不会成为“错误”。