主要内容

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

简单平行交叉验证

在本例中,使用crossval计算回归模型均方误差的交叉验证估计。并行地运行计算。

mypool = parpool()使用'local'配置文件启动parpool…连接2个工人。mypool = Pool with properties: AttachedFiles: {0x1 cell} NumWorkers: 2 IdleTimeout: 30 Cluster: [1x1 parallel.cluster. properties]本地]RequestQueue: [1x1 parallel.]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,'Options',opts) cvMse = 0.1028

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

串行计算需要多长时间?cvMse = crossval('mse',X,y,'Predfun',regf);toc运行时间为0.073438秒。并行计算需要多长时间?抽搐,cvMse = crossval (mse, X, y, Predfun, regf,…运行时间为0.289585秒。

可重复平行交叉验证

运行crossval以可复制的方式并行地设置选项并适当地重置随机流(参见运行可重复并行计算).

mypool = parpool()使用'local'配置文件启动parpool…连接2个工人。mypool = Pool with properties: AttachedFiles: {0x1 cell} NumWorkers: 2 IdleTimeout: 30 Cluster: [1x1 parallel.cluster. properties]本地]RequestQueue: [1x1 parallel.]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

重置流:

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