exponenta event banner

fitcsvm

Классификатор вектора поддержки поезда (SVM) для одноклассной и двоичной классификации

Описание

fitcsvm обучает или перекрестно проверяет модель машины опорных векторов (SVM) для одноклассной и двухклассной (двоичной) классификации на низкоразмерном или умеренно-размерном наборе данных предиктора. fitcsvm поддерживает отображение данных предиктора с использованием функций ядра и поддерживает последовательную минимальную оптимизацию (SMO), итеративный алгоритм одиночных данных (ISDA) или L1 мягкую минимизацию запаса посредством квадратичного программирования для минимизации объективной функции.

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

Для многоклассового обучения с комбинированными двоичными моделями SVM используйте выходные коды с исправлением ошибок (ECOC). Дополнительные сведения см. в разделе fitcecoc.

Для получения информации о модели регрессии SVM см. fitrsvm для низкоразмерных и умеренно-размерных наборов данных предиктора, или fitrlinear для высокоразмерных наборов данных.

Mdl = fitcsvm(Tbl,ResponseVarName) возвращает классификатор вспомогательных векторных машин (SVM) Mdl обучение с использованием данных выборки, содержащихся в таблице Tbl. ResponseVarName - имя переменной в Tbl содержит метки класса для классификации одного или двух классов.

Mdl = fitcsvm(Tbl,formula) возвращает классификатор SVM, обученный с использованием образцов данных, содержащихся в таблице Tbl. formula является пояснительной моделью ответа и подмножеством переменных предиктора в Tbl используется для подгонки Mdl.

Mdl = fitcsvm(Tbl,Y) возвращает классификатор SVM, обученный с использованием переменных предиктора в таблице Tbl и метки класса в векторе Y.

пример

Mdl = fitcsvm(X,Y) возвращает классификатор SVM, обученный с использованием предикторов в матрице X и метки класса в векторе Y для классификации одного или двух классов.

пример

Mdl = fitcsvm(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущих синтаксисах. Например, можно указать тип перекрестной проверки, стоимость неправильной классификации и тип функции преобразования баллов.

Примеры

свернуть все

Загрузите набор данных радужки Фишера. Удалите длины и ширины чашелистиков и все наблюдаемые ирисы сетозы.

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);

Обучение классификатора SVM с использованием обработанного набора данных.

SVMModel = fitcsvm(X,y)
SVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 100
                    Alpha: [24x1 double]
                     Bias: -14.4149
         KernelParameters: [1x1 struct]
           BoxConstraints: [100x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [100x1 logical]
                   Solver: 'SMO'


  Properties, Methods

SVMModel является обученным ClassificationSVM классификатор. Отображение свойств SVMModel. Например, чтобы определить порядок классов, используйте точечную нотацию.

classOrder = SVMModel.ClassNames
classOrder = 2x1 cell
    {'versicolor'}
    {'virginica' }

Первый класс ('versicolor') - отрицательный класс, а второй ('virginica') - положительный класс. Порядок занятий можно изменить во время обучения с помощью 'ClassNames' аргумент пары имя-значение.

Постройте диаграмму рассеяния данных и обведите векторы поддержки.

sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent versicolor, virginica, Support Vector.

Векторы поддержки представляют собой наблюдения, которые происходят на их оценочных границах классов или за их пределами.

Можно настроить границы (и, следовательно, количество векторов поддержки), установив ограничение рамки во время обучения с помощью 'BoxConstraint' аргумент пары имя-значение.

Загрузить ionosphere набор данных.

load ionosphere
rng(1); % For reproducibility

Обучение классификатора SVM с использованием радиального базового ядра. Позволяет программному обеспечению найти значение масштаба для функции ядра. Стандартизируйте предикторы.

SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');

SVMModel является обученным ClassificationSVM классификатор.

Перекрестная проверка классификатора SVM. По умолчанию программа использует десятикратную перекрестную проверку.

CVSVMModel = crossval(SVMModel);

CVSVMModel является ClassificationPartitionedModel перекрестно проверенный классификатор.

Оцените коэффициент неправильной классификации вне выборки.

classLoss = kfoldLoss(CVSVMModel)
classLoss = 0.0484

Коэффициент обобщения составляет примерно 5%.

Измените набор данных радужки Фишера, назначив все радужки одному классу. Определите отклонения в измененном наборе данных и подтвердите ожидаемую долю отклонений в наблюдениях.

Загрузите набор данных радужки Фишера. Удалите длины и ширину лепестков. Относитесь ко всем ирисам как к выходцам из одного класса.

load fisheriris
X = meas(:,1:2);
y = ones(size(X,1),1);

Обучение классификатора SVM с использованием измененного набора данных. Предположим, что 5% наблюдений являются отклонениями. Стандартизируйте предикторы.

rng(1);
SVMModel = fitcsvm(X,y,'KernelScale','auto','Standardize',true,...
    'OutlierFraction',0.05);

SVMModel является обученным ClassificationSVM классификатор. По умолчанию программное обеспечение использует гауссово ядро для одноклассного обучения.

Постройте график наблюдений и границы принятия решения. Отметьте векторы поддержки и потенциальные отклонения.

svInd = SVMModel.IsSupportVector;
h = 0.02; % Mesh grid step size
[X1,X2] = meshgrid(min(X(:,1)):h:max(X(:,1)),...
    min(X(:,2)):h:max(X(:,2)));
[~,score] = predict(SVMModel,[X1(:),X2(:)]);
scoreGrid = reshape(score,size(X1,1),size(X2,2));

figure
plot(X(:,1),X(:,2),'k.')
hold on
plot(X(svInd,1),X(svInd,2),'ro','MarkerSize',10)
contour(X1,X2,scoreGrid)
colorbar;
title('{\bf Iris Outlier Detection via One-Class SVM}')
xlabel('Sepal Length (cm)')
ylabel('Sepal Width (cm)')
legend('Observation','Support Vector')
hold off

Figure contains an axes. The axes with title {\bf Iris Outlier Detection via One-Class SVM} contains 3 objects of type line, contour. These objects represent Observation, Support Vector.

Граница, отделяющая отклонения от остальных данных, находится там, где значение контура равно 0.

Убедитесь, что доля наблюдений с отрицательными показателями в данных перекрестной проверки близка к 5%.

CVSVMModel = crossval(SVMModel);
[~,scorePred] = kfoldPredict(CVSVMModel);
outlierRate = mean(scorePred<0)
outlierRate = 0.0467

Создание графика рассеяния fisheriris набор данных. Обработка координат сетки на графике как новых наблюдений из распределения набора данных и поиск границ классов путем назначения координат одному из трех классов в наборе данных.

Загрузите набор данных радужки Фишера. Используйте длины и ширину лепестков в качестве предикторов.

load fisheriris
X = meas(:,3:4);
Y = species;

Изучите график рассеяния данных.

figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
lims = [h.XLim h.YLim]; % Extract the x and y axis limits
title('{\bf Scatter Diagram of Iris Measurements}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend('Location','Northwest');

Figure contains an axes. The axes with title {\bf Scatter Diagram of Iris Measurements} contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

Данные содержат три класса, один из которых линейно отделяется от других.

Для каждого класса:

  1. Создать логический вектор (indx) указывает, является ли наблюдение членом класса.

  2. Обучение классификатора SVM с использованием данных предиктора и indx.

  3. Сохранение классификатора в ячейке массива ячеек.

Определите порядок классов.

SVMModels = cell(3,1);
classes = unique(Y);
rng(1); % For reproducibility

for j = 1:numel(classes)
    indx = strcmp(Y,classes(j)); % Create binary classes for each classifier
    SVMModels{j} = fitcsvm(X,indx,'ClassNames',[false true],'Standardize',true,...
        'KernelFunction','rbf','BoxConstraint',1);
end

SVMModels представляет собой массив ячеек 3 на 1, каждая из которых содержит ClassificationSVM классификатор. Для каждой ячейки положительным классом является setosa, versicolor и virginica соответственно.

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

d = 0.02;
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
    min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];
N = size(xGrid,1);
Scores = zeros(N,numel(classes));

for j = 1:numel(classes)
    [~,score] = predict(SVMModels{j},xGrid);
    Scores(:,j) = score(:,2); % Second column contains positive-class scores
end

Каждая строка Scores содержит три балла. Индекс элемента с наибольшим баллом - это индекс класса, которому скорее всего принадлежит новое наблюдение класса.

Связывайте каждое новое наблюдение с классификатором, который дает ему максимальную оценку.

[~,maxScore] = max(Scores,[],2);

Цвет в областях графика на основе класса, к которому относится соответствующее новое наблюдение.

figure
h(1:3) = gscatter(xGrid(:,1),xGrid(:,2),maxScore,...
    [0.1 0.5 0.5; 0.5 0.1 0.5; 0.5 0.5 0.1]);
hold on
h(4:6) = gscatter(X(:,1),X(:,2),Y);
title('{\bf Iris Classification Regions}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend(h,{'setosa region','versicolor region','virginica region',...
    'observed setosa','observed versicolor','observed virginica'},...
    'Location','Northwest');
