Questions tagged «cross-validation»

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

2
如果我们只对建模感兴趣,而对预测不感兴趣,则正则化功能会有所帮助吗?
如果我们仅对估计(和解释)模型参数感兴趣,而对预测或预测不感兴趣,则正则化功能会有所帮助吗? 如果您的目标是对新数据做出良好的预测,我将看到正则化/交叉验证非常有用。但是,如果您正在做传统经济学,而您所关心的只是估计呢?在这种情况下,交叉验证是否也有用?我在概念上遇到的困难是,我们实际上可以在测试数据上计算,但我们永远无法计算因为根据定义,从未观察到真实的。(假设存在一个真实的,即我们知道从中生成数据的模型族。)ββ\beta大号( ÿ,Y^)大号(ÿ,ÿ^)\mathcal{L}\left(Y, \hat{Y}\right)大号( β,β^)大号(β,β^)\mathcal{L}\left(\beta, \hat{\beta}\right)ββ\betaββ\beta 假设您的损失是。您将面临偏差方差的折衷,对吗?因此,从理论上讲,您最好进行一些正则化。但是,如何选择正则化参数呢?大号( β,β^) = ∥ β-β^∥大号(β,β^)=‖β-β^‖\mathcal{L}\left(\beta, \hat{\beta}\right) = \lVert \beta - \hat{\beta} \rVert 我很高兴看到一个线性回归模型的简单数值示例,其系数为β≡ (β1个,β2,… ,βķ)β≡(β1个,β2,…,βķ)\beta \equiv (\beta_1, \beta_2, \ldots, \beta_k),其中研究人员的损失函数为∥ β- β^∥‖β-β^‖\lVert \beta - \hat{\beta} \rVert,或什至(β1个- β^1个)2(β1个-β^1个)2(\beta_1 - \hat{\beta}_1)^2。在实践中,如何在这些示例中使用交叉验证来改善预期损失? 编辑:约翰逊(DJohnson)将我指向https://www.cs.cornell.edu/home/kleinber/aer15-prediction.pdf,与该问题相关。作者写道 机器学习技术...提供了一种预测\ hat {Y}的有条理的方法, ÿ^ÿ^\hat{Y}该方法(i)使用数据本身来决定如何进行偏差方差的权衡,并且(ii)可以搜索非常丰富的变量和函数形式。但是,一切都是有代价的:必须始终牢记,因为它们针对\ hat {Y}进行了调整,所以它们ÿ^ÿ^\hat{Y} (在没有其他许多假设的情况下)不会为\ hat {\ beta}提供非常有用的保证β^β^\hat{\beta}。 再次感谢DJohnson,这是另一篇相关论文:http ://arxiv.org/pdf/1504.01132v3.pdf 。本文解决了我在上面遇到的问题: 将现成的回归树等机器学习方法应用于因果推理问题的一个根本挑战是,基于交叉验证的正则化方法通常依赖于观察“基本事实”,即实际结果在交叉验证样本中。但是,如果我们的目标是最小化治疗效果的均方误差,则会遇到[11]所说的“因果推理的基本问题”:没有观察到因果关系的任何个体,因此我们不会直接有一个基本的事实。我们通过提出用于构建治疗因果效应的均方误差的无偏估计的方法来解决此问题。

1
基于交叉验证(CV)的预测间隔
在课本和youtube讲座中,我学到了很多关于诸如boosting之类的迭代模型的知识,但是我从未见过关于推导预测间隔的任何知识。 交叉验证用于以下目的: 型号选择:尝试不同的型号,然后选择最合适的型号。如果是升压,请使用CV选择调整参数。 模型评估:估算所选模型的性能 几个参数对于模型评估很重要,其中之一是预期的预测误差。交叉验证可以很好地估计预测误差,正如《统计学习的要素》一书中所述。 但是,我们如何使用预期的预测误差来建立预测间隔? 例如,如果您预测房屋价格,则500.000欧元房屋的预测间隔将比200.000欧元房屋的预测间隔高。我们如何使用交叉验证来估计这些预测间隔?

