主要内容

使用并行计算实现交叉验证

简单的并行交叉验证

在这个例子中,使用crossval计算回归模型的交叉验证估计的均方误差。同时在多台计算机上运行。

mypool = parpool()开始parpool使用当地的概要文件…连接到两个工人。mypool =池的属性:AttachedFiles: {0 x1细胞}NumWorkers: 2 IdleTimeout: 30集群:[1 x1 parallel.cluster。当地]RequestQueue: [1 x1平行。RequestQueue] SpmdEnabled: 1
选择= statset (“UseParallel”,真正的);负载(“fisheriris”);y =量(:1);X =[(大小(y, 1), 1),量(:2:4)];regf = @ (XTRAIN ytrain XTEST) (XTEST *回归(ytrain XTRAIN));cvMse = crossval (mse, X, y, Predfun, regf,“选项”,选择)cvMse = 0.1028

这个简单的例子并不适合并行计算:

%在串行计算多久?抽搐;cvMse = crossval (mse, X, y, Predfun, regf); toc运行时间是0.073438秒。%计算并行多久?抽搐,cvMse = crossval (mse, X, y, Predfun, regf,…“选项”,选择);toc运行时间是0.289585秒。

可再生的并行交叉验证

运行crossval并行复制的方式,设置选项和重置适当(见随机流运行的并行计算)。

mypool = parpool()开始parpool使用当地的概要文件…连接到两个工人。mypool =池的属性:AttachedFiles: {0 x1细胞}NumWorkers: 2 IdleTimeout: 30集群:[1 x1 parallel.cluster。当地]RequestQueue: [1 x1平行。RequestQueue] SpmdEnabled: 1s = 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

重置流:

重置(s) cvMse = crossval (mse, X, y, Predfun, regf,“选项”,选择)cvMse = 0.1020