axis tight
hold off

Figure contains an axes. The axes with title {\bf Iris Classification Regions} contains 6 objects of type line. These objects represent setosa region, versicolor region, virginica region, observed setosa, observed versicolor, observed virginica.

Автоматическая оптимизация гиперпараметров с помощью fitcsvm.

Загрузить ionosphere набор данных.

load ionosphere

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

rng default
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto', ...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName', ...
    'expected-improvement-plus'))
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |     0.20513 |       17.44 |     0.20513 |     0.20513 |       64.836 |    0.0015729 |
|    2 | Accept |     0.35897 |     0.14051 |     0.20513 |     0.21471 |     0.036335 |       5.5755 |
|    3 | Best   |     0.13105 |      6.5882 |     0.13105 |     0.14133 |    0.0022147 |    0.0023957 |
|    4 | Accept |     0.35897 |     0.13433 |     0.13105 |     0.13109 |       5.1259 |        98.62 |
|    5 | Accept |     0.13675 |      13.311 |     0.13105 |     0.13111 |    0.0011599 |    0.0010098 |
|    6 | Accept |     0.13675 |      2.8439 |     0.13105 |     0.13119 |    0.0010151 |    0.0059137 |
|    7 | Accept |      0.1339 |      8.3568 |     0.13105 |     0.13127 |    0.0010281 |    0.0027003 |
|    8 | Accept |     0.13675 |      13.349 |     0.13105 |     0.13232 |     0.016269 |    0.0024597 |
|    9 | Accept |     0.13105 |      10.731 |     0.13105 |     0.13137 |    0.0021526 |    0.0025081 |
|   10 | Best   |     0.12821 |      14.612 |     0.12821 |     0.12841 |    0.0086928 |    0.0010304 |
|   11 | Accept |     0.12821 |      14.821 |     0.12821 |     0.12828 |     0.010039 |    0.0010077 |
|   12 | Accept |     0.13675 |       14.12 |     0.12821 |     0.13162 |    0.0071238 |    0.0010245 |
|   13 | Accept |      0.1339 |      14.844 |     0.12821 |     0.13179 |    0.0050166 |    0.0016385 |
|   14 | Best   |     0.11966 |      16.326 |     0.11966 |     0.12919 |     0.013746 |    0.0010181 |
|   15 | Accept |     0.13105 |      15.514 |     0.11966 |      0.1294 |     0.025222 |     0.001012 |
|   16 | Accept |     0.13105 |      15.825 |     0.11966 |     0.12958 |     0.024019 |     0.001013 |
|   17 | Accept |     0.35897 |     0.12602 |     0.11966 |     0.12962 |    0.0010245 |       994.95 |
|   18 | Accept |     0.13675 |      14.137 |     0.11966 |     0.12925 |       990.28 |      0.36736 |
|   19 | Accept |     0.18234 |      17.057 |     0.11966 |     0.12917 |       949.33 |     0.082849 |
|   20 | Accept |      0.1339 |      5.9498 |     0.11966 |     0.12914 |       979.17 |       1.3107 |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstraint|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |     0.14245 |      15.581 |     0.11966 |     0.13062 |     0.024598 |    0.0010041 |
|   22 | Accept |     0.13675 |      11.356 |     0.11966 |     0.13058 |          907 |      0.70254 |
|   23 | Accept |     0.35897 |    0.098898 |     0.11966 |     0.13062 |       999.82 |       995.02 |
|   24 | Accept |     0.15385 |     0.10127 |     0.11966 |     0.13042 |     0.001002 |      0.30762 |
|   25 | Accept |     0.12251 |     0.10992 |     0.11966 |     0.12275 |    0.0010105 |     0.056734 |
|   26 | Accept |      0.1339 |     0.18927 |     0.11966 |     0.12251 |     0.021279 |     0.054708 |
|   27 | Accept |     0.12821 |     0.13195 |     0.11966 |     0.12517 |    0.0010127 |     0.064566 |
|   28 | Accept |     0.12821 |     0.11386 |     0.11966 |     0.12557 |    0.0010014 |     0.036667 |
|   29 | Accept |      0.1339 |     0.10612 |     0.11966 |     0.12743 |    0.0010509 |     0.078319 |
|   30 | Accept |     0.12251 |     0.14276 |     0.11966 |     0.12706 |    0.0030057 |     0.028009 |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Figure contains an axes. The axes with title Objective function model contains 5 objects of type line, surface, contour. These objects represent Observed points, Model mean, Next point, Model minimum feasible.

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 283.5331 seconds
Total objective function evaluation time: 244.1554

Best observed feasible point:
    BoxConstraint    KernelScale
    _____________    ___________

      0.013746        0.0010181 

Observed objective function value = 0.11966
Estimated objective function value = 0.13091
Function evaluation time = 16.3258

Best estimated feasible point (according to models):
    BoxConstraint    KernelScale
    _____________    ___________

      0.0010105       0.056734  

Estimated objective function value = 0.12706
Estimated function evaluation time = 0.11003
Mdl = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1x1 BayesianOptimization]
                                Alpha: [117x1 double]
                                 Bias: -2.6521
                     KernelParameters: [1x1 struct]
                       BoxConstraints: [351x1 double]
                      ConvergenceInfo: [1x1 struct]
                      IsSupportVector: [351x1 logical]
                               Solver: 'SMO'


  Properties, Methods

Входные аргументы

свернуть все

Образец данных, используемых для обучения модели, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, Tbl может содержать один дополнительный столбец для переменной ответа. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.

  • Если Tbl содержит переменную ответа, и вы хотите использовать все оставшиеся переменные в Tbl в качестве предикторов, затем укажите переменную ответа, используя ResponseVarName.

  • Если Tbl содержит переменную ответа, и требуется использовать только подмножество остальных переменных в Tbl в качестве предикторов, затем укажите формулу с помощью formula.

  • Если Tbl не содержит переменную ответа, затем укажите переменную ответа с помощью Y. Длина переменной ответа и количество строк в Tbl должно быть равным.

Типы данных: table

Имя переменной ответа, указанное как имя переменной в Tbl.

