如何从Matlab中的数据集中选择随机样本[重复]

Posted

技术标签:

【中文标题】如何从Matlab中的数据集中选择随机样本[重复]【英文标题】:How to select random samples from a dataset in Matlab [duplicate] 【发布时间】:2012-11-16 05:22:24 【问题描述】:

可能重复:How do I randomly select k points from N points in MATLAB?

假设我有一个包含 10,000 行数据的数据集。创建包含 1,000 个随机选择的行的子集的最佳方法是什么?

【问题讨论】:

【参考方案1】:

你可以使用 randperm 来完成这个任务:

无放回抽样:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randperm(nRows); 

newSample = data(rndIDX(1:nSample), :); 

带放回抽样:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randi(nRows, nSample, 1); 

newSample = data(rndIDX, :); 

【讨论】:

你能举一个不更换抽样的例子吗?谢谢! @robguinness:其实这个例子是无放回抽样。 好的,这是有道理的,现在我阅读了 randperm 的文档。因此,对于带有替换的采样,我会使用需要使用 randi 来代替? @robguinness:是的,它是randi 用于替换采样。我应该在我的答案中添加一个代码示例吗? 我看到你已经这样做了,谢谢!顺便说一句,我最终在我的代码中使用了统计工具箱中的 randsample,但我认为您的答案对那些没有该工具箱的人很有用。此外,它们基本上用相同的代码行数做同样的事情。【参考方案2】:

如果你有统计工具箱R2012+,可以使用datasample。

subset = datasample(data,1000)

subset 将是由 1000 个样本组成的随机选择的数据子集。

要在不更换的情况下进行采样,请使用:

subset = datasample(data,1000,'Replace',false)

如果你有旧版本的工具箱,可以使用randsample:

rndIdx = randsample(size(data,1),1000,true); % with replacement
subset = samples(rndIdx(1:1000), :);

rndIdx = randsample(size(data,1),1000,false); % without replacement
subset = samples(rndIdx(1:1000), :);

但使用 randsample 与 H.Muster 的答案或多或少相同(我认为这是最好的,因为它不需要任何工具箱)。

注意:有关更多信息 带放回抽样与不带放样之间的区别 替换,见this page。

【讨论】:

【参考方案3】:

randperm 与行数结合使用。如果x 是您的矩阵:

nrows = size(x,1);
nrand = 1000; % Choose 1000 rows
assert(nrand<=nrows, 'You cannot choose more rows than exist in the matrix');
rand_rows = randperm(nrows, nrand);
xx = x(rand_rows,:);  % Select the random rows from x

【讨论】:

【参考方案4】:

不确定到目前为止您是否编写过任何代码。以下mathworks 链接显示了随机抽样的示例。看看它的想法。

这里还有一个来自统计工具箱的带有 randsample 的代码。只是一个逻辑,你可能需要相应地调整它。

N 行的矩阵 m 从 m 中抽取 n 行的随机样本

Sample = m(randsample(1:N,n),:)

randsample(1:N,n)

上面的结果是从 1 到 N 的 n 个随机整数序列。

【讨论】:

以上是关于如何从Matlab中的数据集中选择随机样本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从查询结果中选择随机结果样本

随机森林和Adaboost的对比

如何在不替换的情况下随机抽取样本后引导函数

如何根据概率密度函数生成随机数

随机森林和adaboost的区别

如何从 Erlang/Elixir 中的 ets 集中选择一个随机元素?