使用并行计算实施交叉验证
简单平行交叉验证
在此示例中,使用杂交
计算回归模型的于点误差的交叉验证估计。并行运行计算。
mypool = parpool()使用“本地”配置文件...连接到2位工人。mypool =带有属性的池:actactedfiles:{0x1 cell} numworkers:2 idletimeout:30 cluster:[1x1 Parallel.Cluster.Cluster.local] requestSuequequequequequequequequequequequequequeue:[1x1 Parallel.RequeStequeue] spmenabled:1
opts = statset('useparallel',true);负载('Fisheriris');y = meas(:,1);x = [hons(size(y,1),1),mes(:,2:4)];regf =@(xtrain,ytrain,xtest)(xtest*recress(ytrain,xtrain));cvmse = crossVal('MSE',x,y,'prepfun',regf,'options',opts)cvmse = 0.1028
这个简单的示例不是并行计算的好候选者:
%在串行中计算多长时间?tic; cvmse = crossVal('mse',x,y,'predfun',regf); toc经过的时间为0.073438秒。%平行计算多长时间?tic; cvmse = crossVal('mse',x,y,'predfun',regf,...'options',opts); toc过去的时间为0.289585秒。
可重复的平行交叉验证
跑步杂交
以可重复的方式并行,设置选项并适当地重置随机流(请参阅运行可重现的并行计算)。
mypool = parpool()使用“本地”配置文件...连接到2位工人。mypool =带有属性的池:actactedfiles:{0x1 cell}数字工人:2 idletimeout:30 cluster:[1x1 Parallel.Cluster.local] requestSuequequequequequequequequequeue:[1x1 Parallel.RequeStqueSqueue] spmenabled:1 s = randstream('mlfgg63331_64''mlfgg63331_64'');opts = statset('useparallel',true,...'streams',s,'useubstreams',true);负载('Fisheriris');y = meas(:,1);x = [hons(size(y,1),1),mes(:,2:4)];regf =@(xtrain,ytrain,xtest)(xtest*recress(ytrain,xtrain));CVMSE = CrossVal('MSE',X,Y,'Predfun',regf,'options',opts)cvmse = 0.1020
重置流:
重置(S)CVMSE = CrossVal('MSE',X,Y,'Predfun',regf,'options',opts)cvmse = 0.1020