【问题标题】:Randomly rearranging data points when creating cross-validation indices?创建交叉验证索引时随机重新排列数据点?
【发布时间】:2016-06-27 01:11:00
【问题描述】:

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

如果我使用上面的功能,我还需要先随机重新排列数据点(行)吗?

【问题讨论】:

  • 不,crossvalindcvpartition 将为您随机打乱您的数据。如果您阅读每一页文档的开头,则会出现 random 一词。

标签: matlab machine-learning cross-validation


【解决方案1】:

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

Indices = crossvalind('Kfold', N, K) 返回随机生成的索引,用于对 N 个观测值进行 K 折交叉验证。索引包含整数 1 到 K 的相等(或近似相等)比例,这些整数将 N 个观测值划分为 K 个不相交的子集。 重复调用会返回不同的随机生成的分区。 K 在省略时默认为 5。在 K 折交叉验证中,K-1 折用于训练,最后一个折用于评估。这个过程重复K次,每次都留下一个不同的折叠进行评估。

但是,如果您的数据在这个意义上是结构化的,那么该对象 i 有一些关于对象 i+1 的信息,那么您应该考虑不同类型的拆分。例如 - 如果您的数据实际上是(本地)时间序列,则典型的随机 cv 不是有效的估计技术。为什么?因为如果您的数据实际上包含集群,其中知道至少一个元素的值 - 给您估计剩余元素的高概率,那么在应用 CV 后您最终将获得的实际上是对这样做的能力的估计 - 预测 在这些集群中。因此,如果在您的模型的实际实际使用中,您希望获得全新的集群 - 您选择的模型可以在那里完全随机。换句话说 - 如果您的数据具有某种内部集群结构(或时间序列),您的拆分应该通过拆分集群来涵盖此功能(因此,您有 K 个随机集群拆分,而不是 K 个随机点拆分,依此类推)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 2018-09-03
    • 2020-08-03
    • 2019-09-15
    • 2017-05-21
    • 2019-01-18
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多