我有一个完整的数据集,可以说是 50000 个观察值,这些观察值分配给 16 个类。我现在想绘制一个样本,假设 70% 的完整数据,但我希望 MATLAB 从每个类中获取相同数量的样本(当然,如果可能,因为某些类的数量少于需要的数量)
是否有可以做到这一点的 MATLAB 函数,还是我必须自己编写一个新函数?我只是想在这里节省时间。
我发现了cvpartition
,但据我所知,这只能用于获取与原始数据集在类上具有相同分布的样本,而不是均匀分布的样本。
谢谢您的帮助!
我有一个完整的数据集,可以说是 50000 个观察值,这些观察值分配给 16 个类。我现在想绘制一个样本,假设 70% 的完整数据,但我希望 MATLAB 从每个类中获取相同数量的样本(当然,如果可能,因为某些类的数量少于需要的数量)
是否有可以做到这一点的 MATLAB 函数,还是我必须自己编写一个新函数?我只是想在这里节省时间。
我发现了cvpartition
,但据我所知,这只能用于获取与原始数据集在类上具有相同分布的样本,而不是均匀分布的样本。
谢谢您的帮助!
应该不会太难。假设观察结果在一个向量中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
,这将告诉它在被选中后替换每个观察值。