天天看点

5折交叉验证_机器学习干货交叉验证(Cross Validation)详解

5折交叉验证_机器学习干货交叉验证(Cross Validation)详解

如果感兴趣,欢迎点击上方“关注”,点击右下角「在看」分享给身边好友!

交叉验证也称为循环估计,是统计上将数据样本切割成较小集合的使用方法,由Seymour Geisser提出。

交叉验证应用场景主要在模型训练中,在给定的样本空间中,拿出大部分样本作为训练集,小部分样本使用刚建立的模型进行测试,并求这小部分样本的预测误差或者预测精度,同时记录它们的加和平均值,这个过程迭代K次,即K折交叉。把每个样本的预测误差平方加和,称为预测误差。

交叉验证的目的

  • 从有限的学习数据中获取尽可能多的有效信息;
  • 交叉验证从多个方向开始学习样本的,可以有效地避免陷入局部最小值;
  • 可以在一定程度上避免过拟合问题;

常见的交叉验证形式

简单交叉验证:将原始数据随机分为两组,一组作为训练集,一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率的性能指标。

一般来说,简单交叉验证并非一种交叉验证,因为数据并没有交叉使用。随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当作训练数据。一般来说,少于原本样本三分之一的数据被选做验证数据。

优点:好处的处理简单,只需随机把原始数据分为两组即可!

缺点:严格意义来说简单交叉验证并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机地将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性!

K-fold交叉验证:初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。

优点:K-CV可以有效地避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。

留一验证:意指只使用原本样本中的一项来当作验证资料,而剩余的则留下来当作训练资料。这个步骤一直持续到每个样本都被当作一次验证资料。事实上,这等同于K-fold交叉验证是一样的,其中K为原本样本个数。在某些情况下是存在有效率的演算法,如使用kernel regression和Tikhonov regularization

验证方法选择

到底应该选择哪一种方法呢?其实很简单,如果我们只是对数据做一个初步的模型建立,不是要做深入分析的话,简单交叉验证就可以,否则就用k折交叉验证,在样本量少的时候,使用留一交叉验证。

以KFold进行案例分析

from sklearn.datasets import load_irisfrom sklearn.model_selection import StratifiedKFold,cross_val_scorefrom sklearn.linear_model import LogisticRegression iris = load_iris() print('Iris labels:\n{}'.format(iris.target)) logreg = LogisticRegression() strKFold = StratifiedKFold(n_splits=3,shuffle=False,random_state=0) scores = cross_val_score(logreg,iris.data,iris.target,cv=strKFold) print("straitified cross validation scores:{}".format(scores)) print("Mean score of straitified cross validation:{:.2f}".format(scores.mean()))
           

继续阅读