学习达人自我推荐词

交叉验证是在机器学习建立模型囷验证模型参数时常用的办法一般被用于评估一个机器学习模型的表现。更多的情况下我们也用交叉验证来进行模型选择(model selection)。交叉验证顾名思义,就是重复的使用数据把得到的样本数据进行切分,组合为不同的训练集和测试集用训练集来训练模型,用测试集来评估模型预测的好坏在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本即所谓“交叉”。 

  那么什么时候才需要交叉验证呢

交叉验证用在数据不是很充足的时候。如果数据样本量小于一万条我们就会采用交叉验證来训练优化选择模型。如果样本大于一万条的话我们一般随机的把数据分成三份,一份为训练集(Training Set)一份为验证集(Validation Set),最后一份為测试集(Test Set)用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数把最终得到的模型再用于测试集,最終决定使用哪个模型以及对应参数

  回到交叉验证,根据切分的方法不同交叉验证分为下面三种:   

  第一种是简单交叉验證,所谓的简单是和其他交叉验证方法相对而言的。首先我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集)然后用訓练集来训练模型,在测试集上验证模型及参数接着,我们再把样本打乱重新选择训练集和测试集,继续训练数据和检验模型最后峩们选择损失函数评估最优的模型和参数。 

  第二种是S折交叉验证( S-Folder Cross Validation)也是经常会用到的。和第一种方法不同 S折交叉验证先将数據集 D 随机划分为 S 个大小相同的互斥子集,即 D=D1∪D2∪...∪DS Di∩Dj=?(i≠j) 每次随机的选择 S?1 份作为训练集,剩下的1份做测试集当这一轮完成后,重新隨机选择 S?1 份来训练数据若干轮(小于 S )之后,选择损失函数评估最优的模型和参数注意,交叉验证法评估结果的稳定性和保真性在佷大程度上取决于 S 取值

Validation),它是第二种情况的特例此时 S 等于样本数 N ,这样对于 N 个样本每次选择 N?1 个样本来训练数据,留一个样本来驗证模型预测的好坏此方法主要用于样本量非常少的情况,比如对于普通适中问题 N 小于50时,我一般采用留一交叉验证

  通过反复嘚交叉验证,用损失函数来度量得到的模型的好坏最终我们可以得到一个较好的模型。那这三种情况到底我们应该选择哪一种方法呢?一句话总结如果我们只是对数据做一个初步的模型建立,不是要做深入分析的话简单交叉验证就可以了。否则就用S折交叉验证在樣本量少的时候,使用S折交叉验证的特例留一交叉验证

  此外还有一种比较特殊的交叉验证方式,也是用于样本量少的时候叫做自助法(bootstrapping)。比如我们有m个样本(m较小)每次在这m个样本中随机采集一个样本,放入训练集采样完后把样本放回。这样重复采集m次我们得箌m个样本组成的训练集。当然这m个样本中很有可能有重复的样本数据。同时用原始的m个样本做测试集。这样接着进行交叉验证由于峩们的训练集有重复数据,这会改变数据的分布因而训练结果会有估计偏差,因此此种方法不是很常用,除非数据量真的很少比如尛于20个。

使用sklearn库实现交叉验证

# 定义分类器,k近邻选择为5
# 进行交叉验证数据评估, 数据分为5部分, 每次用一部分作为测试集
# 输出5次交叉验证的准确率
 
 
 
 
 
  1. soring:调用的方法;
  2. cv:交叉验证生成器或可迭代的次数;
  3. n_jobs:同时工作的cpu个数(-1代表全部);
  4. fit_params:传递给估计器的拟合方法的参数;
  5. pre_dispatch:控制并行执行期间调度的作业数量减少这个数量对于避免在CPU发送更多作业时CPU内存消耗的扩大是有用的。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信