Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:从每个类中取相同数量的值作为样本_Matlab_Statistics_Distribution_Sampling - Fatal编程技术网

MATLAB:从每个类中取相同数量的值作为样本

MATLAB:从每个类中取相同数量的值作为样本,matlab,statistics,distribution,sampling,Matlab,Statistics,Distribution,Sampling,我有一个完整的数据集,比如说50000个观测值,分配给16个类。 现在我想从全部数据中抽取一个样本,比如说70%,但我希望MATLAB从每个类中抽取相同数量的样本(当然,如果可能的话,因为有些类的数量少于需要的数量) 是否有一个MATLAB函数可以做到这一点,或者我必须为自己编写一个新的?我只是想在这里节省时间 我发现了cvpartition,但据我所知,这只能用于获取与原始数据集在类上的分布相同的样本,而不是均匀分布的样本 谢谢你的帮助 这不应该太难。假设观测值是向量观测值。那你就可以了 fr

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

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

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


谢谢你的帮助

这不应该太难。假设观测值是向量
观测值
。那你就可以了

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
观察值,则它将失败。最简单的解决方法是在调用
randsample
时添加额外的参数
'replace'、'true'
,这将告诉它在拾取后替换每个观察值。

对于小组,您可能希望对每个值进行多次采样。至少这会让你得到每组相同数量的观察结果。可能重复的谢谢,节省了我一些思考时间:-)我只是想也许有一个内置的Matlab函数可以做到这一点