Необходимо указать ResponseVarName в виде вектора символов или строкового скаляра. Например, если переменная ответа Y хранится как Tbl.Y, затем укажите его как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Y, в качестве предикторов при обучении модели.

Переменная ответа должна быть категориальным, символьным или строковым массивом; логический или числовой вектор; или массив ячеек символьных векторов. Если Y является символьным массивом, то каждый элемент переменной ответа должен соответствовать одной строке массива.

Рекомендуется указывать порядок классов с помощью ClassNames аргумент «имя-значение».

Типы данных: char | string

Пояснительная модель переменной ответа и подмножество переменных предиктора, указанное как вектор символов или строковый скаляр в форме 'Y~x1+x2+x3'. В этой форме Y представляет переменную ответа, и x1, x2, и x3 представляют переменные предиктора.

Задание подмножества переменных в Tbl в качестве предикторов для обучения модели используйте формулу. Если задать формулу, программа не будет использовать переменные в Tbl которые не отображаются в formula.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB ®. Имена переменных можно проверить вTbl с помощью isvarname функция. Если имена переменных недопустимы, их можно преобразовать с помощью matlab.lang.makeValidName функция.

Типы данных: char | string

Метки классов, с которыми обучается модель SVM, задаются как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов.

  • Y должен содержать не более двух различных классов. Сведения о многоклассовом обучении см. в разделе fitcecoc.

  • Если Y является символьным массивом, то каждый элемент меток класса должен соответствовать одной строке массива.

  • Длина Y и количество строк в Tbl или X должно быть равным.

  • Рекомендуется указывать порядок классов с помощью ClassNames аргумент пары имя-значение.

Типы данных: categorical | char | string | logical | single | double | cell

Данные предиктора, которым обучают классификатор SVM, заданные как матрица числовых значений.

Каждая строка X соответствует одному наблюдению (также известному как экземпляр или пример), и каждый столбец соответствует одному предиктору (также известному как признак).

Длина Y и количество строк в X должно быть равным.

Чтобы указать имена предикторов в порядке их появления в X, используйте 'PredictorNames' аргумент пары имя-значение.

Типы данных: double | single

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: fitcsvm(X,Y,'KFold',10,'Cost',[0 2;1 0],'ScoreTransform','sign') выполняет 10-кратную перекрестную проверку, применяет двойной штраф к ложным срабатываниям по сравнению с ложными негативами и преобразует баллы с помощью функции знака.
Параметры SVM

свернуть все

Ограничение поля, указанное как пара, разделенная запятыми, состоящая из 'BoxConstraint' и положительный скаляр.

Для одноклассного обучения программа всегда устанавливает ограничение поля на 1.

Для получения более подробной информации о взаимоотношениях и алгоритмическом поведении BoxConstraint, Cost, Prior, Standardize, и Weights, см. Алгоритмы.

Пример: 'BoxConstraint',100

Типы данных: double | single

Функция ядра, используемая для вычисления элементов матрицы Gram, определяемая как разделенная запятыми пара, состоящая из 'KernelFunction' и имя функции ядра. Предположим, что G (xj, xk) является элементом (j, k) матрицы Gram, где xj и xk являются p-мерными векторами, представляющими наблюдения j и k вX. В этой таблице описываются поддерживаемые имена функций ядра и их функциональные формы.

Имя функции ядраОписаниеФормула
'gaussian' или 'rbf'Ядро гауссовой или радиальной базовой функции (RBF), по умолчанию для одноклассного обучения

G (xj, xk) = exp (−‖xj−xk‖2)

'linear'Линейное ядро, по умолчанию для двухклассного обучения

G (xj, xk) =xj′xk

'polynomial'Полиномиальное ядро. Использовать 'PolynomialOrder',q для указания ядра полинома порядка q.

G (xj, xk) = (1+xj′xk) q

Можно задать собственную функцию ядра, например: kernel, путем установки 'KernelFunction','kernel'. Стоимость kernel должна иметь эту форму.

function G = kernel(U,V)
где:

  • U является матрицей m-by-p. Столбцы соответствуют переменным предиктора, а строки - наблюдениям.

  • V является матрицей n-by-p. Столбцы соответствуют переменным предиктора, а строки - наблюдениям.

  • G является матрицей m-by-n Gram строк U и V.

kernel.m должен находиться в пути MATLAB.

Рекомендуется избегать использования общих имен для функций ядра. Например, вызовите функцию sigmoid kernel 'mysigmoid' вместо 'sigmoid'.

Пример: 'KernelFunction','gaussian'

Типы данных: char | string

Параметр масштаба ядра, заданный как разделенная запятыми пара, состоящая из 'KernelScale' и 'auto' или положительный скаляр. Программное обеспечение делит все элементы матрицы предиктора X по значению KernelScale. Затем программное обеспечение применяет соответствующую норму ядра для вычисления матрицы Gram.

  • При указании 'auto'затем программное обеспечение выбирает соответствующий масштабный коэффициент с использованием эвристической процедуры. Эта эвристическая процедура использует субдискретизацию, поэтому оценки могут варьироваться от одного вызова к другому. Поэтому для воспроизведения результатов установите начальное число случайного числа, используя rng перед тренировкой.

  • При указании KernelScale и свою собственную функцию ядра, например, 'KernelFunction','kernel', то программное обеспечение выдает ошибку. Необходимо применить масштабирование в пределах kernel.

Пример: 'KernelScale','auto'

Типы данных: double | single | char | string

Порядок полиномиальных функций ядра, указанный как пара, разделенная запятыми, состоящая из 'PolynomialOrder' и положительное целое число.

Если установить 'PolynomialOrder' и KernelFunction не является 'polynomial', то программное обеспечение выдает ошибку.

Пример: 'PolynomialOrder',2

Типы данных: double | single

Параметр смещения ядра, указанный как разделенная запятыми пара, состоящая из 'KernelOffset' и неотрицательный скаляр.

Программное обеспечение добавляет KernelOffset к каждому элементу матрицы Gram.

Значения по умолчанию:

  • 0 если решателем является SMO (то есть задается 'Solver','SMO')

  • 0.1 если решателем является ISDA (то есть задается 'Solver','ISDA')

Пример: 'KernelOffset',0

Типы данных: double | single

Флаг для стандартизации данных предиктора, указанный как пара, разделенная запятыми, состоящая из 'Standardize' и true (1) или false (0).

Если установить 'Standardize',true:

  • Программное обеспечение центрирует и масштабирует каждую предикторную переменную (X или Tbl) по соответствующему средневзвешенному столбцу и стандартному отклонению. Дополнительные сведения о взвешенной стандартизации см. в разделе Алгоритмы. MATLAB не стандартизирует данные, содержащиеся в фиктивных столбцах переменных, созданных для категориальных предикторов.

  • Программное обеспечение обучает классификатор с использованием стандартизированных предикторов, но сохраняет нестандартные предикторы в виде матрицы или таблицы в свойстве классификатора. X.

Пример: 'Standardize',true

Типы данных: logical

Процедура оптимизации, заданная как пара, разделенная запятыми, состоящая из 'Solver' и значение в этой таблице.

СтоимостьОписание
'ISDA'Итеративный алгоритм одиночных данных (см. [30])
'L1QP'Использование quadprog (Optimization Toolbox) для реализации L1 мягкой минимизации полей с помощью квадратичного программирования. Для этого параметра требуется лицензия Optimization Toolbox™. Дополнительные сведения см. в разделе Определение квадратного программирования (панель инструментов оптимизации).
'SMO'Последовательная минимальная оптимизация (см. [17])

