В этом примере показано, как параллельно обучать классификационный ансамбль. Модель имеет десять красных и десять зеленых базовых местоположений, а также красные и зеленые популяции, которые обычно распределены и центрированы в базовых местоположениях. Цель состоит в классификации точек на основе их местоположения. Эти классификации неоднозначны, поскольку некоторые базовые расположения находятся рядом с расположениями другого цвета.
Создайте и выведите на печать десять базовых расположений каждого цвета.
rng default % For reproducibility grnpop = mvnrnd([1,0],eye(2),10); redpop = mvnrnd([0,1],eye(2),10); plot(grnpop(:,1),grnpop(:,2),'go') hold on plot(redpop(:,1),redpop(:,2),'ro') hold off

Создайте 40 000 точек каждого цвета с центром на случайных базовых точках.
N = 40000; redpts = zeros(N,2);grnpts = redpts; for i = 1:N grnpts(i,:) = mvnrnd(grnpop(randi(10),:),eye(2)*0.02); redpts(i,:) = mvnrnd(redpop(randi(10),:),eye(2)*0.02); end figure plot(grnpts(:,1),grnpts(:,2),'go') hold on plot(redpts(:,1),redpts(:,2),'ro') hold off

cdata = [grnpts;redpts];
grp = ones(2*N,1);
% Green label 1, red label -1
grp(N+1:2*N) = -1;Подберите упакованный классификационный ансамбль к данным. Для сравнения с параллельным обучением подогнать ансамбль по сериалу и вернуть время обучения.
tic mdl = fitcensemble(cdata,grp,'Method','Bag'); stime = toc
stime = 9.0782
Оцените потери вне мешка для установленной модели.
myerr = oobLoss(mdl)
myerr = 0.0572
Создание модели классификации в мешках параллельно с использованием воспроизводимого шаблона дерева и параллельных субпотоков. Можно создать параллельный пул в кластере или параллельный пул рабочих потоков на локальном компьютере. Чтобы выбрать подходящую параллельную среду, см. раздел Выбор среды на основе потоков и среды на основе процессов.
parpool
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
ans =
ProcessPool with properties:
Connected: true
NumWorkers: 6
Cluster: local
AttachedFiles: {}
AutoAddClientPath: true
IdleTimeout: 30 minutes (30 minutes remaining)
SpmdEnabled: true
s = RandStream('mrg32k3a'); options = statset("UseParallel",true,"UseSubstreams",true,"Streams",s); t = templateTree("Reproducible",true); tic mdl2 = fitcensemble(cdata,grp,'Method','Bag','Learners',t,'Options',options); ptime = toc
ptime = 6.2527
На этой шестиъядерной системе параллельно происходит более быстрый тренировочный процесс.
speedup = stime/ptime
speedup = 1.4519
Оцените потери вне мешка для этой модели.
myerr2 = oobLoss(mdl2)
myerr2 = 0.0577
Частота ошибок аналогична частоте ошибок первой модели.
Чтобы продемонстрировать воспроизводимость модели, сбросьте поток случайных чисел и снова поместите модель.
reset(s); tic mdl2 = fitcensemble(cdata,grp,'Method','Bag','Learners',t,'Options',options); toc
Elapsed time is 3.953355 seconds.
Убедитесь, что потеря совпадает с предыдущей потерей.
myerr2 = oobLoss(mdl2)
myerr2 = 0.0577