Движение к автоматизации выбора модели с помощью байесовской оптимизации

В этом примере показов, как создать несколько моделей классификации для данных обучающих данных набора, оптимизировать их гиперпараметры с помощью байесовской оптимизации и выбрать модель, которая работает лучше всего на тестовых данных наборе.

Обучение нескольких моделей и настройка их гиперпараметров часто могут занять дни или недели. Создание скрипта для автоматической разработки и сравнения нескольких моделей может быть намного быстрее. Можно также использовать байесовскую оптимизацию, чтобы ускорить процесс. Вместо обучения каждой модели с различными наборами гиперпараметров вы выбираете несколько различных моделей и настраиваете их гиперпараметры по умолчанию с помощью байесовской оптимизации. Байесовская оптимизация находит оптимальный набор гиперпараметров для заданной модели путем минимизации целевой функции модели. Этот алгоритм оптимизации стратегически выбирает новые гиперпараметры в каждой итерации и обычно достигает оптимального набора гиперпараметров быстрее, чем простой поиск по сетке. Можно использовать скрипт в этом примере, чтобы обучить несколько классификационных моделей с помощью байесовской оптимизации для данного набора обучающих данных и идентифицировать модель, которая лучше всего работает на тестовых данных наборе.

Кроме того, чтобы автоматически выбрать классификационную модель для выбора типов классификаторов и значений гиперзначений параметров, используйте fitcauto. Для получения примера смотрите Автоматический выбор классификатора с байесовской оптимизацией.

Загрузка выборочных данных

Этот пример использует данные переписи 1994 года, хранящиеся в census1994.mat. Набор данных состоит из демографических данных Бюро переписи населения США, чтобы предсказать, составляет ли индивидуум более 50 000 долларов в год. Задача классификации состоит в том, чтобы соответствовать модели, которая предсказывает категорию заработной платы людей с учетом их возраста, рабочего класса, уровня образования, семейного положения, расы и так далее.

Загрузите выборочные данные census1994 и отобразите переменные в наборе данных.

load census1994
whos
  Name                 Size              Bytes  Class    Attributes

  Description         20x74               2960  char               
  adultdata        32561x15            1872567  table              
  adulttest        16281x15             944467  table              

census1994 содержит обучающий набор обучающих данных adultdata и набор тестовых данных adulttest. В данном примере, чтобы уменьшить время работы, выделите 5000 обучений и тестовых наблюдений каждый из исходных таблиц adultdata и adulttest, при помощи datasample функция. (Можно пропустить этот шаг, если необходимо использовать полные наборы данных.)

NumSamples = 5000;
s = RandStream('mlfg6331_64'); % For reproducibility
adultdata = datasample(s,adultdata,NumSamples,'Replace',false);
adulttest = datasample(s,adulttest,NumSamples,'Replace',false);

Предварительный просмотр первых нескольких строк обучающих данных набора.

head(adultdata)
ans=8×15 table
    age     workClass       fnlwgt       education      education_num      marital_status         occupation         relationship     race      sex      capital_gain    capital_loss    hours_per_week    native_country    salary
    ___    ___________    __________    ____________    _____________    __________________    _________________    ______________    _____    ______    ____________    ____________    ______________    ______________    ______

    39     Private          4.91e+05    Bachelors            13          Never-married         Exec-managerial      Other-relative    Black    Male           0               0                45          United-States     <=50K 
    25     Private        2.2022e+05    11th                  7          Never-married         Handlers-cleaners    Own-child         White    Male           0               0                45          United-States     <=50K 
    24     Private        2.2761e+05    10th                  6          Divorced              Handlers-cleaners    Unmarried         White    Female         0               0                58          United-States     <=50K 
    51     Private        1.7329e+05    HS-grad               9          Divorced              Other-service        Not-in-family     White    Female         0               0                40          United-States     <=50K 
    54     Private        2.8029e+05    Some-college         10          Married-civ-spouse    Sales                Husband           White    Male           0               0                32          United-States     <=50K 
    53     Federal-gov         39643    HS-grad               9          Widowed               Exec-managerial      Not-in-family     White    Female         0               0                58          United-States     <=50K 
    52     Private             81859    HS-grad               9          Married-civ-spouse    Machine-op-inspct    Husband           White    Male           0               0                48          United-States     >50K  
    37     Private        1.2429e+05    Some-college         10          Married-civ-spouse    Adm-clerical         Husband           White    Male           0               0                50          United-States     <=50K 

