我想使用内置命令“bootstrp”通过 matlab 进行引导。我注意到,当我只要求 N 次迭代时,该过程进行了 N+1 次迭代。这是为什么?当我建立一个手动循环来进行引导时,它实际上只运行 N 次,然后它会更快。这是问题的一个最小示例:
clear all
global iterationcounter
tic
iterationcounter=0;
data=unifrnd(0,1,1,1000); %draw vector of 1000 random numbers
bootstat = bootstrp(100,@testmean,data); %evaluate function for 100 bootstrap samples
toc
使用函数
function [ m ] = testmean( data )
global iterationcounter
m=mean(data);
iterationcounter=iterationcounter+1
end
函数应该评估 100 个样本,但是当我运行脚本时,它将评估函数 101 次:
...
iterationcounter =
101
Elapsed time is 0.102291 seconds.
那么为什么要使用这种看似浪费时间的内置 Matlab 函数呢?
最佳答案
bootstrp
调用 bootfun
(函数参数)进行完整性检查(来自源代码,在 MATLAB 2015b 中,bootstrp.m
, l.167 ff) :
% Sanity check bootfun call and determine dimension and type of result
try
% Get result of bootfun on actual data, force to a row.
bootstat = feval(bootfun,bootargs{:});
bootstat = bootstat(:)';
catch ME
m = message('stats:bootstrp:BadBootFun');
MEboot = MException(m.Identifier,'%s',getString(m));
ME = addCause(ME,MEboot);
rethrow(ME);
end
我认为在一个现实的应用程序中,N>>100
,所以额外的开销(远)小于总运行时间的百分之一(不考虑可能的并行化带来的速度增益) ), 所以这应该没那么重要吧?
关于matlab - 为什么 matlab Bootstrap 评估 N+1 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894224/