Questions tagged «cross-validation»

在模型拟合期间反复保留数据的子集,以便量化保留的数据子集上的模型性能。


6
k折交叉验证后如何选择预测模型?
我想知道在进行K折交叉验证后如何选择预测模型。 这句话可能有些尴尬,所以让我更详细地解释一下:每当我进行K折交叉验证时,我都会使用K个训练数据子集,最后得到K个不同的模型。 我想知道如何选择K个模型中的一个,以便可以将其呈现给某人并说“这是我们可以生产的最好的模型”。 可以选择K个型号中的任何一个吗?还是涉及某种最佳实践,例如选择实现中位数测试误差的模型?

5
在交叉验证后使用完整数据集进行训练?
在交叉验证后训练整个数据集总是一个好主意吗?换一种说法,它是确定与培训所有在我的数据集的样本,不能够检查这个特定的装置overfits? 问题的一些背景: 假设我有一个由→ α参数化的模型系列。还说我有一组N个数据点,并且我通过k倍交叉验证进行模型选择,以选择最能概括数据的模型。α⃗ α→\vec\alphaNNN 对于模型选择,我可以例如通过对每个候选者进行k倍交叉验证来在上进行搜索(例如,网格搜索)。在每个交叉验证的褶皱的,我结束了学习的模型β α。α⃗ α→\vec\alpha βαβα\beta_\alpha 交叉验证的重点是,对于每个折叠,我都可以通过在“看不见的数据”上进行测试来检查学习的模型是否过拟合。根据结果,我可以选择的型号的参数了解到→交通α最好的网格中的搜索交叉验证过程中广义最好的。βbestβbest\beta_\text{best}α⃗ bestα→best\vec\alpha_\text{best} NNNα⃗ bestα→best\vec\alpha_{best}βfullβfull\beta_{full} βfullβfull\beta_{full} 在任何看不见的数据上。解决此问题的正确方法是什么?

4
K折交叉验证中K的选择
我现在已经多次使用ķķK折交叉验证来评估某些学习算法的性能,但是对于如何选择的值,我一直感到困惑ķķK。 我经常看到并使用的值ķ= 10ķ=10K = 10,但是这对我来说似乎完全是任意的,我现在只是按习惯使用101010而不是仔细考虑。对我来说,随着值的增加,您似乎会获得更好的粒度ķķK,因此理想情况下,您应该将ķķK得很大,但是也有可能会产生偏差。 我想知道的值ķķK应该取决于什么,以及在评估算法时应该如何思考。如果我使用交叉验证的分层版本,是否会有所改变?


3
嵌套交叉验证,用于模型选择
如何使用嵌套交叉验证进行模型选择? 根据我在网上阅读的内容,嵌套的简历的工作方式如下: 在内部CV循环中,我们可以进行网格搜索(例如,对每种可用模型进行K折运算,例如,超参数/功能的组合) 在外部CV循环中,我们在一个单独的外部折叠中测量在内部折叠中获胜的模型的性能。 在此过程结束时,我们得到模型(是外部循环中的折叠数)。这些模型是在内部CV的网格搜索中获胜的模型,并且它们可能是不同的(例如,具有不同内核的SVM,根据网格搜索而训练有可能具有不同的功能)。KKKKKK 如何从此输出中选择模型?在我看来,从这获胜的模型中选择最佳模型并不是一个公平的比较,因为每个模型都是在数据集的不同部分进行训练和测试的。KKK 那么如何使用嵌套的简历进行模型选择呢? 我也阅读了一些有关讨论嵌套模型选择对分析学习过程如何有用的话题。我从外部K折中得到的分数可以进行哪些类型的分析/检查?

7
留一法与K折交叉验证的偏差和方差
在模型方差和偏差方面,不同的交叉验证方法如何比较? 我的问题部分源于此线程:折交叉验证中的最佳折叠数:留一法CV始终是最佳选择吗?ķKK ķ。那里的答案表明,通过留一法交叉验证学习的模型具有比通过常规倍交叉验证法学习的模型更高的方差,这使得留一法CV成为较差的选择。ķKK 但是,我的直觉告诉我,在留一式CV中,模型之间的方差应该比折CV 中的方差小,因为我们仅跨折移动一个数据点,因此折之间的训练集实质上重叠。ķKK 或朝另一个方向发展,如果折CV 中的较低,则训练集的折折将完全不同,并且所得的模型更有可能不同(因此方差更高)。 ķķKKķKK 如果上述论点是正确的,为什么用留一法CV学习的模型会有更高的方差?


