模型评估
获取一个数据集并将其拆分为一个训练集和一个单独的测试集,通过计算J-test和J-train可以衡量在测试集和训练集上的表现,系统地评估模型。
有一个小型训练集,此处仅列出了10个示例。可以将训练集拆分为两个子集:将70%的数据放入训练集(trainning set)中,30%的数据放入(test set)中。我们将在前70%的数据上训练模型,然后在测试集上测试他的表现。
模型选择和交叉验证测试集的训练方法
选择最低的成本函数对应的模型,估计这个模型的表现:过度乐观,低于实际的泛化误差。
以上方法我们使用测试集,选择了d=5这个参数,将w5、b5拟合到训练数据中,训练数据将会出现泛化误差的过度乐观估计。
改善以上方法,我们将数据集分为三个子集:训练集、交叉验证集(cross validation)、测试集。
选择具有最低的交叉验证错误对应的模型,最后如果想报告泛化误差的估计值,可以用测试集来评估它。
高偏差与高方差
用给定的数据集拟合一条直线,但是它做得并不好,就称为它有很高的偏差或者说它不适合这个数据集。
如果要拟合一个四阶多项式,那么可能它具有高方差或过度拟合。
如果拟合一个二次多项式,那么可能是刚刚好。
我们需要一种更系统的方式诊断或找出这个算法是否具有高偏差或高方差。
高偏差(high bias):在训练集上表现得不好
J-train is high.
高方差(high variance):在交叉验证集上的表现比训练集要差得多
J-cv 远高于 J-train。
理解:
高偏差与高方差同时发生:有一个非常复杂的模型过度拟合了部分输入数据,但对于部分的训练数据它不能很好地拟合。
正则化
λ如何影响算法的偏差与方差以及整体性能:
制定一个用于性能评估的基准
判断训练错误是否很大,是相对于最终能达到的目标而言。
学习曲线
高偏差:
随着越来越多的训练示例,当拟合简单的线性函数时,模型实际上并没有太大变化,故J-train一段时间后变平。即使得到越来越多的例子,模型太简单了无法适应这么多数据。
当发生高偏差时,增加训练样本数量不会对提高算法准确性有较大的改善。
高方差:
当模型发生高方差时,随着训练数据集的增加,交叉验证数据集的准确性也在增加,逐渐和训练数据集的准确性靠近。
如果学习算法存在高方差,那么获得更多的训练数据可能会有所帮助。
机器学习开发的迭代循环
首先确定系统地整体框架:选择模型以及决定使用哪些数据。然后根据这些选择训练模型,接下来对模型实施诊断。根据诊断结果做出决策,让神经网络更大或者改变正则化参数、增加训练数据或添加添加减少功能。
进行多次迭代,直到达到想要的性能。
机器学习项目的完整周期
机器学习的第一步是确定项目范围以及想要做什么,之后要收集数据,决定你需要什么数据来训练你的机器学习系统。之后就可以开始训练模型了,进行误差分析、收集更多的数据等等,循环这几个步骤直到最终模型足够好。
倾斜数据集的误差指标
有时候,模型准确性并不能评价一个算法的好坏。比如针对癌症筛查算法,根据统计,普通肿瘤中癌症的概率是0.5%。 有一个机器学习算法,测试得出的准确率是 99.2% ,错误率是0.8% 。这个算法到底是好还是坏呢?如果努力改进算法,最终得出的准确率是99.5%,错误率是 0.5% ,模型到底是变好了还是变坏了呢?
如果单纯从模型准确性的指标上很难判断到底是变好了还是变坏了。因为这个事情的先验概率太低了,假如写了一个超级简单的预测函数,总是认为不会得癌症,那么我们这个超级简单的预测函数的准确率是 99 .5 ,错误率是 0.5% 。因为总体而言,只有那 5%真正得癌症的却被我们误判了。
那么怎么样来评价这类问题的模型好坏呢?我们引入了另外两个概念,查准率(Precision)和召回率(Recall)。
实际类与预测类:
当实际类为1,预测类也为1时,我们称之为真阳性(True positive)。当实际类为0,预测类也为0时,我们称之为真阴性(True negative)。当实际类为0,而预测类为1时,称为假阳性(False positive)。当实际类为1,而预测类为0时,称之为假阴性(False negative)。
查准率与召回率:
Precision
=
TruePosition
TruePosition
+
FalsePositive
Recall
=
TruePositive
TruePositive
+
FalseNegative
\begin{gathered} \text { Precision }=\frac{\text { TruePosition }}{\text { TruePosition }+\text { FalsePositive }} \\ \text { Recall }=\frac{\text { TruePositive }}{\text { TruePositive }+\text { FalseNegative }} \end{gathered}
Precision = TruePosition + FalsePositive TruePosition Recall = TruePositive + FalseNegative TruePositive
在处理先验概率低的问题时,我们总是把概率较低的事件定义为1,并且把 y=l 作为Positive 的预测结果。故上述超级简单的预测函数,查准率与召回率都是0,因为他永远无法正确地预测出恶性肿瘤,即True positive永远为0。
查准率与召回率的权衡
高查准率意味着诊断出患有这种罕见疾病的患者可能确实患有它,这是一个准确的诊断。高召回率意味着如果有一个患有这种罕见疾病的患者,算法可能会正确地识别出他们确实患有这种疾病。
如果有一个算法的查准率是0.5,召回率是0.4;另外一个算法查准率是0.02,召回率是1.0;那么两个算法到底哪个好呢?
为了解决这个问题,我们引入了 F1Score 概念:
F
1
Score
=
2
P
R
P
+
R
F_{1} \text { Score }=2 \frac{P R}{P+R}
F1 Score =2P+RPR其中P是查准率,R是召回率。这样就可以用一个数值直接判断哪个算法性能更好。典型地,如果查准率或召回率有一个为0,那么 F1Score 将会为0。而理想的情况下,查准率和召回率都为1,则算出来的F1Score为1。