主要内容

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

简单的平行交叉验证

在这个例子中,使用横梁计算回归模型的平均误差的交叉验证估计。并行运行计算。

mypool = parpool()使用“本地”配置文件启动Parpool ...连接到2名工人。MyPool =具有属性的池:连接文件:{0x1 Cell} NumWorkers:2 idletimeout:30群集:[1x1 parallel.cluster.local] cenceletqueue:[1x1 parallel.requestqueue] spmded:1
opts = statset('deverpecallellel',true);加载('渔业');Y = MEAS(:,1);x = [尺寸(尺寸(y,1),1),meas(:,2:4)];Regf = @(xtrain,ytrain,xtest)(xtest * forgent(ytrain,xtrain));CVMSE = Crossval('MSE',X,Y,'Predfun',Regf,'选项',OPTS)CVMSE = 0.1028

这个简单的例子不是并行计算的好候选者:

%在序列中计算多长时间?Tic; CVMSE = Crossval('MSE',X,Y,'Predfun',Regf); TOC经过时间为0.073438秒。%并行计算多长时间?tic; cvmse = crossval('mse',x,y,'predfun',Regf,...'选项',选择); toc经过时间为0.289585秒。

可重复的并行交叉验证

跑步横梁在可重复的方式并行,设置选项并适当地重置随机流(参见运行可重复的并行计算)。

mypool = parpool()使用“本地”配置文件启动Parpool ...连接到2名工人。mypool =具有属性的池:连接文件:{0x1小区} numworkers:2 idletimeout:30群集群:[1x1 parallel.cluster.local]请求正确:[1x1 parallel.requestqueue] spmdeabled:1 s = randstream('mlfg631_64');opts = statset('devalpeclellel',true,...'streams',s,'userubstreams',true);加载('渔业');Y = MEAS(:,1);x = [尺寸(尺寸(y,1),1),meas(:,2:4)];Regf = @(xtrain,ytrain,xtest)(xtest * forgent(ytrain,xtrain));CVMSE = Crossval('MSE',x,Y,'predfun',Regf,'选项',选择)cvmse = 0.1020

重置流:

RESET(s)cvmse = Crossval('MSE',x,Y,'predfun',Regf,'选项',OPTS)CVMSE = 0.1020