3
特征选择和交叉验证
我最近在这个站点(@ Aniko,@ Dikran Marsupial,@ Erik)和其他地方阅读了很多有关交叉验证时出现过拟合问题的信息-(Smialowski等人2010 Bioinformatics,Hastie,统计学习元素)。建议是,在使用交叉验证(或其他模型估计方法,例如自举)的模型性能估计之外执行的任何监督特征选择(使用与类标签的相关性)都可能导致过度拟合。 这对我来说似乎并不直观-当然,如果选择一个功能集,然后使用交叉验证仅使用选定的功能评估模型,那么您将获得对这些功能的广义模型性能的无偏估计(假设所研究的样本具有代表性)人口)? 通过此过程,当然不能要求一个最佳功能集,但可以将未看到的数据上所选功能集的性能报告为有效吗? 我接受基于整个数据集选择功能可能会导致测试集和训练集之间的数据泄漏。但是,如果在初始选择之后功能部件集是静态的,并且没有进行其他调整,那么报告交叉验证的性能指标是否有效? 就我而言,我有56个要素和259个案例,因此#cases> #features。这些特征来自传感器数据。 抱歉,我的问题似乎是派生的,但这似乎是需要澄清的重要点。 编辑: 在上面详细描述的数据集上通过交叉验证实现特征选择(由于下面的答案),我可以确认在此数据集中交叉验证之前选择特征引入了重要意义偏压。与2类配方相比,这种偏倚/过度拟合对于3类配方而言最大。我认为我使用逐步回归进行特征选择的事实加剧了这种过度拟合的现象。为了进行比较,在另一个但相关的数据集上,我将交叉验证之前执行的顺序正向特征选择例程与我先前在CV中使用特征选择所获得的结果进行了比较。两种方法之间的结果没有显着差异。这可能意味着逐步回归比顺序FS更容易过度拟合,或者可能是此数据集的怪癖。

6
在机器学习中执行交叉验证时为“最终”模型选择特征
我对功能选择和机器学习有些困惑,我想知道您是否可以帮助我。我有一个微阵列数据集,该数据集分为两组并具有1000多个特征。我的目标是获得签名中的少量基因(我的特征)(10-20个),从理论上讲,我可以将其应用于其他数据集以对这些样本进行最佳分类。由于我没有那么多样本(<100),因此我没有使用测试和训练集,而是使用了留一法交叉验证来确定稳健性。我读过,应该对样本的每一部分进行特征选择,即 选择一个样本作为测试集 在其余样本上执行特征选择 使用所选功能将机器学习算法应用于剩余样本 测试测试集是否正确分类 转到1。 如果这样做,您每次可能会获得不同的基因,那么如何获得“最终”最优基因分类器呢?即第6步是什么。 我的意思是最理想的是任何进一步研究都应使用的基因集合。例如,假设我有一个癌症/正常数据集,我想找到将根据SVM对肿瘤类型进行分类的前10个基因。我想知道可以在进一步实验中使用的基因集和SVM参数,以查看其是否可以用作诊断测试。

5
使用k折交叉验证进行时序模型选择
问题: 我想确定一点,使用带有时间序列的k折叠交叉验证是否简单明了,还是在使用它之前需要特别注意? 背景: 我正在建模一个6年的时间序列(使用半马尔可夫链),每5分钟有一个数据样本。为了比较多个模型,我使用了6倍交叉验证,即通过分离6年中的数据,所以我的训练集(用于计算参数)的长度为5年,而测试集的长度为1年。我没有考虑时间顺序,因此我的不同设置是: fold 1:训练[1 2 3 4 5],测试[6] 第二折:训练[1 2 3 4 6],测试[5] 第三折:训练[1 2 3 5 6],测试[4] 第四步:训练[1 2 4 5 6],测试[3] 第五步:训练[1 3 4 5 6],测试[2] 第六步:训练[2 3 4 5 6],测试[1]。 我提出的假设是,每年彼此独立。我该如何验证?有没有参考资料显示k倍交叉验证与时间序列的适用性。

1
如何分割数据集以进行交叉验证,学习曲线和最终评估?
分割数据集的合适策略是什么? 我要求反馈对以下方法(不是像个别参数test_size或n_iter,但如果我用X,y,X_train,y_train,X_test,和y_test适当的,如果顺序是有道理的): (从scikit-learn文档扩展此示例) 1.加载数据集 from sklearn.datasets import load_digits digits = load_digits() X, y = digits.data, digits.target 2.分为训练和测试集(例如80/20) from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) 3.选择估算器 from sklearn.svm import SVC estimator = SVC(kernel='linear') 4.选择交叉验证迭代器 from sklearn.cross_validation import ShuffleSplit cv = ShuffleSplit(X_train.shape[0], n_iter=10, test_size=0.2, random_state=0) 5.调整超参数 …


8
如何帮助确保测试数据不会泄漏到训练数据中?
假设我们有一个人建立了预测模型,但是不一定有人对适当的统计或机器学习原理很精通。也许我们正在帮助那个人在学习中,或者那个人正在使用某种需要最少知识的软件包。 现在,这个人可能会很好地认识到真正的测试来自样本外数据的准确性(或其他任何度量标准)。但是,我担心的是,这里有很多微妙的问题要担心。在简单的情况下,他们建立模型并根据训练数据对其进行评估,并根据保留的测试数据对其进行评估。不幸的是,有时返回该位置并调整一些建模参数并检查相同“测试”数据的结果有时太容易了。此时,数据不再是真正的样本外数据,过拟合可能会成为问题。 解决此问题的一种可能方法是建议创建许多样本外数据集,以使每个测试数据集在使用后都可以丢弃,而根本无法再使用。但是,这需要大量的数据管理,尤其是必须在分析之前完成拆分(因此,您需要事先知道有多少拆分)。 也许更常规的方法是k倍交叉验证。但是,从某种意义上讲,我认为“训练”和“测试”数据集之间的区别会消失,特别是对于那些仍在学习的人。同样,我也不认为这对所有类型的预测模型都有意义。 有什么方法可以被我忽略,以帮助克服过度安装和测试泄漏的问题,同时仍然对没有经验的用户保持一定的了解?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.