机器学习之划分数据集

目录

转载自:

数据拟合中的训练集,测试集,验证集

实际项目中的数据集划分

训练集和测试集的划分方法

留出法

交叉验证法

自助法(BootStrapping) 


转载自:

https://blog.csdn.net/c369624808/article/details/78408047

数据拟合中的训练集,测试集,验证集

训练集(Training Set):用来训练模型,简单的说就是通过训练集的数据让我们确定拟合曲线的参数。 

验证集(Validation Set):用来做模型选择(model selection),即做模型的最终优化及确定的,用来辅助我们的模型的构建,可选; 

测试集(Test Set): 用来测试已经训练好的模型的精确度。测试集测试的目标: 尽可能检验已经训练号的模型的精确度和健壮性。当然,测试集数据的选择要格外的“精心”,以求来更好的检查模型各个的拟合参数的准确度。

实际项目中的数据集划分

但实际应用中,一般只将数据集分成两类,即训练集Training set 和测试集Test set

训练集和测试集的划分方法

留出法

留出法的意思是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个集合作为测试集T,即D=S∪TD=S∪T,S∩T=∅S∩T=∅。在S上训练出模型后,用T来评估其误差。

注意:

  • 训练/测试集的划分均要均有代表性,均匀分布
  • 二者的样本的类别比例相似不应相差太大。例如从1000个数据里,分层采样获得70%样本的训练集S和30%样本的测试集T,若D包含500个正例,500个反例,则分层采样得到的S应包含350个正例,350个反例,T应包含150个正例,150个反例;若S、T中样本比例差别很大,则最终拟合的误差将会变大。
  • 一般,在用留出法划分集合的时候,会通过若干次随机划分、重复实验评估后取平均值作为留出法的评估结果,减少误差。
  • 训练集和测试集应该按照什么比例来划分呢?这个问题没有完美的解决方案,常见的做法是将大约2/3~4/5的样本用于训练

交叉验证法

         ”交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j)D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j)。每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的子集作为测试集;这样就可以获得k组训练/测试集,从而可以进行k次训练和测试,最终返回的是k个测试结果的均值。 

          显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为了强调这一点,通常把交叉验证法称为”k折交叉验证”(k-fold cross validation),k通常取10—10折交叉验证。 
           交叉验证的好处就是从有限的数据中尽可能挖掘多的信息,从各种角度去学习我们现有的有限的数据,避免出现局部的极值。在这个过程中无论是训练样本还是测试样本都得到了尽可能多的学习。(By 知乎 张戎 交叉验证简介
  交叉验证法的缺点就是,当数据集比较大时,训练模型的开销较大。

自助法(BootStrapping) 

         我们当然想用手头所有的数据来训练模型了,这样才能更好的拟合,留出法和交叉验证法都将保留了部分数据用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。 

         自助法是一个比较好的解决方案。给定m个样本的数据集D,我们对它进行采样产生数据集D′D′,每次随机从D中挑选一个样本,将其拷贝到D′D′,这个过程执行m次后,我们就得到了包含m个样本的数据集D′D′。显然,D中有部分样本会在D′D′中多次出现。做个简单的估计,样本在m次采样中始终不被采到的概率是(1−1m)m(1−1m)m,取极限为 

                            limx→∞(1−1m)m=1e≈0.368limx→∞(1−1m)m=1e≈0.368
          即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样集D′D′里。于是 ,实际评估的模型与期望评估的模型都是使用m个样本,而我们仍有数据总量约1/3的没在训练集出现过的样本用于测试。 

          自助法在数据集较小、难以有效划分训练/测试集时比较有用。然而自助法产生的测试集改变了初始数据集的分布,这会引入误差,因此在数据集比较大时,采用留出法和交叉验证法较好。
 

猜你喜欢

转载自blog.csdn.net/wodeyijia911/article/details/85091681