Каждая строка представляет атрибуты одного взрослого, такие как возраст, образование и род занятий. Последний столбец salary показывает, имеет ли человек зарплату менее 50 000 долл. США в год или более 50 000 долл. США в год.

Осмыслите данные и выберите классификационные модели

Statistics and Machine Learning Toolbox™ предоставляет несколько опции классификации, включая деревья классификации, дискриминантный анализ, наивный Байес, ближайшие соседи, машины опорных векторов (SVM) и классификационные ансамбли. Полный список алгоритмов см. в разделе Классификация.

Прежде чем выбирать алгоритмы, которые будут использоваться для вашей задачи, смотрите свой набор данных. Данные переписи населения имеют несколько примечательных характеристик:

  • Данные являются табличными и содержат как числовые, так и категориальные переменные.

  • Данные содержат отсутствующие значения.

  • Переменная отклика (salary) имеет два класса (двоичная классификация).

Не делая никаких предположений или используя предыдущие знания алгоритмов, которые вы ожидаете хорошо работать с вашими данными, вы просто обучаете все алгоритмы, которые поддерживают табличные данные и двоичную классификацию. Модели выходных кодов с исправлением ошибок (ECOC) используются для данных с более чем двумя классами. Дискриминантный анализ и ближайшие соседние алгоритмы не анализируют данные, которые содержат как числовые, так и категориальные переменные. Поэтому алгоритмами, подходящими для этого примера, являются SVM, дерево решений, ансамбль деревьев решений и наивная модель Байеса.

Построение моделей и настройка гиперпараметров

Чтобы ускорить процесс, настройте опции оптимизации гипероптимизации параметров управления. Задайте 'ShowPlots' как false и 'Verbose' равным 0, чтобы отключить график и отображения сообщений, соответственно. Кроме того, задайте 'UseParallel' как true чтобы запустить байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам.

hypopts = struct('ShowPlots',false,'Verbose',0,'UseParallel',true);

Запустите параллельный пул.

poolobj = gcp;

Вы можете легко подгонять обучающий набор обучающих данных и настраивать параметры, вызывая каждую функцию аппроксимации и настраивая ее 'OptimizeHyperparameters' аргумент пары "имя-значение" в 'auto'. Создайте классификационные модели.