Значение по умолчанию: 'ISDA' при установке 'OutlierFraction' к положительному значению для двухклассного обучения, и 'SMO' в противном случае.

Пример: 'Solver','ISDA'

Начальные оценки альфа-коэффициентов, указанных как пара, разделенная запятыми, состоящая из 'Alpha' и числовой вектор неотрицательных значений. Длина Alpha должно быть равно количеству строк в X.

  • Каждый элемент 'Alpha' соответствует наблюдению в X.

  • 'Alpha' не может содержать никаких NaNs.

  • При указании 'Alpha' и любой из аргументов пары имя-значение перекрестной проверки ('CrossVal', 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'), то программное обеспечение возвращает ошибку.

Если Y содержит любые отсутствующие значения, затем удалите все строки Y, X, и 'Alpha' которые соответствуют отсутствующим значениям. То есть введите:

idx = ~isundefined(categorical(Y));
Y = Y(idx,:);
X = X(idx,:);
alpha = alpha(idx);
Затем пройти Y, X, и alpha в качестве ответа, предикторов и начальных альфа-оценок соответственно.

Значения по умолчанию:

  • 0.5*ones(size(X,1),1) для одноклассного обучения

  • zeros(size(X,1),1) для двухклассного обучения

Пример: 'Alpha',0.1*ones(size(X,1),1)

Типы данных: double | single

Размер кэша, указанный как разделенная запятыми пара, состоящая из 'CacheSize' и 'maximal' или положительный скаляр.

Если CacheSize является 'maximal', то программное обеспечение резервирует достаточно памяти для хранения всей матрицы n-на-n Gram.

Если CacheSize является положительным скаляром, то программное обеспечение резервирует CacheSize мегабайт памяти для обучения модели.

Пример: 'CacheSize','maximal'

Типы данных: double | single | char | string

Флаг для отсечения альфа-коэффициентов, указанный как разделенная запятыми пара, состоящая из 'ClipAlphas' и либо true или false.

Предположим, что альфа-коэффициент для наблюдения j равен αj, а ограничение поля для наблюдения j равно Cj, j = 1,..., n, где n - размер обучающей выборки.

СтоимостьОписание
trueПри каждой итерации, если αj находится вблизи 0 или около Cj, то MATLAB устанавливает αj в 0 или в Cj соответственно.
falseMATLAB не изменяет альфа-коэффициенты во время оптимизации.

MATLAB сохраняет конечные значения α в Alpha свойство обучаемого объекта модели SVM.

ClipAlphas может влиять на сходимость SMO и ISDA.

Пример: 'ClipAlphas',false

Типы данных: logical

для одноклассного обучения, определяемого как разделенная запятыми пара, состоящая из 'Nu' и положительный скаляр. Nu должно быть больше, чем 0 и не более 1.

Набор Nu контролировать компромисс между обеспечением того, чтобы большинство тренировочных примеров были в положительном классе, и минимизацией весов в функции оценки.

Пример: 'Nu',0.25

Типы данных: double | single

Количество итераций между выводом диагностического сообщения оптимизации, указанного как пара, разделенная запятыми, состоящая из 'NumPrint' и неотрицательное целое число.

При указании 'Verbose',1 и 'NumPrint',numprint, то программное обеспечение отображает все диагностические сообщения оптимизации от SMO и ISDA каждый numprint итерации в окне команд.

Пример: 'NumPrint',500

Типы данных: double | single

Ожидаемая доля отклонений в данных обучения, указанная как пара, разделенная запятыми, состоящая из 'OutlierFraction' и числовой скаляр в интервале [0,1).

Предположим, что вы установили 'OutlierFraction',outlierfraction, где outlierfraction значение больше 0.

  • Для двухклассного обучения программное обеспечение реализует надежное обучение. Другими словами, программное обеспечение пытается удалить 100 *outlierfraction% наблюдений, когда алгоритм оптимизации сходится. Удаленные наблюдения соответствуют градиентам, которые являются большими по величине.

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

Пример: 'OutlierFraction',0.01

Типы данных: double | single

Флажок для замены повторяющихся наблюдений одиночными наблюдениями в учебных данных, указанных как разделенная запятыми пара, состоящая из 'RemoveDuplicates' и true или false.

Если RemoveDuplicates является true, то fitcsvm заменяет повторяющиеся наблюдения в учебных данных одним наблюдением с одинаковым значением. Вес одиночного наблюдения равен сумме весов соответствующих снятых дубликатов (см. Weights).

Совет

Если набор данных содержит много повторяющихся наблюдений, укажите 'RemoveDuplicates',true может значительно сократить время сходимости.

Типы данных: logical

Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и 0, 1, или 2. Значение Verbose управляет объемом информации об оптимизации, отображаемой программой в окне команд, и сохраняет эту информацию в виде структуры в Mdl.ConvergenceInfo.History.

В этой таблице представлены доступные параметры уровня детализации.

СтоимостьОписание
0Программа не отображает и не сохраняет информацию о сходимости.
1Программа отображает диагностические сообщения и сохраняет критерии сходимости каждый numprint итерации, где numprint - значение аргумента пары имя-значение 'NumPrint'.
2Программа отображает диагностические сообщения и сохраняет критерии сходимости на каждой итерации.

Пример: 'Verbose',1

Типы данных: double | single

Другие варианты классификации

свернуть все

Список категориальных предикторов, указанный как одно из значений в этой таблице.

СтоимостьОписание
Вектор положительных целых чисел

Каждая запись в векторе представляет собой значение индекса, соответствующее столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся в диапазоне от 1 до p, где p - количество предикторов, используемых для обучения модели.

Если fitcsvm использует подмножество входных переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

Логический вектор

A true ввод означает, что соответствующий столбец данных предиктора является категориальной переменной. Длина вектора равна p.

Символьная матрицаКаждая строка матрицы является именем предикторной переменной. Имена должны соответствовать записям в PredictorNames. Поместите имена с дополнительными пробелами, чтобы каждая строка символьной матрицы имела одинаковую длину.
Строковый массив или массив ячеек символьных векторовКаждый элемент массива является именем переменной предиктора. Имена должны соответствовать записям в PredictorNames.
'all'Все предикторы категоричны.

По умолчанию, если данные предиктора находятся в таблице (Tbl), fitcsvm предполагает, что переменная категорична, если она является логическим вектором, категориальным вектором, символьным массивом, строковым массивом или массивом ячеек символьных векторов. Если данные предиктора являются матрицей (X), fitcsvm предполагает, что все предикторы непрерывны. Чтобы определить любые другие предикторы как категориальные предикторы, укажите их с помощью 'CategoricalPredictors' аргумент «имя-значение».

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

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена классов, используемых для обучения, указанные как категориальный, символьный или строковый массив; логический или числовой вектор; или массив ячеек символьных векторов. ClassNames должен иметь тот же тип данных, что и переменная ответа в Tbl или Y.

Если ClassNames является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

Использовать ClassNames кому:

  • Укажите порядок занятий во время обучения.

  • Укажите порядок любого измерения входного или выходного аргумента, соответствующего порядку класса. Например, использовать ClassNames для указания порядка размеров Cost или порядок столбцов классификационных баллов, возвращенных predict.

  • Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Обучение модели с использованием наблюдений из классов 'a' и 'c' только, укажите 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames - набор всех различающихся имен классов в переменной ответа в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

Стоимость неправильной классификации указана как разделенная запятыми пара, состоящая из 'Cost' и квадратную матрицу или структурный массив.

  • При указании квадратной матрицы Cost и истинным классом наблюдения является i, то Cost(i,j) - стоимость классификации точки по классу j. То есть строки соответствуют истинным классам, а столбцы соответствуют предсказанным классам. Определение порядка классов для соответствующих строк и столбцов Cost, также укажите ClassNames аргумент пары имя-значение.

  • При указании структуры S, то он должен иметь два поля:

    • S.ClassNames, который содержит имена классов в качестве переменной того же типа данных, что и Y

    • S.ClassificationCosts, которая содержит матрицу затрат со строками и столбцами, упорядоченными как в S.ClassNames

Для двухклассного обучения, если указать матрицу затрат, программное обеспечение обновляет предыдущие вероятности путем включения штрафов, описанных в матрице затрат. Следовательно, матрица затрат сбрасывается в значение по умолчанию. Для получения более подробной информации о взаимоотношениях и алгоритмическом поведении BoxConstraint, Cost, Prior, Standardize, и Weights, см. Алгоритмы.

Значения по умолчанию:

  • Cost = 0 для одноклассного обучения

  • Cost(i,j) = 1 если i ~= j и Cost(i,j) = 0 если i = j для двухклассного обучения

Пример: 'Cost',[0,1;2,0]

Типы данных: double | single | struct

Имена переменных предиктора, заданные как строковый массив уникальных имен или массив ячеек уникальных векторов символов. Функциональные возможности PredictorNames зависит от способа ввода данных обучения.

  • Если вы поставляете X и Y, то вы можете использовать PredictorNames назначение имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} является именем X(:,1), PredictorNames{2} является именем X(:,2)и так далее. Также, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, то вы можете использовать PredictorNames чтобы выбрать, какие переменные предиктора использовать в обучении. То есть fitcsvm использует только переменные предиктора в PredictorNames и переменную ответа во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной ответа.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием 'PredictorNames' или formulaно не оба.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

