经验误差、泛化误差、测试误差
经验误差,也叫训练误差,在训练集上的误差,与之对应的是泛化误差(generalization error,在新样本上的误差)。评估一个好的模型显然是泛化误差最小。但是实际上事先并不知道新样本是什么,所以实际能做的是最小化经验误差。
经验误差也不能完全决定模型的泛化误差,会存在过拟合现象。书中简单说明了过拟合现象是各种学习算法不可避免的问题,只有“减缓”。这里简单了解了NP-hard问题。
在评估过程中需要使用一个测试集,使用测试集上的测试误差作为泛化误差的近似。
所以需要将数据集D划分为训练集S和测试集T,有两种方法:留出法、交叉验证法、自助法(bootstrapping)。
留出法:尽可能保证S和T的数据分布一致,比如分类任务中,保证每类样本数目比例相似;多次划分,取平均;常见是2/3~4/5作为训练集,剩余作为测试集。
交叉验证:先将D划分为k个大小相似的互斥子集,同样每个子集数据分布一致,然后选其中的k-1个作为训练集,剩下1个作为测试集。k常用的取值为10,称为10折交叉验证(10-fold cross validation);与留出法类似,可以多次划分,取平均。
留出法和交叉验证法 由于预留一部分样本作为测试,实际评估的模型使用的训练集比D小,必然会因为训练样本规模不同引入估计偏差。
自助法:适用与小数据集。设D中有m个样本,从中有放回的取m次,产生的数据集D'作为S。D'中会有部分重复样本,且D中一部分样本在D'中没出现。D'中没出现的样本作为测试集T。
自助法 产生的训练集改变了初始数据集的分布,也会引入估计偏差。
NP-hard问题
链接:https://www.zhihu.com/question/27039635/answer/101730260
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最简单的解释:
P:算起来很快的问题
NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案对不对
NP-hard:比所有的NP问题都难的问题
NP-complete:满足两点:
1. 是NP hard的问题
2. 是NP问题
接下来是比较严谨的定义:
问题:对于一个包含由0和1组成的字符串集合S,以某个01字符串x作为输入,要求某个图灵机判断x在不在S里面。这里的图灵机可以先想象成平时我们用的计算机,S也可以被看成我们要解决的问题。注意我们的问题非常简单,就是要判断某个字符串x是否在某个集合S里面,下面是定义:
P:有一个图灵机在多项式时间内能够判断x是否在S里面
NP:有一个图灵机M,如果某个字符串x在S里面,那么存在一个验证字符串u(注意这个u是针对这个x的,而且长度必须是x长度的多项式
关系),M以x和u作为输入,能够验证x真的是在S里面。
NP-hard:如果某个问题S是NP-hard,那么对于任意一个NP问题,我们都可以把这个NP问题在多项式时间之内转化为S,并且原问题的答案和转化后S的答案是相同的。也就是说只要我们解决了S,那么就解决了所有的NP问题。
NP-complete:一个问题既是NP-hard,又在NP里面;也就是说
1. 解决了这个问题我们就解决了所有NP问题
2. 这个问题本身也是个NP问题