Обучите классификационный ансамбль параллельно

Этот пример показывает, как обучить классификационный ансамбль параллельно. Модель имеет десять красных и десять зеленых базовых местоположений, и красные и зелёные населения, которые обычно распределены и центрированы в базовых местоположениях. Цель состоит в том, чтобы классифицировать точки на основе их расположения. Эти классификации неоднозначны, потому что некоторые базовые местоположения находятся рядом с местоположениями другого цвета.

Создайте и отобразите десять базовых расположений каждого цвета.

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

См. также

|

Похожие темы