Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Implemente bootstrap utilizando la computación paralela

Bootstrap en serie y paralelo

Aquí está un ejemplo que cronometra un bootstrap en paralelo versus en serial. En el ejemplo se generan datos a partir de una mezcla de dos Gaussianos, se construye una estimación no paramétrica de los datos resultantes y se utiliza un arranque para obtener una idea de la variabilidad del muestreo.

  1. Genere los datos:

    % Generate a random sample of size 1000, % from a mixture of two Gaussian distributions  x = [randn(700,1); 4 + 2*randn(300,1)];
  2. Construya una estimación no paramétrica de la densidad a partir de los datos:

    latt = -4:0.01:12; myfun = @(X) ksdensity(X,latt);  pdfestimate = myfun(x);
  3. Arranque la estimación para obtener una idea de su variabilidad de muestreo. Ejecute el bootstrap en serie para la comparación de temporización.

    tic;B = bootstrp(200,myfun,x);toc  Elapsed time is 10.878654 seconds.
  4. Ejecute el bootstrap en paralelo para la comparación de temporización:

    mypool = parpool() Starting parpool using the 'local' profile ... connected to 2 workers.  mypool =     Pool with properties:      AttachedFiles: {0x1 cell}        NumWorkers: 2       IdleTimeout: 30           Cluster: [1x1 parallel.cluster.Local]      RequestQueue: [1x1 parallel.RequestQueue]       SpmdEnabled: 1 
    opt = statset('UseParallel',true); tic;B = bootstrp(200,myfun,x,'Options',opt);toc  Elapsed time is 6.304077 seconds.

    La computación en paralelo es casi el doble de rápida que la computación en serie para este ejemplo.

Superponer la estimación de densidad con las estimaciones bootstrapped 200 obtenidas en el arranque paralelo.ksdensity Puede obtener una idea de cómo evaluar la precisión de la estimación de densidad de esta gráfica.

hold on for i=1:size(B,1),     plot(latt,B(i,:),'c:') end plot(latt,pdfestimate); xlabel('x');ylabel('Density estimate')

Reproducible Parallel bootstrap

Para ejecutar el ejemplo en paralelo de forma reproducible, establezca las opciones correctamente (consulte).Ejecución de cálculos paralelos reproducibles Primero configure el problema y el entorno paralelo como en.Bootstrap en serie y paralelo A continuación, establezca las opciones para usar subsecuencias junto con una secuencia que admita subsecuencias.

s = RandStream('mlfg6331_64'); % has substreams opts = statset('UseParallel',true,...     'Streams',s,'UseSubstreams',true); B2 = bootstrp(200,myfun,x,'Options',opts);

Para volver a ejecutar el bootstrap y obtener el mismo resultado:

reset(s) % set the stream to initial state B3 = bootstrp(200,myfun,x,'Options',opts); isequal(B2,B3) % check if same results  ans =      1