2
贝叶斯模型中交叉验证的稳定性
我正在使用k倍交叉验证(k = 5)在JAGS中拟合贝叶斯HLM。我想知道参数估计值在所有折叠中是否稳定。最好的方法是什么?ββ\beta 一种想法是找到后代的差异,并查看差异的95%CI是否为0。换句话说,在的95%间隔中为0 (然后对所有对折重复)。ββ\betaβk=1−βk=2βk=1−βk=2\beta_{k=1}-\beta_{k=2} 另一个想法是将来自每个褶皱的后代视为不同的MCMC链,并计算这些伪链上的Gelman的(势能缩减因子)。R^R^\hat{R} 其中之一是可取的,还有替代品吗?

6
对数据集样本进行超参数调整不是一个好主意吗?
我有一个包含140000个示例和30个功能的数据集,我正在为其训练几个分类器以进行二进制分类(SVM,逻辑回归,随机森林等) 在许多情况下,使用网格搜索或随机搜索对整个数据集进行超参数调整在时间上过于昂贵。 我开始使用以下技术 子样本我的数据集 使用获得的分数来调整超参数 使用获得的参数来使用整个数据集训练模型 为了评估在第二步骤I使用每组参数sklearn的GridSearchCV与CV = 10。为了评估在第三步中创建的最终模型,我使用sklearn的cross_val_predict。从这种意义上来说,我评估模型时会遗漏10%的数据,然后对其余模型进行训练,然后对10%的预测准确性进行迭代10次,然后取平均分数。 让我担心的是,我在整个数据集上进行训练所获得的预测准确性确实接近我为最佳参数集调整参数时所获得的评估(每组经过测试的参数均输出通过平均10-交叉验证结果)。 在大多数情况下,cross_val_predict使用所有训练示例(整个数据集)测得的准确性略高于返回的最佳参数评估值。 为了说明这一点,这里是对一组参数的评估(在比我上面描述的更小的数据集上,但是效果是相同的) Best parameters set found on development set: {'kernel': 'rbf', 'C': 9, 'gamma': 0.1} Scores for all sets of parameters 0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5} 0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1} 0.829 …

4
为什么将数据分为训练和测试集还不够
我知道,为了访问分类器的性能,我必须将数据分为训练/测试集。但是读这个: 在评估估算器的不同设置(“超参数”)(例如必须为SVM手动设置的C设置)时,仍然存在测试集过拟合的风险,因为可以对参数进行调整,直到估算器达到最佳性能为止。这样,有关测试集的知识可以“渗入”模型,并且评估指标不再报告泛化性能。为了解决此问题,可以将数据集的另一部分保留为所谓的“验证集”:对训练集进行训练,然后对验证集进行评估,以及实验何时成功,可以对测试集进行最终评估。 我看到引入了另一个(第三个)验证集,这是通过在超参数调整期间对测试集进行过度拟合来证明的。 问题是我无法理解这种过度拟合的外观,因此无法理解第三组的合理性。

1
LOOCV公式的证明
根据James等人的《统计学习入门》,留一法交叉验证(LOOCV)估计值定义为 其中。CV(n)=1n∑i=1nMSEiCV(n)=1n∑i=1nMSEi\text{CV}_{(n)} = \dfrac{1}{n}\sum\limits_{i=1}^{n}\text{MSE}_iMSEi=(yi−y^i)2MSEi=(yi−y^i)2\text{MSE}_i = (y_i-\hat{y}_i)^2 没有证据,方程式(5.2)指出,对于最小二乘或多项式回归(我是否只适用于仅对一个变量进行回归), 其中“为在从原来的最小二乘个拟合值拟合(不知道的方式这意味着什么,,它使用意味着所有数据集?点)和是杠杆作用”,这是由定义ÿ我我CV(n)=1n∑i=1n(yi−y^i1−hi)2CV(n)=1n∑i=1n(yi−y^i1−hi)2\text{CV}_{(n)} = \dfrac{1}{n}\sum\limits_{i=1}^{n}\left(\dfrac{y_i - \hat{y}_i}{1-h_i}\right)^2y^iy^i\hat{y}_iiiihihih_ihi=1n+(xi−x¯)2∑j=1n(xj−x¯)2.hi=1n+(xi−x¯)2∑j=1n(xj−x¯)2.h_i = \dfrac{1}{n}+\dfrac{(x_i - \bar{x})^2}{\sum\limits_{j=1}^{n}(x_j - \bar{x})^2}\text{.} 如何证明这一点? 我的尝试:首先可以注意到 但分开由此(如果我还记得,公式仅适用于简单的线性回归...),我不确定如何从此处继续。ħ我y^i=β0+∑i=1kβkXk+some polynomial terms of degree ≥2y^i=β0+∑i=1kβkXk+some polynomial terms of degree ≥2\hat{y}_i = \beta_0 + \sum\limits_{i=1}^{k}\beta_k X_k + \text{some polynomial terms of degree }\geq 2hihih_i