Типы данных: string | cell

Предыдущие вероятности для каждого класса, указанные как пара, разделенная запятыми, состоящая из 'Prior' и значение в этой таблице.

СтоимостьОписание
'empirical'Предшествующие вероятности класса являются относительными частотами класса в Y.
'uniform'Все предшествующие вероятности классов равны 1/K, где K - число классов.
числовой векторКаждый элемент в векторе является классовой вероятностью. Упорядочить элементы по Mdl.ClassNames или укажите порядок с помощью ClassNames аргумент пары имя-значение. Программа нормализует элементы для суммирования 1.
структура

Структура S с двумя полями:

  • S.ClassNames содержит имена классов в качестве переменной того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих предшествующих вероятностей. Программа нормализует элементы вектора для суммирования 1.

Для двухклассного обучения, если указать матрицу затрат, программное обеспечение обновляет предыдущие вероятности путем включения штрафов, описанных в матрице затрат. Для получения более подробной информации о взаимоотношениях и алгоритмическом поведении BoxConstraint, Cost, Prior, Standardize, и Weights, см. Алгоритмы.

Пример: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

Типы данных: char | string | double | single | struct

Имя переменной ответа, указанное как вектор символа или скаляр строки.

  • Если вы поставляете Y, то вы можете использовать 'ResponseName' для указания имени переменной ответа.

  • Если вы поставляете ResponseVarName или formula, то вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

Типы данных: char | string

Преобразование оценки, указанное как вектор символа, скаляр строки или дескриптор функции.

В этой таблице представлены доступные векторы символов и строковые скаляры.

СтоимостьОписание
'doublelogit'1/( 1 + e-2x)
'invlogit'log (x/( 1 - x))
'ismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0
'logit'1/( 1 + e-x)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2x – 1
'symmetricismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1
'symmetriclogit'2/( 1 + e-x) - 1

Для функции MATLAB или определяемой функции используйте ее дескриптор функции для преобразования оценки. Дескриптор функции должен принимать матрицу (исходные баллы) и возвращать матрицу того же размера (преобразованные баллы).

Пример: 'ScoreTransform','logit'

Типы данных: char | string | function_handle

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор положительных значений или имя переменной в Tbl. Программное обеспечение взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк в X или Tbl.

Если входные данные указаны как таблица Tbl, то Weights может быть именем переменной в Tbl содержит числовой вектор. В этом случае необходимо указать Weights в виде вектора символов или строкового скаляра. Например, если вектор весов W хранится как Tbl.W, затем укажите его как 'W'. В противном случае программа обрабатывает все столбцы Tbl, в том числе W, в качестве предикторов или переменной ответа при обучении модели.

По умолчанию Weights является ones(n,1), где n - количество наблюдений в X или Tbl.

Программное обеспечение нормализуется Weights для суммирования значения предшествующей вероятности в соответствующем классе. Для получения более подробной информации о взаимоотношениях и алгоритмическом поведении BoxConstraint, Cost, Prior, Standardize, и Weights, см. Алгоритмы.

Типы данных: double | single | char | string

Примечание

Нельзя использовать любой аргумент пары имя-значение перекрестной проверки вместе с 'OptimizeHyperparameters' аргумент пары имя-значение. Можно изменить перекрестную проверку для 'OptimizeHyperparameters' только с помощью 'HyperparameterOptimizationOptions' аргумент пары имя-значение.

Параметры перекрестной проверки

свернуть все

Флаг для обучения перекрестно проверенного классификатора, указанного как разделенная запятыми пара, состоящая из 'Crossval' и 'on' или 'off'.

При указании 'on'затем программное обеспечение обучает перекрестно проверенный классификатор с 10 складками.

Этот параметр перекрестной проверки можно переопределить с помощью CVPartition, Holdout, KFold, или Leaveout аргумент пары имя-значение. Одновременно можно использовать только один аргумент пары имя-значение перекрестной проверки для создания модели с перекрестной проверкой.

Либо выполните перекрестную проверку позже путем передачи Mdl кому crossval.

Пример: 'Crossval','on'

Раздел перекрестной проверки, указанный как cvpartition объект секционирования, созданный cvpartition. Объект секционирования определяет тип перекрестной проверки и индексирования для наборов обучения и проверки.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный раздел для пятикратной перекрестной проверки 500 наблюдений с помощью cvp = cvpartition(500,'KFold',5). Затем можно указать модель с перекрестной проверкой с помощью 'CVPartition',cvp.

Доля данных, используемых для проверки удержания, заданная как скалярное значение в диапазоне (0,1). При указании 'Holdout',pзатем программное обеспечение выполняет следующие действия:

  1. Случайный выбор и резервирование p*100% данных в качестве данных проверки и обучение модели с использованием остальных данных.

  2. Храните компактную обучаемую модель в Trained свойства перекрестной проверенной модели.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

Типы данных: double | single

Число сгибов для использования в модели с перекрестной проверкой, указанное как положительное целое значение больше 1. При указании 'KFold',k, затем программное обеспечение выполняет следующие действия:

  1. Случайное разбиение данных на k наборы.

  2. Для каждого набора зарезервируйте набор в качестве данных проверки и обучайте модель с помощью другого k - 1 комплект.

  3. Сохранить k компактные, обученные модели в k-by-1 клеточный вектор в Trained свойства перекрестной проверенной модели.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

Типы данных: single | double

Флаг перекрестной проверки «оставить один», указанный как 'on' или 'off'. При указании 'Leaveout','on', то для каждого из n наблюдений (где n - количество наблюдений, исключая отсутствующие наблюдения, указанные в NumObservations свойство модели), программное обеспечение выполняет следующие действия:

  1. Зарезервируйте одно наблюдение в качестве данных проверки и обучите модель, используя другие наблюдения n-1.

  2. Храните n компактных обученных моделей в клеточном векторе n-by-1 в Trained свойства перекрестной проверенной модели.

