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 la validación cruzada mediante la computación paralela

Validación cruzada paralela simple

Este ejemplo es el mismo que el primero en la página de referencia de función, pero se ejecuta en paralelo.crossval

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: 1opts = statset('UseParallel',true);  
load('fisheriris'); y = meas(:,1); X = [ones(size(y,1),1),meas(:,2:4)]; regf=@(XTRAIN,ytrain,XTEST)(XTEST*regress(ytrain,XTRAIN));  cvMse = crossval('mse',X,y,'Predfun',regf,'Options',opts)  cvMse =      0.1028 

Este sencillo ejemplo no es un buen candidato para el cómputo paralelo:

% How long to compute in serial? tic;cvMse = crossval('mse',X,y,'Predfun',regf);toc Elapsed time is 0.073438 seconds.  % How long to compute in parallel? tic;cvMse = crossval('mse',X,y,'Predfun',regf,...     'Options',opts);toc Elapsed time is 0.289585 seconds.

Validación cruzada paralela reproducible

Para ejecutarse en paralelo de una manera reproducible, establezca las opciones y restablezca la secuencia aleatoria apropiadamente (consulte).crossvalEjecución de cálculos paralelos reproducibles

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  s = RandStream('mlfg6331_64'); opts = statset('UseParallel',true,...     'Streams',s,'UseSubstreams',true);  load('fisheriris'); y = meas(:,1); X = [ones(size(y,1),1),meas(:,2:4)]; regf=@(XTRAIN,ytrain,XTEST)(XTEST*regress(ytrain,XTRAIN));  cvMse = crossval('mse',X,y,'Predfun',regf,'Options',opts)  cvMse =      0.1020

Restablezca el flujo:

reset(s) cvMse = crossval('mse',X,y,'Predfun',regf,'Options',opts)  cvMse =      0.1020