0

我有一个完整的数据集,可以说是 50000 个观察值,这些观察值分配给 16 个类。我现在想绘制一个样本,假设 70% 的完整数据,但我希望 MATLAB 从每个类中获取相同数量的样本(当然,如果可能,因为某些类的数量少于需要的数量)

是否有可以做到这一点的 MATLAB 函数,还是我必须自己编写一个新函数?我只是想在这里节省时间。

我发现了cvpartition,但据我所知,这只能用于获取与原始数据集在类上具有相同分布的样本,而不是均匀分布的样本。

谢谢您的帮助!

4

1 回答 1

0

应该不会太难。假设观察结果在一个向量中observations。然后你可以做

fraction = 0.7;

classes = unique(observations);
nObs = length(observations);
nClasses = length(classes);
nSamples = round(nObs * fraction / nClasses);

for ii = 1:nClasses
    idx = observations == classes(ii);
    samples((ii-1)*nSamples+1:ii*nSamples) = randsample(observations(idx), nSamples);
end

现在samples是一个长度向量,nClasses * nsamples其中包含您的采样观测值,每个类别的数量相同。

目前,如果其中一个类不包含至少nSamples观察值,它将失败。最简单的解决方法是在'replace','true'对 的调用中添加额外的参数randsample,这将告诉它在被选中后替换每个观察值。

于 2013-03-27T10:52:40.697 回答