Чтобы создать модель с перекрестной проверкой, можно указать только один из следующих четырех аргументов: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

Параметры управления сходимостью

свернуть все

Допуск для разности градиентов между верхними и нижними нарушителями, полученный с помощью последовательной минимальной оптимизации (SMO) или итерационного алгоритма одиночных данных (ISDA), указанного как пара, разделенная запятыми, состоящая из 'DeltaGradientTolerance' и неотрицательный скаляр.

Если DeltaGradientTolerance является 0, то программа не использует допуск для разности градиентов для проверки сходимости оптимизации.

Значения по умолчанию:

  • 1e-3 если решателем является SMO (например, задается 'Solver','SMO')

  • 0 если решателем является ISDA (например, задается 'Solver','ISDA')

Пример: 'DeltaGradientTolerance',1e-2

Типы данных: double | single

Допустимая величина зазора, полученная SMO или ISDA, указанная как пара, разделенная запятыми, состоящая из 'GapTolerance' и неотрицательный скаляр.

Если GapTolerance является 0, то программное обеспечение не использует допуск зазора выполнимости для проверки сходимости оптимизации.

Пример: 'GapTolerance',1e-2

Типы данных: double | single

Максимальное число итераций числовой оптимизации, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительное целое число.

Программное обеспечение возвращает обученную модель независимо от того, успешно ли сходится процедура оптимизации. Mdl.ConvergenceInfo содержит информацию о сходимости.

Пример: 'IterationLimit',1e8

Типы данных: double | single

Karush-Kuhn-Tucker (KKT) условия комплементарности условия нарушения допуска, указанные как разделенная запятыми пара, состоящая из 'KKTTolerance' и неотрицательный скаляр.

Если KKTTolerance является 0, то программное обеспечение не использует допуск нарушения условий комплементарности KKT для проверки сходимости оптимизации.

Значения по умолчанию:

  • 0 если решателем является SMO (например, задается 'Solver','SMO')

  • 1e-3 если решателем является ISDA (например, задается 'Solver','ISDA')

Пример: 'KKTTolerance',1e-2

Типы данных: double | single

Число итераций между сокращениями активного набора, указанного как пара, разделенная запятыми, состоящая из 'ShrinkagePeriod' и неотрицательное целое число.

Если установить 'ShrinkagePeriod',0, то программное обеспечение не сжимает активный аппарат.

Пример: 'ShrinkagePeriod',1000

Типы данных: double | single

Параметры оптимизации гиперпараметров

свернуть все

Параметры для оптимизации, указанные как пара, разделенная запятыми, состоящая из 'OptimizeHyperparameters' и одно из этих значений:

  • 'none' - Не оптимизировать.

  • 'auto' - Использование {'BoxConstraint','KernelScale'}.

  • 'all' - Оптимизируйте все подходящие параметры.

  • Строковый массив или массив ячеек допустимых имен параметров.

  • Вектор optimizableVariable объекты, обычно выходные данные hyperparameters.

Оптимизация пытается минимизировать потери при перекрестной проверке (ошибка) для fitcsvm путем изменения параметров. Сведения о потерях при перекрестной проверке см. в разделе Потери при классификации. Для управления типом перекрестной проверки и другими аспектами оптимизации используйте HyperparameterOptimizationOptions аргумент пары имя-значение.

Примечание

'OptimizeHyperparameters' значения переопределяют любые значения, заданные с помощью других аргументов пары «имя-значение». Например, настройка 'OptimizeHyperparameters' кому 'auto' вызывает 'auto' значения для применения.

Подходящие параметры для fitcsvm являются:

  • BoxConstraintfitcsvm поиск среди положительных значений, по умолчанию с логарифмическим масштабированием в диапазоне [1e-3,1e3].

  • KernelScalefitcsvm поиск среди положительных значений, по умолчанию с логарифмическим масштабированием в диапазоне [1e-3,1e3].

  • KernelFunctionfitcsvm поиск среди 'gaussian', 'linear', и 'polynomial'.

  • PolynomialOrderfitcsvm поиск среди целых чисел в диапазоне [2,4].

  • Standardizefitcsvm поиск среди 'true' и 'false'.

Установка параметров, не используемых по умолчанию, путем передачи вектора optimizableVariable объекты, не имеющие значений по умолчанию. Например:

load fisheriris
params = hyperparameters('fitcsvm',meas,species);
params(1).Range = [1e-4,1e6];

Проход params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение отображается в командной строке, а графики отображаются в соответствии с количеством гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является log ( 1 + потери при перекрестной проверке) для регрессии и коэффициент неправильной классификации для классификации. Для управления итеративным отображением установите Verbose области 'HyperparameterOptimizationOptions' аргумент пары имя-значение. Для управления графиками установите ShowPlots области 'HyperparameterOptimizationOptions' аргумент пары имя-значение.

Пример см. в разделе Оптимизация классификатора SVM.

Пример: 'auto'

Опции оптимизации, указанные как разделенная запятыми пара, состоящая из 'HyperparameterOptimizationOptions' и структура. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент пары имя-значение. Все поля в структуре являются необязательными.

Имя поляЦенностиДефолт
Optimizer
  • 'bayesopt' - использовать байесовскую оптимизацию. Внутренний вызов этого параметра bayesopt.

  • 'gridsearch' - Использовать поиск по сетке с NumGridDivisions значения для измерения.

  • 'randomsearch' - Случайный поиск среди MaxObjectiveEvaluations точки.

'gridsearch' ищет в случайном порядке, используя равномерную выборку без замены из сетки. После оптимизации можно получить таблицу в порядке сетки с помощью команды sortrows(Mdl.HyperparameterOptimizationResults).

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

Функции приобретения, имена которых включают per-second не дают воспроизводимых результатов, поскольку оптимизация зависит от времени выполнения целевой функции. Функции приобретения, имена которых включают plus изменять их поведение при чрезмерной эксплуатации области. Для получения дополнительной информации см. Типы функций сбора данных.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество оценок целевой функции.30 для 'bayesopt' или 'randomsearch'и вся сетка для 'gridsearch'
MaxTime

Ограничение по времени, указанное как положительный реал. Ограничение по времени в секундах, измеренное tic и toc. Время выполнения может превышать MaxTime потому что MaxTime не прерывает оценки функций.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждом измерении. Значение может быть вектором положительных целых чисел, дающим количество значений для каждого измерения, или скаляром, который применяется ко всем измерениям. Это поле игнорируется для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показывать ли графики. Если trueв этом поле отображается наилучшее значение целевой функции относительно номера итерации. Если имеется один или два параметра оптимизации, и если Optimizer является 'bayesopt', то ShowPlots также строит график модели целевой функции по параметрам.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранять ли результаты при Optimizer является 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области с именем 'BayesoptResults' на каждой итерации. Переменная является BayesianOptimization объект.false
Verbose

Отображение в командной строке.

  • 0 - Нет итеративного дисплея

  • 1 - Итеративный дисплей

  • 2 - Итеративный дисплей с дополнительной информацией

Для получения более подробной информации см. bayesopt Verbose аргумент пары имя-значение.

1
UseParallelЛогическое значение, указывающее, выполнять ли байесовскую оптимизацию параллельно, что требует Toolbox™ параллельных вычислений. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно дает воспроизводимые результаты. Дополнительные сведения см. в разделе Параллельная байесовская оптимизация.false
Repartition

Логическое значение, указывающее, следует ли перераспределять перекрестную проверку при каждой итерации. Если falseоптимизатор использует один раздел для оптимизации.

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