5
cv.glmnet结果的可变性
我cv.glmnet用来查找预测变量。我使用的设置如下: lassoResults&lt;-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold) bestlambda&lt;-lassoResults$lambda.min results&lt;-predict(lassoResults,s=bestlambda,type="coefficients") choicePred&lt;-rownames(results)[which(results !=0)] 为了确保结果是可重复我set.seed(1)。结果变化很大。我运行了完全相同的代码100,以查看结果的可变性。在98/100次运行中,总是选择一个特定的预测变量(有时仅靠预测变量);选择其他预测变量(系数非零)通常为50/100次。 因此对我来说,每次交叉验证运行时,都可能会选择一个不同的最佳lambda,因为折叠的初始随机性很重要。其他人已经看到了这个问题(CV.glmnet结果),但是没有建议的解决方案。 我在想,一个显示98/100的图像可能与所有其他图像高度相关吗?如果我只是运行LOOCV(),结果的确稳定,但是我很好奇为什么当时它们是如此可变。fold-size=nfold-size=n\text{fold-size} = nnfold&lt;nnfold&lt;n\text{nfold} < n


2
我们应该重复几次K折简历?
我遇到了这个线程,研究了引导和交叉验证之间的区别-很好的答案和参考。我现在想知道的是,如果要执行重复的10倍CV运算以计算分类器的准确性,我应该重复n次? n是否取决于折数?关于样本量?有什么规定吗? (就我而言,我的样本多达5000个,如果我选择的值大于n = 20,则我的计算机将花费很长时间进行计算。)

1
我们可以使用留一法的均值和标准差来显示离群值吗?
假设我有正态分布的数据。对于数据的每个元素,我想检查它远离均值有多少SD。数据中可能有一个异常值(可能只有一个异常值,也可能是两个或三个),但是这个异常值基本上就是我要寻找的。从均值和标准差的计算中暂时排除我当前正在查看的元素是否有意义?我的想法是,如果它接近平均值,则不会产生任何影响。如果是离群值,则可能会影响均值和SD的计算,并降低检测到均值的可能性。我不是统计学家,因此不胜感激!

4
交叉验证和参数调整
谁能告诉我交叉验证分析给出的确切结果吗?它仅仅是平均精度,还是可以提供参数经过调整的任何模型? 因为,我在某处听说交叉验证用于参数调整。

5
查找SVM最佳元参数的快速方法(比网格搜索更快)
我正在使用SVM模型对空气污染物进行短期预测。要训​​练新模型,我需要为SVM模型找到合适的元参数(我的意思是C,γ等)。 Libsvm文档(以及我已阅读的许多其他书籍)建议使用网格搜索来找到这些参数-因此,我基本上从特定集中为这些参数的每种组合训练模型,然后选择最佳模型。 有没有找到最佳(或接近最佳)元参数的更好方法?对我来说,这主要是计算时间的问题-对这个问题进行一次网格搜索大约需要两个小时(在我做了一些优化之后)。 网格搜索的优点: 它可以很容易地并行化-如果您有20个CPU,它将运行快20倍,并行化其他方法则更加困难 您检查了元参数空间的大部分,因此,如果有一个好的解决方案,您将找到它。

