机器学习的模型评估方法

机器学习的模型评估就是对数据集D进行适当的处理,得到训练集S和测试集T,并在T中对模型进行验证,得到模型的好坏,下面是几种常用的方法:

留出法(hold-out)

  • “留出法”就是将数据集分为两个互斥的集合,一个作为训练集S,另一个作为测试集T,有D = S \bigcup T,S \bigcap T = \emptyset
  • 其中,训练集S用来训练模型,测试集T用于评估模型的误差或精度,即模型的好坏
  • 一般而言,训练集S的比例占数据集D的 2 3 \frac{2}{3} ~ 4 5 \frac{4}{5}
  • 对数据集D划分时,S与T中数据的分布必须与原数据一致,举例来说,如猫狗二分类的任务,若数据集D中猫狗的比例是7 : 3,则在S和T中,猫狗的比例也应该是7 : 3
  • “留出法”较为简单,但存在一些缺陷,主要有两个,一是留出法的验证结果与数据集的划分有关,不同的划分可能会导致不同的误差,导致结果不稳定;另一方面,留出法必须留出一部分数据用于验证,使得训练模型用的数据少于原数据集D,因而可能训练不够充分
  • 对于第一个缺陷,可以用下面的“交叉验证法”解决;对于第二个缺陷,可以用下面的“自助法”解决

交叉验证法(cross validation)

  • “交叉验证法”是将原数据集D划分成k个不相交且大小相同的集合,且每个集合与原数据集同分布,即 D = S 1 S 2 S 3 S k D = S_1 \bigcup S_2 \bigcup S_3\bigcup \dots \bigcup S_k S 1 = S 2 = S 3 = = S k |S_1| = |S_2| = |S_3| = \dots = |S_k| S i S j = ( 1 i , j k ,   i j ) S_i \bigcap S_j = \emptyset(1 \leq i, j \leq k,\ i \neq j )
  • 因此,交叉验证法也称“k折交叉验证”(k-fold cross validation),k常见的取值是10、5、20
  • 交叉验证的具体过程是:在划分好k个集合后,进行k次训练,每一次训练取其中的k-1个集合的并集作为训练集,剩下的集合作为测试集,这样进行k次后,可以得到k个正确率,对它们取平均值,即得到该模型的正确率
  • 交叉验证的优点之一是通过取平均值能够获得较为稳定的结果,但还是会面临训练数据集小于原数据集的问题
  • 交叉验证的一种特殊情况是“留一法”(Leave-One-Out),假设数据集D的大小是n,则将数据集分为n个子集合,每个集合中只有一个元素,每一次的测试集也只有一个元素,训练集有n-1个元素,这样可以缓解训练集数据量减小的问题,但是会导致训练的开销太大(要进行n次训练)

自助法(bootstrapping)

  • 假设数据集为D,大小为m,“自助法”可以获得与数据集大小一样的训练集S,方法是:每次从D中随机抽取一个样本,将其加入S,再将该样本放回数据集D中,这样重复m次,即可得到一个大小为m的集合S,测试集T = D - S
  • 采用“自助法”得到的训练集于原数据集的分布不一致,很可能会包括重复元素
  • 可以简单估计一下S中不同的样本数:对于D中任意的一个元素,其不被抽样到S中的概率是 ( 1 1 m ) m (1-\frac{1}{m})^m lim m + ( 1 1 m ) m = 1 e 0.368 \lim_{m \to +\infty} (1-\frac{1}{m})^m = \frac{1}{e} \approx 0.368 所以S中大概包括D中1-0.368=0.632,即63.2%的元素
  • “自助法”解决了训练集减小的问题,但是数据的分布发生了变化
  • “自助法”一般在数据量较少、难以有效划分训练集和测试集时使用;当数据量足够时,一般采用“留出法”或“交叉验证法”

最终模型

  • 最终的模型会选取在测试集中表现最好的模型,并用整个数据集D重新训练,这才是最终提交给用户的模型
  • 需要注意的是,更多时候会将实际使用中遇到的数据称为测试数据,因此上述的集合T也常称为验证集(validation set)

猜你喜欢

转载自blog.csdn.net/KobeLovesDawn/article/details/86433817