false
Используйте не более одного из следующих трех имен полей.
CVPartitionA cvpartition объект, созданный cvpartition.'Kfold',5 если не указано какое-либо поле перекрестной проверки
HoldoutСкаляр в диапазоне (0,1) представляет собой удерживающую фракцию.
KfoldЦелое число больше 1.

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

Типы данных: struct

Выходные аргументы

свернуть все

Обученная модель классификации SVM, возвращенная как ClassificationSVM объект модели или ClassificationPartitionedModel объект модели с перекрестной проверкой.

Если задать какой-либо из аргументов пары имя-значение KFold, Holdout, Leaveout, CrossVal, или CVPartition, то Mdl является ClassificationPartitionedModel перекрестно проверенный классификатор. В противном случае Mdl является ClassificationSVM классификатор.

Для ссылки на свойства Mdl, используйте точечную нотацию. Например, введите Mdl.Alpha в окне команд для отображения обученных множителей Лагранжа.

Ограничения

  • fitcsvm подготовка классификаторов SVM для одноклассных или двухклассных учебных приложений. Для обучения классификаторов SVM с использованием данных более двух классов используйте fitcecoc.

  • fitcsvm поддерживает низкоразмерные и умеренно-размерные наборы данных. Для высокоразмерных наборов данных используйте fitclinear вместо этого.

Подробнее

свернуть все

Ограничение рамки

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

При увеличении ограничения поля классификатор SVM назначает меньше векторов поддержки. Однако увеличение ограничения коробки может привести к увеличению времени обучения.

Граммовая матрица

Матрица Грама набора из n векторов {x1,.., xn; xjRp} - матрица n-by-n с элементом (j, k), определяемым как G (xj, xk) = <

Для нелинейных SVM алгоритм формирует Gram-матрицу, используя строки данных предиктора X. Двойственная формализация заменяет внутреннее произведение наблюдений в X соответствующими элементами результирующей Gram-матрицы (называемой «хитростью ядра»). Следовательно, нелинейная SVM работает в преобразованном предикторном пространстве, чтобы найти разделяющую гиперплоскость.

Условия комплементарности Karush-Kuhn-Tucker (KKT)

Условия комплементарности KKT - это ограничения оптимизации, необходимые для оптимальных решений нелинейного программирования.

В SVM условия комплементарности KKT:

