随机重排数据点时创建交叉验证索引?

我有一个数据集,其中列对应于特征(预测变量),行对应于数据点。这些数据点是以结构化的方式提取的,即它们是有序的。我将使用Matlab中的crossvalindcvpartition来进行分层交叉验证。

如果我使用上述函数,是否还需要先随机重排数据点(行)?


回答:

这些函数会在内部对数据进行洗牌,正如你在文档中所见

Indices = crossvalind(‘Kfold’, N, K) 返回用于N个观测值的K折交叉验证的随机生成索引。Indices包含等量(或大致等量)的从1到K的整数,这些整数定义了将N个观测值划分为K个不相交子集的分区。重复调用会返回不同的随机生成分区。如果省略,K默认为5。在K折交叉验证中,使用K-1折进行训练,最后一折用于评估。这个过程重复K次,每次留下不同的折用于评估。

然而,如果你的数据在这种意义上是结构化的,即第i个对象包含关于第i+1个对象的一些信息,那么你应该考虑不同的分割方式。例如,如果你的数据实际上是(局部)时间序列,典型的随机交叉验证不是有效的估计技术。为什么?因为如果你的数据实际上包含了群集,其中知道至少一个元素的值,就有很高的概率估计出其余元素的值,那么在应用交叉验证后你最终得到的实际上是预测这些群集内部能力的估计。因此,如果在实际使用你的模型时,你期望得到一个全新的群集——你选择的模型在那里可能是完全随机的。换句话说,如果你的数据具有某种内部群集结构(或时间序列),你的分割应该覆盖这一特征,通过在群集上进行分割(因此你不是进行K个随机点的分割,而是进行K个随机群集的分割,等等)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注