过拟合的基本理解
过拟合的概念
如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0),但是可能会不能推广到新的数据。
通俗易懂地说,就是训练得到的能非常好地适应我们的训练集,但是对测试集进行预测时,效果会表现的不好。
解决过拟合方法
减少特征值的数量
- 人为的保留一些重要的特征值
- 用特征选择算法进行特征的选择(PCA、层次分析法)
正则化
- 保留所有的特征,但是减少参数 θ \theta θ的大小
根据本次作业要求,我们使用正则化的方法来解决过拟合问题。
正则化原理
正则化是机器学习和统计建模中用于防止过度拟合并提高模型泛化能力的技术。当模型过度拟合时,它已经很好地学习了训练数据,并且可能无法在新的、未见过的数据上表现良好。
最常用的正则化技术是 L1 正则化 (Lasso)、L2 正则化 (Ridge) 和弹性网络正则化。L1 正则化将模型系数的绝对值之和添加到损失函数中,从而鼓励稀疏性和特征选择。L2 正则化添加了模型系数的平方值之和,这使得系数更小但非零。最后,弹性网络正则化结合了 L1 和 L2 正则化。
我们今天主要使用L2正则化来解决过拟合问题:
L2 正则化,也称为 Ridge 正则化,将模型系数的平方值之和添加到损失函数中。
与 L1 正则化不同,L2 正则化不会强制系数恰好为零,而是鼓励系数变小。L2 正则化可以通过将单个特征的影响分散到多个特征来防止过度拟合。当输入特征之间存在相关性时这是有利的。
从数学上来说,L2 正则化项可以写为:
L2 regularization = λ ∑ j = 1 n θ j 2 \lambda\sum\limits_{j=1}^{n}{\theta _{j}^{2}} λj=1∑nθj2
正则化函数公式
以逻辑回归的损失函数为例:
无正则化情况下的损失函数:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
加入L2正则化情况下的损失函数:
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}}
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
这里的 λ \lambda λ 被称为正则化参数(Regularization Parameter),它使参数大小变大变小,从而使假设函数变得更“简单”。
正则化代码实现
L2正则化情况下的损失函数实现:
L2正则化情况下的梯度下降算法实现: