【问题标题】:MATLAB: Taking sample with same number of values from each classMATLAB:从每个类中抽取具有相同数量值的样本
【发布时间】:2013-03-27 10:16:34
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

标签: matlab statistics distribution sampling


【解决方案1】:

应该不会太难。假设观察结果位于向量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 的调用中,这将告诉它在被选中后替换每个观察值。

【讨论】:

  • 谢谢,为我节省了一些思考时间 :-) 我只是想也许有一个内置的 Matlab 函数可以做到这一点....BR,Mischa
猜你喜欢
  • 2021-01-20
  • 2023-04-07
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 2021-03-10
  • 2022-11-28
相关资源
最近更新 更多