gpt4 book ai didi

matlab - 如何在 matlab 中非随机地将数据拆分为 k 折?

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:52 27 4
gpt4 key购买 nike

我有一个数据集,为简单起见,假设它有 1000 个样本(每个样本都是一个向量)。

我想拆分我的数据以进行交叉验证、训练和测试,不是随机1,例如,如果我想要 4 折交叉验证,我应该得到:

fold1: train = 1:250;测试= 251:1000
fold2: train = 251:500, test = [1:250 ; 501:1000]
fold3:train = 501:750, test = [1:500; 751:1000]
fold4:train = 751:1000,test = 1:750

我知道 CVPARTITION ,但是 AFAIK - 它随机拆分数据 - 这不是我需要的。

我想我可以为它编写代码,但我认为可能有一个函数我可以使用。


(1) 数据已经打乱,我需要能够轻松地重现实验。

最佳答案

这是一个通用的函数:

function [test, train] = kfolds(data, k)

n = size(data,1);

test{k,1} = [];
train{k,1} = [];

chunk = floor(n/k);

test{1} = data(1:chunk,:);
train{1} = data(chunk+1:end,:);

for f = 2:k
test{f} = data((f-1)*chunk+1:(f)*chunk,:);
train{f} = [data(1:(f-1)*chunk,:); data(f*chunk+1:end, :)];
end
end

它不是一个优雅的 1 衬里,但它相当健壮,不需要 k 作为样本数量的一个因素,在 2D 矩阵上工作并输出实际集合而不是索引.

关于matlab - 如何在 matlab 中非随机地将数据拆分为 k 折?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com