{αj [yjf (xj) 1 +

для всего j = 1..., n, где f (xj) = ϕ (xj) β + b, ϕ является ядерной функцией (см. матрицу Грамма), и ξj слабая переменная. Если классы являются совершенно разделяемыми, то, для всех j = 1,..., n.

Одноклассное обучение

Одноклассное обучение, или неконтролируемое SVM, направлено на отделение данных от источника в высокомерном предикторном пространстве (не исходном предикторном пространстве) и является алгоритмом, используемым для обнаружения отклонений.

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

0.5∑jkαjαkG (xj, xk)

в отношении α1,..., αn, при условии

∑αj=nν

и 0≤αj≤1 для всех j = 1,..., n. Значение G (xj, xk) находится в элементе (j, k) матрицы Грамма.

Малое значение startприводит к меньшему количеству векторов поддержки и, следовательно, гладкой границе грубого решения. Большое значение startприводит к большему количеству векторов поддержки и, следовательно, к криволинейной, гибкой границе принятия решения. Оптимальная величина, которая должна быть достаточно большой, чтобы фиксировать сложность данных, и достаточно малой, чтобы избежать перетренирования. Кроме того, 0 < start ≤ 1.

Для получения дополнительной информации см. [5].

Вектор поддержки

Векторы поддержки представляют собой наблюдения, соответствующие строго положительным оценкам α1,..., αn.

Предпочтительны классификаторы SVM, которые дают меньше векторов поддержки для данного обучающего набора.

Поддержка векторных машин для двоичной классификации

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

Линейная функция оценки SVM

f (x) =x′β+b,

где:

  • x - наблюдение (соответствующее строке X).

  • Вектор β содержит коэффициенты, которые определяют ортогональный вектор к гиперплоскости (соответствующий Mdl.Beta). Для разделяемых данных оптимальная длина запаса составляет 2/ β ‖.

  • b - член смещения (соответствующий Mdl.Bias).

Корень f (x) для конкретных коэффициентов определяет гиперплоскость. Для конкретной гиперплоскости f (z) - расстояние от точки z до гиперплоскости.

Алгоритм ищет максимальную длину запаса, сохраняя при этом наблюдения в положительном (y = 1) и отрицательном (y = -1) классах раздельными.

  • Для разделяемых классов целью является минимизация β ‖ по отношению к β и b при условии yjf (xj) ≥ 1, для всех j = 1,.., n. Это основная формализация для разделяемых классов.

  • Для неотделимых классов алгоритм использует переменные проволочек (startj), чтобы наказать целевую функцию за наблюдения, которые пересекают границу маржи для своего класса. ξj = 0 для наблюдений, которые не пересекают границу края для их класса, иначе ξj ≥ 0.

    Цель состоит в том, чтобы минимизировать 0.5‖β‖2+C∑ξj по отношению к β, b и (j), подчиняющимся yjf (xj) ≥1−ξj и ξj≥0 для всех j = 1,.., n, и для положительного ограничения скалярного поля C. Это основная формализация для неотделимых классов.

Алгоритм использует метод множителей Лагранжа для оптимизации цели, который вводит n коэффициентов α1,..., αn (соответствующих Mdl.Alpha). Двойные формализации для линейного SVM следующие:

  • Для разделяемых классов минимизируйте

    0.5∑j=1n∑k=1nαjαkyjykxj′xk−∑j=1nαj

    относительно α1,..., αn, при условии ∑αjyj=0, αj ≥ 0 для всех условий комплементарности j = 1,..., n и Karush-Kuhn-Tucker (KKT).

  • Для неотделимых классов цель та же, что и для разделяемых классов, за исключением дополнительного условия 0≤αj≤C для всех j = 1,.., n.

Результирующая функция оценки

f ^ (x) =∑j=1nα^jyjx′xj+b^.

b ^ - оценка смещения, а α ^ j - j-я оценка вектора α ^, j = 1,..., n. Написанная таким образом, функция оценки свободна от оценки β в результате первичной формализации.

Алгоритм SVM классифицирует новое наблюдение z с использованием знака (f ^ (z)).

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

Двойная формализация для нелинейного SVM

0.5∑j=1n∑k=1nαjαkyjykG (xj, xk) −∑j=1nαj

относительно α1,..., αn, при условии ∑αjyj=0, 0≤αj≤C для всех j = 1,.., n и условий комплементарности KKT. G (xk, xj) - элементы матрицы Грама. Результирующая функция оценки

f ^ (x) =∑j=1nα^jyjG (x, xj) + b ^.

Дополнительные сведения см. в разделах Общие сведения о системах поддержки векторов [1] и [3].

Совет

  • Если набор данных не велик, всегда старайтесь стандартизировать предикторы (см. Standardize). Стандартизация делает предикторы нечувствительными к масштабам, по которым они измеряются.

  • Рекомендуется выполнять перекрестную проверку с использованием KFold аргумент пары имя-значение. Результаты перекрестной проверки определяют, насколько хорошо классификатор SVM обобщается.

  • Для одноклассного обучения:

    • Параметр по умолчанию для аргумента пары имя-значение Alpha может привести к длительным тренировкам. Чтобы ускорить обучение, установите Alpha к вектору, в основном состоящему из 0s.

    • Задать аргумент пары имя-значение Nu к значению ближе к 0 для получения меньшего количества векторов поддержки и, следовательно, более гладкой, но грубой границы принятия решения.

  • Разреженность в векторах поддержки является желательным свойством классификатора SVM. Для уменьшения числа векторов поддержки установите BoxConstraint к большому значению. Это действие увеличивает время обучения.

  • Для оптимального времени обучения установите CacheSize насколько это позволяет ограничение памяти компьютера.

  • Если ожидается гораздо меньше векторов поддержки, чем наблюдений в обучающем наборе, то можно значительно ускорить сходимость, сжимая активный набор с помощью аргумента пары имя-значение 'ShrinkagePeriod'. Это хорошая практика, чтобы уточнить 'ShrinkagePeriod',1000.

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

    • Набор данных содержит множество повторяющихся наблюдений.

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

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

  • После обучения модели можно создать код C/C + +, который предсказывает метки для новых данных. Для создания кода C/C + + требуется Coder™ MATLAB. Дополнительные сведения см. в разделе Введение в создание кода .

Алгоритмы

  • Математическую формулировку алгоритма двоичной классификации SVM см. в разделе Поддержка векторных машин для двоичной классификации и понимание поддержки векторных машин.

  • NaN, <undefined>, пустой символьный вектор (''), пустая строка (""), и <missing> значения указывают на отсутствие значений. fitcsvm удаляет целые строки данных, соответствующие отсутствующему ответу. При вычислении общих весов (см. следующие маркеры), fitcsvm игнорирует любой вес, соответствующий наблюдению, по меньшей мере, с одним отсутствующим предиктором. Это действие может привести к несбалансированности предыдущих вероятностей в проблемах сбалансированного класса. Следовательно, ограничения поля наблюдения могут не совпадать BoxConstraint.

  • fitcsvm удаляет наблюдения, которые имеют нулевой вес или предшествующую вероятность.

  • Для двухклассного обучения, если указать матрицу затрат C (см. Cost), то программное обеспечение обновляет класс предыдущих вероятностей p (см. Prior) к pc путем включения штрафов, описанных в C.

    В частности, fitcsvm выполняет следующие действия:

    1. Вычислить pc∗=p′C.

    2. Нормализуйте pc * так, чтобы обновленные предыдущие вероятности были равны 1.

      pc=1∑j=1Kpc,j∗pc∗.

      K - количество классов.

    3. Сброс матрицы затрат до значения по умолчанию

      C = [0110].

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

  • Для двухклассного обучения, fitcsvm нормализует все веса наблюдения (см. Weights) для суммирования в 1. Затем функция перенормирует нормализованные веса для суммирования обновленной предшествующей вероятности класса, к которому относится наблюдение. То есть общий вес для наблюдения j в классе k равен

    wj∗=wj∑∀j∈Class kwjpc, k.

    wj - нормализованный вес для наблюдения j; pc, k - обновленная предшествующая вероятность класса k (см. предыдущий маркер).

  • Для двухклассного обучения, fitcsvm назначает ограничение поля для каждого наблюдения в данных обучения. Формула ограничения поля для наблюдения j

    Cj=nC0wj∗.

    n - размер обучающей выборки, C0 является начальным ограничением поля (см. 'BoxConstraint' аргумент пары имя-значение), и wj∗ - общий вес наблюдения j (см. предыдущий маркер).

  • Если установить 'Standardize',true и 'Cost', 'Prior', или 'Weights' аргумент пары имя-значение, затем fitcsvm стандартизирует предикторы, используя их соответствующие взвешенные средства и взвешенные стандартные отклонения. То есть fitcsvm стандартизирует предиктор j (xj) с использованием

    xj∗=xj−μj∗σj∗.

    μj∗=1∑kwk∗∑kwk∗xjk.

    xjk - наблюдение k (строка) предиктора j (столбец).

    (σj∗) 2=v1v12−v2∑kwk∗ (xjk−μj∗) 2.

    v1=∑jwj∗.

    v2=∑j (wj∗) 2.

  • Предположим, что p - доля отклонений, которые ожидаются в данных обучения и которые устанавливаются 'OutlierFraction',p.

    • Для одноклассного обучения программное обеспечение обучает термин смещения таким образом, что 100p% наблюдений в данных обучения имеют отрицательные оценки.

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

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

    • PredictorNames свойство сохраняет один элемент для каждого из исходных имен переменных предиктора. Например, предположим, что существует три предиктора, один из которых является категориальной переменной с тремя уровнями. Тогда PredictorNames является массивом ячеек 1 на 3 символьных векторов, содержащих исходные имена переменных предиктора.

    • ExpandedPredictorNames свойство сохраняет один элемент для каждой из переменных предиктора, включая фиктивные переменные. Например, предположим, что существует три предиктора, один из которых является категориальной переменной с тремя уровнями. Тогда ExpandedPredictorNames - клеточный массив символьных векторов, содержащий имена переменных предиктора и новых фиктивных переменных.

    • Аналогично, Beta свойство хранит один бета-коэффициент для каждого предиктора, включая фиктивные переменные.

    • SupportVectors свойство сохраняет предикторные значения для векторов поддержки, включая фиктивные переменные. Например, предположим, что существуют m векторов поддержки и три предиктора, один из которых является категориальной переменной с тремя уровнями. Тогда SupportVectors является матрицей n-by-5.

    • X свойство сохраняет данные обучения в качестве исходных данных и не включает фиктивные переменные. Если вводом является таблица, X содержит только столбцы, используемые в качестве предикторов.

  • Для предикторов, указанных в таблице, если какая-либо из переменных содержит упорядоченные (порядковые) категории, программное обеспечение использует кодировку порядковых номеров для этих переменных.

    • Для переменной с k упорядоченными уровнями программа создает k-1 фиктивных переменных. j-я фиктивная переменная равна -1 для уровней до j и + 1 для уровней j + 1-k.

    • Имена фиктивных переменных, сохраненных в ExpandedPredictorNames свойство указывает первый уровень со значением + 1. Программа сохраняет k-1 дополнительных предикторных имен для фиктивных переменных, включая имена уровней 2, 3,..., k.

  • Все решатели реализуют L1 минимизацию мягких полей.

  • Для одноклассного обучения программное обеспечение оценивает множители Лагранжа, α1,..., αn, такие, что

    ∑j=1nαj=nν.

Ссылки

[1] Кристианини, Н. и Дж. К. Шаве-Тейлор. Введение в поддержку векторных машин и других методов обучения на основе ядра. Кембридж, Великобритания: Cambridge University Press, 2000.

[2] Вентилятор, R.-E., P.-H. Чен и К.-Ж. Лин. «Выбор рабочего набора с использованием информации второго порядка для тренировочных машин поддержки векторов». Журнал исследований машинного обучения, том 6, 2005, стр. 1889-1918.

[3] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения, второе издание. Нью-Йорк: Спрингер, 2008.

[4] Кекман В., Т. -М. Хуан и М. Фогт. «Итеративный алгоритм одиночных данных для обучения машин ядра из огромных наборов данных: теория и производительность». Поддержка векторных машин: теория и приложения. Под редакцией Липо Вана, 255-274. Берлин: Спрингер-Верлаг, 2005.

[5] Шолкопф, Б., Дж. С. Платт, Дж. С. Шаве-Тейлор, А. Дж. Смола и Р. К. Уильямсон. «Оценка поддержки высокоразмерного распределения». Нейронный компут., т. 13, номер 7, 2001, стр. 1443-1471.

[6] Шолкопф, Б. и А. Смола. Обучение с ядрами: поддержка векторных машин, регуляризация, оптимизация и далее, адаптивные вычисления и машинное обучение. Кембридж, Массачусетс: MIT Press, 2002.

Расширенные возможности

Представлен в R2014a