2
为什么要使用普拉特的缩放比例?
为了将置信度水平校准为监督学习中的概率(例如使用过采样的数据从SVM或决策树映射置信度),一种方法是使用Platt的定标(例如,从Boosting获取校准的概率)。 基本上,人们使用逻辑回归将映射到。因变量是真实标签,预测变量是未校准模型的置信度。我不理解的是使用目标变量而不是1或0。该方法需要创建一个新的“标签”:[−∞;∞][−∞;∞][-\infty;\infty][0;1][0;1][0;1] 为了避免过度拟合S型火车,使用了样本外模型。如果训练集中有正例和负例,则对于每个训练例,普拉特校准将使用目标值和y _-(分别为1和0),其中 y _ + = \ frac {N_ + +1} {N _ ++ 2}; \ quad \ quad y _- = \ frac {1} {N _- + 2} N+N+N_+N−N−N_-y+y+y_+y−y−y_-y+=N++1N++2;y−=1N−+2y+=N++1N++2;y−=1N−+2 y_+=\frac{N_++1}{N_++2};\quad\quad y_-=\frac{1}{N_-+2} 我不明白的是这个新目标是如何有用的。逻辑回归不只是将因变量视为二进制标签(与给出的标签无关)吗? 更新: 我发现,在SAS中,将依赖项从更改为其他值会还原为同一模型(使用)。也许是我的错误,或者是SAS缺乏通用性。我能够在R中更改模型。例如:1/01/01/0PROC GENMOD data(ToothGrowth) attach(ToothGrowth) # 1/0 coding dep &lt;- ifelse(supp == "VC", 1, 0) …

3
如何在嵌套交叉验证中获取超级参数?
我已经阅读了以下有关嵌套交叉验证的文章,但仍然不确定100%如何使用嵌套交叉验证进行模型选择: 嵌套交叉验证,用于模型选择 模型选择和交叉验证:正确的方法 为了解释我的困惑,让我尝试逐步使用嵌套交叉验证方法进行模型选择。 使用K折创建外部CV循环。这将用于估计“赢得”每个内部CV循环的超参数的性能。 使用GridSearchCV创建一个内部CV循环,在每个内部循环中,GSCV都会遍历参数空间的所有可能组合,并提供最佳的参数集。 GSCV在内部循环中找到最佳参数后,将使用外部循环中的测试集对其进行测试,以获得性能评估。 然后,外循环更新为测试集的下一个折叠,其余的更新为训练集,并重复1-3次。总共可能的“获胜”参数是在外循环中指定的折数。因此,如果外部循环是5倍,那么您将对具有5组不同的超参数的算法进行性能评估,而不是一组特定的超参数的性能。 SKLearn的示例页面上说明了这种方法:http ://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html 问题:4 . 之后,您如何确定哪些超级参数效果最佳?我知道您想使用最后的COMPLETE数据来训练算法(例如逻辑回归,随机森林等)。但是,如何确定哪些超级参数在嵌套交叉验证中效果最好?我的理解是,对于每个内部循环,一组不同的超参数将获胜。对于外循环,您正在评估GridSearchCV的性能,但没有任何一组特定的超参数。因此,在最终的模型创建中,您如何知道要使用哪些超参数?那是我从其他方面难以理解的缺失逻辑。 预先感谢您提供任何提示,尤其是如果@Dikran Marsupial和@cbeleites可以发出提示音! 编辑:如果可以的话,请在回答中使用“算法”和“超级参数”之类的术语。我认为让我感到困惑的一个原因是人们使用术语“模型”或“模型选择”。无论他们是在谈论选择使用哪种算法还是使用哪些超级参数,我都感到困惑。 编辑2:我创建了一个笔记本,其中显示了两种进行嵌套交叉验证的方法。第一种方法是SKLearn示例中显示的方法,另一种较长的方法是我编写的方法。SKLearn中显示的方法没有公开“获胜”的超参数,但我的较长方法却没有。但是问题仍然是一样的。完成嵌套交叉验证后,即使暴露了超参数,我现在该怎么办?从笔记本末尾的超参数可以看出,它们之间的差异很大。

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.