% SVMs: SVM with polynomial kernel & SVM with Gaussian kernel
mdls{1} = fitcsvm(adultdata,'salary','KernelFunction','polynomial','Standardize','on', ...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions', hypopts);
mdls{2} = fitcsvm(adultdata,'salary','KernelFunction','gaussian','Standardize','on', ...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions', hypopts);

% Decision tree
mdls{3} = fitctree(adultdata,'salary', ...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions', hypopts);

% Ensemble of Decision trees
mdls{4} = fitcensemble(adultdata,'salary','Learners','tree', ...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions', hypopts);

% Naive Bayes
mdls{5} = fitcnb(adultdata,'salary', ...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions', hypopts);
Warning: It is recommended that you first standardize all numeric predictors when optimizing the Naive Bayes 'Width' parameter. Ignore this warning if you have done that.

Постройте минимальные графики графика

Извлеките результаты байесовской оптимизации из каждой модели и постройте график минимального наблюдаемого значения целевой функции для каждой модели при каждой итерации оптимизации гипероптимизации параметров управления. Значение целевой функции соответствует скорости неправильной классификации, измеренной пятикратной перекрестной валидацией с использованием набора обучающих данных. График сравнивает эффективность каждой модели.

figure
hold on
N = length(mdls);
for i = 1:N
    mdl = mdls{i};
    results = mdls{i}.HyperparameterOptimizationResults;
    plot(results.ObjectiveMinimumTrace,'Marker','o','MarkerSize',5);
end
names = {'SVM-Polynomial','SVM-Gaussian','Decision Tree','Ensemble-Trees','Naive Bayes'};
legend(names,'Location','northeast')
title('Bayesian Optimization')
xlabel('Number of Iterations')
ylabel('Minimum Objective Value')

Использование байесовской оптимизации для поиска лучших наборов гипернаборов параметров улучшает эффективность моделей в течение нескольких итераций. В этом случае график указывает, что ансамбль деревьев решений имеет лучшую точность предсказания для данных. Эта модель работает хорошо последовательно в течение нескольких итераций и различных наборов байесовских гиперпараметров оптимизации.

Проверяйте эффективность с помощью тестового набора

Проверьте эффективность классификатора с набором тестовых данных с помощью матрицы неточностей и кривой рабочей характеристики приемника (ROC).

Найдите предсказанные метки и значения баллов тестовых данных набора.

label = cell(N,1);
score = cell(N,1);
for i = 1:N
    [label{i},score{i}] = predict(mdls{i},adulttest);
end

Матрица неточностей

Получите наиболее вероятный класс для каждого тестового наблюдения при помощи predict функция каждой модели. Затем вычислите матрицу неточностей с предсказанными классами и известными (true) классами тестовых данных набора при помощи confusionchart функция.

figure
c = cell(N,1);
for i = 1:N
    subplot(2,3,i)
    c{i} = confusionchart(adulttest.salary,label{i});
    title(names{i})
end

Диагональные элементы указывают количество правильно классифицированных образцов данного класса. Не-диагональные элементы являются образцами неправильно классифицированных наблюдений.

Кривая ROC

Более внимательно проверьте эффективность классификатора путем построения кривой ROC для каждого классификатора. Используйте perfcurve функция для получения X и Y координаты кривой ROC и площади под значением кривой (AUC) для вычисляемой X и Y.

Чтобы построить график кривых ROC для значений баллов, соответствующих значению метки '<=50K', проверьте порядок столбцов значений баллов, возвращенных из predict функция. Порядок столбцов совпадает с порядком категорий переменной отклика в наборе обучающих данных. Отображение порядка категорий.

c = categories(adultdata.salary)
c = 2×1 cell
    {'<=50K'}
    {'>50K' }

Постройте график кривых ROC.

figure
hold on
AUC = zeros(1,N);
for i = 1:N    
    [X,Y,~,AUC(i)] = perfcurve(adulttest.salary,score{i}(:,1),'<=50K');
    plot(X,Y)
end
title('ROC Curves')
xlabel('False Positive Rate')
ylabel('True Positive Rate')
legend(names,'Location','southeast')

Кривая ROC показывает истинную положительную скорость по сравнению с ложноположительной частотой (или, чувствительность по сравнению с 1-специфичностью) для различных порогов выхода классификатора.

Теперь постройте график значений AUC с помощью гистограммы. Для идеального классификатора, истинная положительная скорость которого всегда равна 1 независимо от порогов, AUC = 1. Для классификатора, который случайным образом присваивает наблюдения классам, AUC = 0,5. Большие значения AUC указывают на лучшую эффективность классификатора.

figure
bar(AUC)
title('Area Under the Curve')
xlabel('Model')
ylabel('AUC')
xticklabels(names)
xtickangle(30)
ylim([0.85,0.925])

Основываясь на матрице неточностей и гистограмме AUC, ансамбль деревьев решений и моделей SVM достигает лучшей точности, чем дерево решений и наивные модели Байеса.

Возобновите оптимизацию наиболее перспективных моделей

Выполнение байесовской оптимизации на всех моделях для дальнейших итераций может быть вычислительно дорогим. Вместо этого выберите подмножество моделей, которые до сих пор показали хорошие результаты и продолжите оптимизацию для еще 30 итераций при помощи resume функция. Постройте график минимальных наблюдаемых значений целевой функции для каждой итерации байесовской оптимизации.

figure
hold on
selectedMdls = mdls([1,2,4]);
newresults = cell(1,length(selectedMdls));
for i = 1:length(selectedMdls)
    newresults{i} = resume(selectedMdls{i}.HyperparameterOptimizationResults,'MaxObjectiveEvaluations',30);
    plot(newresults{i}.ObjectiveMinimumTrace,'Marker','o','MarkerSize',5)
end
title('Bayesian Optimization with resume')
xlabel('Number of Iterations')
ylabel('Minimum Objective Value')
legend({'SVM-Polynomial','SVM-Gaussian','Ensemble-Trees'},'Location','northeast')

Первые 30 итераций соответствуют первому раунду байесовской оптимизации. Следующие 30 итераций соответствуют результатам resume функция. Возобновление оптимизации полезно, потому что потеря продолжает уменьшаться после первых 30 итераций.

См. также

| | |

Похожие темы