目录
2.1.3 留一法交叉验证(leave-one-out cross validation)
2.1.4 重复随机分段采样(repeated random subsampling)
2.1.5 K-折交叉验证(K-fold cross validation)
3.1.1 positive样本 v.s. negative样本
3.1.2 正确率和错误率(Accuracy & Error Rate)
3.1.3 错误降低率(error rate reduction)
3.5 多分类模型评估(Multiclass evaluation)
4. 模型比较:基线(baselines)和基准(benchmarks)
监督下的分类器学习是将属性映射到类标签上 。
我们训练分类器的目标是泛化:将正确的类别标签分配给从未见过的实例(预测)。
如何确定一个好的分类器?
基本评价指标:准确度
准确度
在很多情况下,这是适用的,但是我们在下面的内容将不仅仅局限于此,本文会给出一些场景,帮助你理解,为什么很多时候的评价指标是远远不够的。
判断题
思考在下面的场景下,的衡量标准是否会失效:
我们现在使用 100 个样本,患癌症的人, 不患癌症的;假设人群中有的人罹患癌症,现在构建了一个模型,预测一个人会不会得癌症,这个模型没有经过任意训练,它也只能输出一个结果,就是。
错:由于患癌症的人在人群中的比例本身就低,用衡量这个模型的精度是没有意义的。如果一个模型预测所有的样本为不患癌症,这个模型的精度也可能达到 90% 甚至更高。
思考下面的场景,描述的是正确的还是错误的?
两个模型在同一个测试集上有相同的,是否代表他们学到了同样程度的信息?
错:即使两个模型的学习程度不同,它们在同一个测试集上也可能得到相同的。
如果两个模型在同一个测试集上有相同的错误模式(即判错的样本是完全重合的)他们是否学到了同样程度的信息?
错:即使一些样本对这两个模型来说都是困难的样本,那也不代表这些困难样本让这两个模型分类错误的原因是相同的,可能第一个模型是因为一部分特征没有学习好而分错,第二个模型因为另外一部分特征没有学习好而分错。
一个模型在一个测试集上比另外一个模型高,是否就代表在另一个测试集上也会同样比另外一个模型高?
第三个问题则更加错误,因为一个测试集上的结果好,一方面可能这个测试集的样本更加有利于第一个模型的学习结果,也有可能第一个模型在某些情况下效果特别好,甚至存在过拟合的情况,那么这个时候如果换一个数据集,其结果未必就比第二个好。
为什么不把数据全部用来训练?
如果你不划分出来测试集,你就没有办法对模型的精度进行验证,进而无法通过参数调整来让模型有更好的表现。
为什么不能用训练的数据来测试?
因为模型正是使用训练样本进行训练,如果测试数据中包含了训练样本,模型的精度会很高,但这是一种欺骗和作弊,这个很高的精度不能代表真实的精度。因此在测试集中绝对不能出现用来训练的样本。
最简单的方法来划分:
只留个样本用来测试,将数据集中的其他所有样本用来训练
适用情况:
留一法交叉验证通常用在数据量比较小的情况下。
原因:
当数据量本来就很小的时候,留出过多的样本测试会导致训练样本缺乏而训练不充分;而且只有数据量小的情况下才能支撑复杂度这么高的运算。
具体描述:
假设数据集中一共有个样本,将个样本作为测试集,剩下的样本作为训练集,训练一个模型。再选择另一个样本作为测试集,其他所有样本作为训练集再训练另外一个模型。如此重复,直到整个数据集中所有的数据都完成这个过程;
这个过程中一共会生成个模型,每个模型都被个训练样本和个测试样本训练和测试过;
将这个模型的精度进行取平均运算,得到的结果就是最终的精度结果。
具体描述:
假设一个数据集有个样本,从样本集合中随机采样出用作训练,另外用作测试,训练一个模型。将这个过程重复次,最终得到了个模型,这个模型的精度均值作为模型的最终精度。
存在的问题:
由于采样是随机的,所以有部分样本可能在训练这个个模型的过程中没有被随机到。就会导致训练样本没有完全充分地利用。
相对于一次性随机划分(random handout)的方法,这种方法也更可靠,但是计算量要大很多,因为要进行多次划分和多个模型的训练。
将数据集均等划分成份,第份作为验证集,剩下份作为训练集,得到第一个模型 ;同样的方法,将这个份中的第份作为验证集,剩下份作为训练集,训练第二个模型, 如此重复,一共训练个模型,而所有的样本也都充分利用了。
一般选择或者;因为太大了对训练很不友好,训练过程太耗时
我们是否应该保持训练集和测试集中的样本类别分布是相同的?
训练和测试数据中的各个类别的样本比例不一样,比如猫狗分类的数据集如果训练集里面有是猫的样本,是狗的样本。而测试集中 是狗的样本,是猫的样本这样就很麻烦,因为这样训练出来的模型在训练集上表现会很差。
让训练和测试集上的数据具有相同的分布。相同的分布的意思就是:每个类占总样本的比例是一样的。
例子:
我们想研究大学生的某些行为,假设全国有 21000000 学生,抽取 4000 个人来进行研究。
通过对这 21000000 学生进行统计后发现:主修英语的学生占12%,主修科学的学生占28%,主修计算机科学的学生占24%,主修工程的学生占21%,主修数学的学生占15%。
因此,为了让 4000 个样本可以代替 21000000 人,我们必须保证随机抽取的 4000 个人中各个学科学生的比例也是:英语的学生占12%,主修科学的学生占28%,主修计算机科学的学生占24%,主修工程的学生占21%,主修数学的学生占15%;
上面这个过程就是一个分层采样的过程,我们按照学科一共采样了 5 个不同的层(类)的学生。
数据训练对于一个模型是重要的,但模型的假设也很重要。
归纳学习假说(Inductive learning hypothesis)
当一个模型经过大量的数据训练后,会对没有见过的样本依然存在泛化性。
但是如果模型的假设是错误的,大量的数据训练之后,决定只能是更加错误的。
例子:
朴素贝叶斯的假设就是:各个属性之间是相互独立的。
如果我们的数据样本由个属性组成,这个属性都是相互独立的,那么在这种情况下我们采用朴素贝叶斯再加上大量的数据支持,最后的预测结果就会非常好。但如果这些属性之间的关联性是比较强的,朴素贝叶斯的假设就与数据本身存在不可调和的根本性问题,这个时候即使用很大量的数据进行训练,最终的结果也会很不好。
归纳偏差(inductive bias)
这一类由于假设错误而导致结果不好的问题我们称为归纳偏差。
因此对于不同的问题和场景,我们应该选择最合适的假设来构建模型。
有些时候,我们不仅需要把数据集切分成训练集和测试集,我们还需要额外切分一个验证集。
验证集可以简单地看做是:训练集的测试集,因为在训练的过程中我们需要根据训练过的阶段性模型在验证机上的精度表现来实时调整模型的参数和超参数从而获得更好的结果或者模型是否收敛
在很多情况下,我们也会不区分验证集和测试集。
前面提到的是我们常用的一个衡量模型优劣的重要指标。
在二分类问题中,我们通常区分正样本和负样本。
假设我们要让我们的模型区分一张图片是 “猫”还是“非猫”,我们不仅要给所有数据中的猫,我们还需要给那些“非猫”的样本;
这个道理其实很简单,想让模型理解什么是 “猫”首先就要告诉他,哪些特征是 “非猫”,因此任何一个分类问题,一定都存在正样本和负样本,在这个猫和非猫的分类问题中,那些的图片就是正样本(positive),的图片就是负样本(negative)
正确率是所有的情况除以样本总数(正负样本都判断正确)
错误率是所有的情况除以样本总数(正样本分类成负样本,负样本分类成正样本的情况)
这是一个用于模型间比较的概念和评估指标。
如果代表现在的模型优于原来的模型,反之则证明现在的模型比原来的模型更差。
在很多情境下是不足以表征模型水平的,例如:
我们已经开发了两种机器学习方法来检测疾病。 我们在个病例中测试了每种算法(其中的人患有这种疾病)。每个模型的准确率都是。
当我们观察表格的时候发现:
将所有病人都预测为没有患疾病,由于本身只有人患了这种疾病,所以的准确度依然很高。
这种情况下使用就不足以表征模型水平了。
针对上面的问题,有两种比和更有意义的衡量指标:
衡量的是:在所有分类器分类出来的阳性样本中,有多少是真正阳性的。
衡量的是:在所有真正为阳性的样本中,有多少被分类器分类成阳性。
:用的是一列计算 。
:用的是一行计算 。
在理想情况下,我们希望和都越接近越好。
:该模型需要大量证据来表示“阳性”(严格),较低的假阴性率。
:该模型不需要太多证据就可以显示“阳性”,较低的假阳性率。
因此我们通过把和结合起来作为一个模型的评估指标也是一种方法:
:的另一个名称——模型能够检测到的真实阳性病例的比例(在所有真正为阳性的样本中,有多少被分类器分类成阳性)。
:模型能够检测到的真实阴性病例的比例。
:用的是第二行计算。
我们把下面这个表格叫做混淆矩阵(cofusion matric):
我们之所以能够画出这个的矩阵,是因为我们处理的二分类问题,把一类看做是样本,另一类是 样本。
那对于多分类的情况下,我们怎么来构成这个混淆矩阵呢?
在这个多分类任务的图表中,我们容易得出结论,那就是这个表格对角线上的值都是他们的 的情况;那其他三种状态的样本跑到哪里了呢?
其实当我们面对多分类的情况,我们只要把其中的一类看做是样本,其他的所有类都看作样本,就可以得到混淆矩阵的数值了。
结合上图来看:
当我们要求以为样本的混淆矩阵的时候,我们把等其他类都看作是的样本,就可以将二分类的混淆矩阵扩展到多分类问题中。这种评估方法也叫 。
接下来我们可以以同样的方法求算所有类的混淆矩阵,并求出每个类的,。然后我们将每个类的和进行求平均,即可得到整个多分类模型的指标。
:对角单元格(正确的分类)的总和除以整个表的总和。
:
计算每个的,并取其平均值。
其中代表了所有的,是第个。
:
将所有实例合并为一个池。
:
计算每个类别的,,并取其平均值,按每个中的实例比例加权。
不同类的样本可能会存在不均衡的情况,因此采用加权平均的方式,样本量大的类别,我们就在计算整体 和 的时候给与更多的权重。
简单的天真方法,我们希望任何机器学习方法都能击败它。
例如:随机猜测。
既定的竞争对手的技术,我们要与之比较我们的方法。
例如:目前在排行榜上表现最好的算法 。
在实践中,人们对这些术语的用法并不严格(两者有时统称为基线)。
举例:
假设一个回归模型 (regression model)的通过训练后的输出数据范围在之间。
:
我们选择一个模型,他只做一件事情,就是随机地给出一个之间的数据作为自己预测的结果。
:
这个模型做的事情则更简单,他每次给出的输出值都是。
计算一下这两个距离真实值到底差多少:
通过计算得到的误差比要小