模型评价方法
假设对于训练样例可能具有较低的误差,但仍然不准确(因为过度拟合)。 因此,为了评估假设,给定训练样例的数据集,我们可以将数据分成两组:训练集和测试集。 通常,培训集由70%的数据组成,测试集为剩余的30%
线性回归
分别使用训练集和数据集计算
- 使用训练数据集,训练得到训练数据集中最小的θ
- 计算测试数据集中测试的误差
如果训练集误差较小,测试集误差较大。我们训练的模型在训练集上市过度拟合的,在测试集上预测性能较差
逻辑回归评价模型方式类似,计算公式有所差异:
J_{test}(\Theta) = \dfrac{1}{2m_{test}} \sum_{i=1}^{m_{test}}(h_\Theta(x^{(i)}_{test}) - y^{(i)}_{test})^2Jtest(Θ)=2mtest1∑i=1mtest(hΘ(xtest(i))−ytest(i))2
err(hΘ(x),y)=10if hΘ(x)≥0.5 and y=0 or hΘ(x)<0.5 and y=1otherwise
Test Error=mtest1∑i=1mtesterr(hΘ(xtest(i)),ytest(i))
通过以下方式对我们的预测中的错误进行了一些故障排除:
1、获得更多培训样本
2、减少特征值3、增加其他的特征值
4、尝试多项式特征
5、增加λ
6、减少λ
多项式特征模型选择
仅仅因为学习算法很适合训练集,这并不意味着它是一个很好的假设。 它可能过于合适,因此你对测试集的预测会很差。 假设您在训练参数的数据集上测量的假设的误差将低于任何其他数据集上的误差。
给定具有不同多项式度数的许多模型,我们可以使用系统方法来确定“最佳”函数。 为了选择假设的模型,您可以测试每个多项式的程度并查看错误结果。
将我们的数据集分解成三组的一种方式是:
训练集:60%
交叉验证集:20%
测试集:20%
现在我们可以使用以下方法为三个不同的集合计算三个单独的错误值:
使用每个多项式的训练集优化Θ中的参数。使用交叉验证集找出具有最小误差的多项式度d。
使用测试集来估计泛化误差测试(d =具有较低误差的多项式的θ);
这样,多项式d的程度尚未使用测试集进行训练。
模型如下:
误差计算公式如下:
偏差和方差
当你运行一个学习算法时 如果这个算法的表现不理想 那么多半是出现 两种情况 要么是偏差比较大 要么是方差比较大
换句话说出现的情况要么是欠拟合 要么是过拟合问题
正则项参数λ选取
随着λ的增加,我们的适应性变得更加严格
另一方面,当λ接近0时,我们倾向于过度拟合数据
那么我们如何选择我们的参数λ来得到它'恰到好处'?为了选择模型和正则化项λ,我们需要:
1、创建一个λ表(即λ∈{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24});
2、创建一系列不同程度的模型或任何其他变体。3、遍历λ并为每个λ遍历所有模型来学习一些ThetaΘ。
4、使用J_ {CV}上的学习Θ(用λ计算)计算交叉验证错误
简历
5(Θ)而没有正则化或λ= 0。选择交叉验证集合中产生最低错误的最佳组合。
6、使用最佳组合Θ和λ,将其应用于J_ {test}测试,J(Θ)看它是否具有很好的问题概括性。
训练集和交叉验证集代价函数曲线如下:
学习曲线
学习曲线就是一种很好的工具检查你的学习算法 运行是否一切正常 或者你希望改进算法的表现或效果
使用学习曲线可以判断某一个学习算法是否处于偏差方差问题 或是二者皆有
高偏差学习曲线(欠拟合)
高偏差的学习曲线即使增大训练集样本量,对于学习效果以及拟合效果并不会有帮助。
需要优化的是假设函数,以便于更好的拟合训练集
高方差学习曲线(过拟合)
高方差曲线可以看出,增大样本量,训练集和交叉验证集的方差逐渐接近,通过增大样本量可以提高拟合的效果
1、获得更多培训样本 适合高方差(过拟合)
2、减少特征值 适合高方差(过拟合)3、增加其他的特征值 适合高偏差(欠拟合)
4、尝试多项式特征 适合高偏差(欠拟合)
5、增加λ 适合高偏差 (欠拟合)
6、减少λ 适合高方差(过拟合)
对于神经网络:
参数较少的神经网络容易出现欠拟合。 它在计算上也更快速便捷。
具有更多参数的大型神经网络容易过度拟合。 它在计算上也很复杂, 在这种情况下,您可以使用正则化(增加λ)来解决过度拟合问题。使用单个隐藏层是一个很好的默认开始, 您可以使用交叉验证集在许多隐藏层上训练您的神经网络, 然后您可以选择性能最好的一个
推荐的解决机器学习问题的方法是:
从一个简单的算法开始,快速实施它,并尽早在交叉验证数据上进行测试。
绘制学习曲线以确定更多数据,更多功能等是否可能有所帮助。
手动检查交叉验证集中的示例错误,并尝试找出发生大多数错误的趋势。
在将错误结果作为单个数值非常重要,否则我们很难判断算法的性能。
不同的错误会有一个错误的概率,这能够帮我们判断是否保留一些功能。我们应该尝试新事物,为我们的错误率获取数值,并根据我们的结果决定是否要保留新功能
分类算法可以通过预测的准确率和召回率判断,理想的算法是召回率和准确率均较高
召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数
准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数
为了提高召回率或者准确率hθ(x)分类的值也就可以根据实际需要进行调整,不一定非要是0.5
但是现实中准确率提高,有时候会降低召回率,为了不同对比算法结果,使用以下公式判断
2P*R/(P+R)