【Machine Learning, Coursera】机器学习Week3 Regularization

Regularization: The Problem of Overfitting


本节内容:过拟合及其解决办法

相关机器学习概念:
1. 过拟合(overfitting)、欠拟合(underfitting)
2. 方差(variance)、偏差(bias)
3. 正则化(regularization)


1. What is Overfitting

If we have too many features, the learned hypothesis may fit the training set very well( J(θ)0), but fail to generalize to new examples.

特征数量过多会导致过拟合(overfitting),或者叫高方差(high variance),此时模型对训练集的拟合效果非常好,但用验证集验证时误差较大,即模型通用性差。
与之相对的,特征数量过少会导致欠拟合(underfitting),或者叫高偏差(high bias),即模型对训练集的挖掘仍有欠缺。
要得到拟合性和泛化性好的模型,就需要避免这两个问题。

2. Addressing Overfitting

因为导致过拟合的根本原因是特征数量过多,解决过拟合问题的一个直接思路就是减少特征数量。此外,还可以保留特征,但减小特征参数的值,以达到类似的效果。这种方法我们称之为正则化(Regularization)
1. 减少特征数量
– 人工选择
– 模型选择(后面的课会提到)
2. 正则化
–保留所有特征,但减小参数值
–在参数很多时预测效果好,每个参数均作出微小贡献

3. Regularization

3.1 Cost function

正则化的方法是在损失函数后增加一个用于惩罚参数的正则化项,以减小参数的值,避免过拟合。正则化项的形式为

λj=1nθj2

线性回归正则化后的损失函数为

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

其中,λ为正则化参数,其目的是控制降低误差和避免过拟合这两个目的间的平衡。
按照惯例,我们不用惩罚θ0,求和从j=1开始

3.2 Choosing λ

λ设定过大反而会导致欠拟合。如λ=1010时,由于对参数的惩罚过大,会导致除了θ0外的所有参数趋近于零。这相当于去掉所有特征,将假设简化为hθ(x)=θ0,拟合曲线为一条平行于x轴的直线。
在后面讲到多重选择时,我们将讨论一些自动选择合适的λ的方法。

4. Regularized Linear Regression

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]
min J(θ)

【Machine Learning, Coursera】机器学习Week3 Regularization
因为不惩罚θ0,所以在正则化线性回归算法中要将j=0j=1,2,...,n的情况分开处理。可以看到,对于j=1,2,...,n,新的梯度下降只是将原来的前项θj换成了θj(1αλm),起到压缩参数的作用。
如果学习速率小而样本量很大的话,通常1αλm是一个比1小一点的值。

5. Regularized Logistic Regression

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

https://blog.****.net/weixin_42395916/article/details/80844107中,我们提到逻辑回归参数估计的方法有两种,一种是梯度下降法,一种是高级的优化算法。

5.1 Gradient Descent

正则化逻辑回归的梯度下降更新和正则化线性回归的梯度下降更新形式相同,但它们仍是两个不同的算法,因为假设Jθ(x)是不同的。
【Machine Learning, Coursera】机器学习Week3 Regularization

5.2 Advanced Optimization Algorithm

如果要用高级优化算法求解正则化逻辑回归的参数,关键在于自定义函数costFunction,该函数传入(n+1)x1向量theta,返回计算的代价函数值和梯度值。
之后,将costFunction传入fminunc函数,即可返回无约束条件下的损失函数最小值和参数的解。
【Machine Learning, Coursera】机器学习Week3 Regularization
*Matlab中索引从1开始

注意事项:
1. 计算损失函数时不要忘记加正则项
2. j=0的梯度值需要单独计算,j=1,2,…,n的梯度值可用循环实现。