python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

一、当模型预测未知数据效果误差巨大时,解决方法?

当我们用已经训练好的模型来预测未知数据发现巨大误差时,下一步要做的改进模型的方法通常有六种:

1.获得更多的训练样本----解决高方差

2.尝试减少特征的数量----解决高方差

3.尝试获得更多的特征----解决高偏差

4.尝试增加多项式特征----解决高偏差

5.尝试减少归一化程度λ----解决高偏差

6.尝试增加归一化程度λ----解决高方差

因此,当模型预测发现巨大误差,我们首先要判断误差原因是高偏差还是高方差即模型欠拟合还是过拟合,下面是涉及到的相关知识的学习记录。

二、高偏差和高方差(欠拟合和过拟合)问题

1、偏差-方差窘境

对算法的泛化误差进行拆解:

学习算法的泛化误差为:python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

噪声期望为0,泛化误差可分解为偏差、方差和噪声之和。通常偏差方差是冲突的,即偏差-方差窘境。模型训练不足(多项式次数过少)学习器拟合能力不强,此时偏差主导了泛化错误率;当模型训练程度充足之后,模型拟合能力极强,训练数据集特有的非全局的特性被学习器学到,产生过拟合,泛化误差与方差偏差的关系如下:

python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】最上面一条为泛化误差,训练程度也可以用‘多项式的次数’表示。

2、偏差-方差诊断

(绘制交叉验证误差与训练误差关系图)交叉验证集误差与训练误差相近时,为高偏差/欠拟合;交叉验证误差远远大于训练误差时,为高方差/过拟合。

三、正则化(规则化)

此处只做简单说明,更详细讲解参考博文 机器学习中的范数规则化之(一)L0、L1与L2范数

规则化符合奥卡姆剃刀(Occam's razor)原理:在所有可能选择的模型中,应该选择能够很好地解释已知数据并且十分简单的模型。从贝叶斯估计的角度来看,规则化项对应于模型的先验概率。还有个说法就是,规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)λ。

在训练模型的过程中,我们通常会用规则化方法(L2正则)防止过拟合,但是规则化程度过低、过高仍会存在过拟合、欠拟合问题,选择适合的λ,我们选择一系列想要测试的λ值,通常为0-10之间呈现2倍关系的值(0、0.01、0.02、0.04、0.08、0.16、0.32、0.64、1.28、2.56、5.12、10),随着λ增加,训练误差不断增加,交叉验证误差先减小后增加,我们要找的就是交叉验证误差最小点。步骤:

(1)使用12个不同的λ训练12个不同规则化的模型

(2)12个模型分别对交叉验证集酸茶交叉验证误差

(3)选择出交叉验证误差最小的模型,对测试集计算得出推广误差。

四、学习曲线

学习曲线是对一个学习算法一个很好的合理检验,我们经常使用学习曲线判断一个算法是否处于偏差、方差问题。

python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】python机器学习---模型选择3【欠拟合(高偏差)、过拟合(高方差)以及相关模型改善方法和建议】

可以看到,在高偏差条件下:增加训练数据量不一定有用;在高方差条件下:增加训练数据量可能可以提高算法效果。

 

参考

1.吴恩达机器学习视频

2.《机器学习》----周志华

3.机器学习中的范数规则化之(一)L0、L1与L2范数