cross validation 交叉验证

本文探讨了交叉验证在机器学习领域的应用及其优化方法,包括k-folder cross-validation, K*2-folder cross-validation, 和 least-one-out cross-validation等不同类型的交叉验证策略。文章详细解释了每种方法的工作原理、优点和局限性,并强调了如何避免过拟合和欠拟合,以提高模型的泛化能力。

在pattern recognition与machine learning的相关研究中,经常会将dataset分为training跟test这两个subsets,前者用以建立model,后者则用来评估该model对未知样本进行预测时的精确度,正规的说法是generalization ability。

交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。

基本思想是先在一个子集上做分析, 用其它子集用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证可以评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize)。



交叉验证需要满足的条件


1)训练集的比例要足够多,一般大于一半

2)训练集和测试集从完整集合中均匀取样

均匀取样的目的是希望减少training/test set与完整集合之间的偏差(bias),但却也不易做到。一般的作法是随机样,当样本数量足够时,便可达到均匀取样的效果。然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组training set与test set,直到test set的辨识率满意为止,但严格来说这样便算是作弊了。



交叉验证主要分成以下几类:

1)k-folder cross-validation:

分割为k个子集,每个子集均做一次测试集,其余的作为训练集。交叉验证重复k次,将k次的平均交叉验证识别正确率作为结果。

优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。

2)K * 2 folder cross-validation

是k-folder cross-validation的一个变体,对每一个folder,都平均分成两个集合s0,s1,我们先在集合s0训练用s1测试,然后用s1训练s0测试。

优点是:测试和训练集都足够大,每一个个样本都被作为训练集和测试集。一般使用k=10

3)least-one-out cross-validation(loocv)

假设dataset中有n个样本,那LOOCV也就是n-CV,意思是每个样本单独作为一次测试集,剩余n-1个样本则做为训练集。
优点:
1)每一回合中几乎所有的样本皆用于训练model,因此最接近母体样本的分布,估测所得的generalization error比较可靠。
2)实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
但LOOCV的缺点则是计算成本高,为需要建立的models数量与总样本数量相同,当总样本数量相当多时,LOOCV在实作上便有困难,除非每次训练model的速度很快,或是可以用平行化计算减少计算所需的时间。


十折交叉验证10-fold cross validation


10-fold cross-validation用来测试算法准确性,是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。
之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。
### 交叉验证Cross-Validation)的概念 交叉验证是一种统计方法,广泛应用于机器学习中,用于评估模型的性能和泛化能力。其基本思想是将原始数据集在某种意义下进行分组,一部分用于训练模型(训练集),另一部分用于测试模型(验证集)。通过多次训练和验证,可以更全面地评估模型在未知数据上的表现,从而帮助防止过拟合或欠拟合现象的发生 [^1]。 交叉验证的核心在于数据的重复划分与模型的多次训练与评估。这种方法可以有效减少单一训练-测试划分可能带来的偏差,使得模型评估更加稳定和可靠 [^2]。 ### 交叉验证在模型评估中的应用 在实际模型评估中,交叉验证被广泛用于以下几个方面: 1. **性能评估**:通过多次划分数据集并计算平均性能指标(如准确率、F1分数等),可以更准确地估计模型在未知数据上的表现。例如,k 折交叉验证(k-Fold Cross-Validation)是最常见的方法之一,它将数据集划分为 k 个子集,每次使用其中一个子集作为验证集,其余 k-1 个子集作为训练集,最终取 k 次结果的平均值作为模型性能的估计 [^3]。 2. **超参数调优**:交叉验证可以与网格搜索(Grid Search)或随机搜索(Random Search)结合使用,以寻找最优的模型超参数组合。通过在不同参数组合下进行交叉验证,可以找到在验证集上表现最佳的参数设置。 3. **模型选择**:在多个候选模型之间进行比较时,交叉验证提供了一种公平的评估方式。不同模型在相同的数据划分和评估标准下进行比较,确保了评估结果的客观性。 4. **数据利用最大化**:当数据量较少时,交叉验证可以充分利用所有数据进行训练和验证,避免因数据划分不当而导致的性能波动。 以下是一个使用 Python 的 `scikit-learn` 库实现 5 折交叉验证的示例: ```python from sklearn.model_selection import cross_val_score from sklearn.svm import SVC from sklearn.datasets import load_digits # 加载手写数字数据集 X, y = load_digits(return_X_y=True) # 使用支持向量机分类器进行 5 折交叉验证 model = SVC(kernel='linear') scores = cross_val_score(model, X, y, cv=5) # 输出每次交叉验证的准确率及平均准确率 print("每次交叉验证的准确率:", scores) print("平均准确率(估计的泛化误差): {:.4f}".format(scores.mean())) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值