bootstrap 用于集成学习的 Matlab 数据集

bootstrap a dataset in Matlab for Ensemble Learning

我有两个矩阵 X (122 x 125973) 和 Y (1 x 125973)。我想对我要在其中创建 B 观察(例如 B = 3)的数据集执行 bootstrapping。据我了解,大小 B 的观察值应该随机抽取并替换 。我怎样才能以相同的方式将 XY 分成更小的观察 bootstrap 个样本?

randi() 使您能够绘制伪随机整数,包括重复项。这些可以用作您观察的索引。因此:

X = rand(122,125973);
Y = rand(1,125973);
m = 3; % Your desired number of observations; maximum 125973
idx = randi(numel(Y),m,1) % Generate an mx1 vector
BX = X(:,idx); % 122xm matrix
BY = Y(:,idx);  % 1xm matrix

您也可以从 XY 中删除条目,但由于您说过明确允许重复条目,因此其用法可能不相关:

X(:,idx) = [];  % [] sets to empty array, thus removes the entry

如果你想要多次m观察,只需循环它:

N = 100;  % Number of observation matrices to be generated
m = 3; % Number of observations per matrix
X = rand(122,125973);
Y = rand(1,125973);
BX = rand(size(X,1),m,N);  % 3D matrix for collection
BY = rand(size(X,1),m,N);

for ii = 1:N  % Loop over all matrices to be generated
    idx = randi(numel(Y),m,1) % Generate an mx1 vector
    BX(:,:,ii) = X(:, idx); % 122xmxN matrix
    BY(:,:,ii) = Y(:, idx);  % 1xmxN matrix
end

BXBY 现在是包含 N 个矩阵的 3D 矩阵,每个矩阵具有 m 个观测值。调用 BX(:,:,n) 选择 n 具有观测值的矩阵。要阅读各种索引方式,我建议阅读 this post.