1 过拟合问题(Overfitting)
过拟合(Overfitting)问题就是特征数量太多,过分的追求完美拟合训练样本,把训练样本自身的一些特点,当成所有潜在样本都会具有的一般特征。这样求得的假设函数对训练样本会拟合非常好,但是泛化能力比较差,难以对新的样本做出正确的预测。
欠拟合(Underfitting)问题就是对训练样本的一般性质尚未学好,我们的假设函数h的形式很难映射到数据的趋势。通常是由变量过于简单或变量太少引起的。
关于过拟合和欠拟合,西瓜书里面讲的比较直观,比如预测树叶,将绿色作为树叶的标准,选择的特征数量太少,如果将绿色的都作为树叶,就会误将大树分为树叶,这个就叫欠拟合;如果选择的样本恰巧都具有锯齿,过分的追求完美拟合,就会把没有锯齿的新树叶不分成树叶,这个就叫过拟合。这两种拟合问题都需要我们想办法去解决。
线性回归的拟合问题:
逻辑回归的拟合问题:
解决过拟合问题:绘制模型曲线,进而选择合适的模型来拟合数据。但是这样并不总是有用,比如有很多变量
x
i
x_i
xi的假设模型,绘图会变得很难(三维画起来都费劲,更被说高维的了),难以可视化,所以需要另寻他法。
1、减少特征数量
- 人工的选择保留哪些特征变量,决定哪些特征更重要
- 借助模型选择算法(之后会讲到),让其自动决定选择那些特征变量
- 缺点:舍弃一些变量,同是也舍弃了问题中的一些信息,比如房价预测时,每个变量都会对房价造成一定影响,现在舍弃一些变量就不合适
2、正则化
- 保留所有特征变量,但是会减小数量级或者参数数值的大小 θ ( j ) \theta(j) θ(j)
- 当特征变量数量多,而且每个变量都会对预测 y y y有影响时,工作情况好(克服了刚才的缺点)
2 代价函数
当我们在代价函数后面加上一部分时,即惩罚(penalize)
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4,此时就需要尽量让
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4接近0,否则代价函数就会很大,这样求得的结果就和二次函数很相近,这也就是正则化大概的思路。
更一般的,对所有的参数进行惩罚,我们就可以得到一个更加简单的假设,对应更加光滑的函数,如此就不容易发生过拟合的问题
具体举例,修改代价函数,加入额外的正则项
λ
∑
j
=
1
n
θ
j
2
\lambda \sum_{j=1}^{n}\theta _{j}^{2}
λ∑j=1nθj2,收缩每个参数(一般不惩罚
θ
0
\theta_0
θ0这个常数)。
λ
\lambda
λ称为正则化参数,它要做的就是控制在两个不同目标之间的平衡关系。
第一个目标,
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\sum_{i=1}^{n}(h_{\theta }(x^{(i)})-y^{(i)})^{2}
∑i=1n(hθ(x(i))−y(i))2,让建立的模型尽可能的拟合训练数据;
第二个目标,
λ
∑
j
=
1
n
θ
j
2
\lambda \sum_{j=1}^{n}\theta _{j}^{2}
λ∑j=1nθj2,保持参数值较小,从而保持假设的的形式相对简单,避免过拟合。
λ
\lambda
λ过大,就会非常过分的惩罚除
θ
0
\theta_0
θ0之外的各个参数,结果就是让他们趋于0,最终的假设就会近似的变成一条水平直线,不会趋向大部分训练样本的任何值,出现欠拟合的问题。之后的多重选择课程,会进一步讲如何利用算法来自动选择合适的正则化参数
λ
\lambda
λ。
最后,吴恩达老师留下了一个问题,正则化参数
λ
\lambda
λ太小或者等于0会怎么样?
我的想法是,如果
λ
\lambda
λ太小,就会对所有参数惩罚力度太小,甚至是不进行惩罚,代价函数就会退化为原有的函数,只留下第一项,
∑
i
=
1
n
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\sum_{i=1}^{n}(h_{\theta }(x^{(i)})-y^{(i)})^{2}
∑i=1n(hθ(x(i))−y(i))2,让建立的模型尽可能的拟合训练数据,这样相当于不对模型建立做任何干预,过拟合的问题根本解决不了,假设函数该凸还是凸,该陡还是陡。
3 正则化(Regularized)线性回归
3.1 梯度下降
由上式很容易看出,
1
−
α
λ
m
<
1
1-\alpha \frac{\lambda }{m}<1
1−αmλ<1,
1
−
α
λ
m
1-\alpha \frac{\lambda }{m}
1−αmλ其实和1相差的并不大。在应用正则化时,实际上就是每次先把
θ
j
\theta_j
θj向0压缩一点点,然后再进行梯度下降,也就是后边那一项。
3.2 正规方程
不可逆问题:
正则化之前,如果训练样本数量
m
m
m<特征数量
n
n
n,那么
X
T
X
X^TX
XTX就是不可逆矩阵,之前提到过,在octave/matlab可以用pinv来求其伪逆(这样效率会比较低),但是这样并不会得到一个很好的假设,正规方程应用的也不会非常好。
正则化时,只要保证正则化参数 λ > 0 \lambda>0 λ>0, X T X + [ 1 2 3 4 5 6 7 8 9 ] X^TX+\left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] XTX+⎣⎡147258369⎦⎤就一定是可逆的,其逆矩阵存在(怎么证明我也不知道)
4 正则化逻辑回归
代价函数:(附加项在方括号外面)
梯度下降:
算法思想仍然相同,但是其中的
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_\theta(x)=\frac{1}{1+e^{-\theta^{T}X}}
hθ(x)=1+e−θTX1。
高级优化算法:
我们需要做的事情和之前类似,还是自定义函数costFunction(theta)
,然后再调用fminunc
来进行梯度下降。
5 参考资料
1、机器学习-第三周