在使用学习算法解决机器学习问题时,可能预测函数的误差很小,但是这个学习算法不确定是不是准确的,因为可能出现过拟合的情况。
因为仅仅用一个训练集来判断学习算法是否准确是不行的,为此我们需要将原始数据集拆分成三个:
- 训练集 (Training set) 占60%
- 交叉验证集 (Cross validation set) 占20%
- 测试集 (Test set) 占20%
学习模型的选择
例如在线性回归问题中,训练集有一个特征值,在选择模型时,选择几次项:
1 .
2 .
3 .
...
10 .
首先分成三个样本集:
训练集:
交叉验证集:
测试集:
分开的三个样本集上的误差:
选择模型的步骤:
- 将上面十个模型在训练集上优化每个模型的参数
;
- 在交叉验证集上找出一个误差最小的模型;
- 在测试集上用
来估计泛化误差。
这样的操作是的测试集与训练集,交叉验证集完全分离开,互不影响。在测试集上的泛化误差比较准确。
偏差(Bias)和方差(Variance)
当一个算法在使用时并不理想,会有两种情况,高偏差(欠拟合)或高方差(过拟合)。
还是上面的线性回归例子。通过选择不同模型,比较它们在训练集和交叉验证集上的表现结果:
上图中,x轴是多项式的次数,可以看作是函数的复杂程度,y轴是代价函数的值。
在训练集上:当函数简单时,代价函数值很大,预测函数效果不好,随着多项式的增加,函数复杂度的增加,拟合效果越来越小,代价趋向于零。
在交叉验证集上:当函数简单时,代价函数值很大,预测函数效果不好,多项式在增加到一定程度前,代价一直在下降,当下降到一定程度是,代价函数又会上升,拟合效果又变差了。
高偏差(Bias):和
都很高,而且两者非常接近,
高方差(Variance):很小,
远远大于
在实际使用时,需要在中间找一个平衡点,避免高偏差和高方差
正则化
通过正则化能够解决过拟合的问题,但是它在欠拟合也就是高偏差情况下效果并不明显。
上面的线性回归例子,选择一个模型:
它的正则化后的代价函数:
PS: 上面的定义里面没有加上正则化,所以上面的训练集,交叉验证集,测试集都是在没有正则化的情况的误差
现在我们要做的是先选择一系列的值,比如:
0, 0.01, 0.02, 0.04, 0.08, 0.16, 0.32, 0.64, 1.28, 2.56, 5.12, 10.24
通过正则化得出优化的参数。
然后使用这些优化参数得出
注意,这里的误差都没有加上正则化项目
比较每个值下的代价函数的曲线:
在训练集上: 随着的增大,代价函数的值越来越大,效果越来越差。
在交叉验证集上: 先随着在一定范围下增大,代价函数的值在减小,超过一个程度后,代价函数会增大。
当为0,或很小时,是高方差;当
过大时,是高偏差。
同样的需要找一个使得代价函数在训练集和交叉验证集上平衡的。
学习曲线(Learning Curves)
画出随着样本集数量的增加,代价函数的值的变化曲线。
训练集和交叉验证集的误差:
当样本集数量很少时,训练集的误差很小,因为两三个样本总能够用一个直线达到不错的拟合效果,但是在交叉验证集上体现的并不好。
随着样本数量的增大,训练集的误差增大,而在交叉验证集上的体现会改善,误差会减小。
高偏差
在高偏差情况下,随着样本数量的增大,训练集和验证集的误差趋向于相等,但是都会偏高,与预期效果不符。
高方差
在高方差下,随着样本增加,训练集的误差会增加,但是增加的幅度很小;在验证集上,误差会减小,但是仍然大于训练集误差。
可以看出,在高方差下,增加样本数量会有助于算法的优化。但是在高偏差下,增加样本数量并没有多少用处。
通过以上方法,在解决机器学习问题中,有以下方法可以帮助优化算法:
- 获取更多样本:优化高方差
- 减少特征值的数量:优化高方差
- 添加特征值:优化高偏差
- 添加多项式次数,复杂的预测函数:优化高偏差
- 减小
:解决高偏差
- 增加
:解决高方差
转载自:
https://codeeper.com/2020/01/26/tech/machine_learning/evaluating_learning_algorithm.html