fitcsvm

Обучите классификатор машины опорных векторов (SVM) для одноклассовой и двоичной классификации

Описание

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

Чтобы обучить линейную модель 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. По умолчанию программа использует 10-кратную перекрестную валидацию.

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

Найдите гиперпараметры, которые минимизируют пятикратные потери при перекрестной проверке с помощью автоматической оптимизации гипероптимизации параметров управления. Для воспроизводимости установите случайный seed и используйте '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) матрицы Грамма, где xj и xk p - размерные векторы, представляющие наблюдения j и k в X. Эта таблица описывает поддерживаемые имена функции ядра и их функциональные формы.

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

G(xj,xk)=exp(xjxk2)

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

G(xj,xk)=xjxk

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

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

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

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

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

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

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

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

Рекомендуется избегать использования родовых имен для функций ядра. Например, вызовите функцию сигмоидного ядра '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 каждому элементу матрицы Грамма.

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

  • 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) для реализации L 1 минимизации мягкого запаса путем квадратичного программирования. Для этой опции требуется лицензия Optimization Toolbox™. Для получения дополнительной информации смотрите Определение квадратичного программирования (Optimization Toolbox).
'SMO'Последовательная минимальная оптимизация (см. [17])

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

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

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

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

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

  • Если вы задаете '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 -by 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.

  • Для двухклассного обучения программное обеспечение реализует robust learning. Другими словами, программное обеспечение пытается удалить 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 использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The '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, который содержит имена классов как переменный совпадающий тип данных as 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'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 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 это таковые (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.

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

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

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

  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-на-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

Допуск на нарушение условий комплементарности Каруша-Куна-Такера (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'.

Установите параметры nondefault путем передачи вектора optimizableVariable объекты, которые имеют значения nondefault. Для примера:

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

Передайте params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков целевой функцией является журнал ( 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Логическое значение, указывающее, запускать ли байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Для получения дополнительной информации см. «Параллельная байесовская оптимизация».false
Repartition

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

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

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

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

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

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

свернуть все

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

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

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

Ограничения

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

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

Подробнее о

свернуть все

Прямоугольное ограничение

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

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

Грамм- Матрица

Матрица Грамма множества n векторов {x 1,.., xn; xj ∊ Rp} n n матрицей с элементом (j, k) определен как G (xj, xk) = <ϕ (<reservedrangesplaceholder3>), ϕ (<reservedrangesplaceholder1>)>, скалярное произведение преобразованных предсказателей, использующих ядерную функцию ϕ.

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

Условия комплементарности Каруша-Куна-Такера (KKT)

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

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

{αj[yjf(xj)1+ξj]=0ξj(Cαj)=0

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

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

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

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

0.5jkαjαkG(xj,xk)

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

αj=nν

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

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

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

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

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

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

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

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

Линейная функция счета SVM

f(x)=xβ+b,

где:

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

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

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

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

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

  • Для разделяемых классов цель состоит в том, чтобы минимизировать β относительно β и b, удовлетворяющих yj f (xj) ≥ 1, для всех j = 1,.., n. Это - primal формализация для разделяемых классов.

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

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

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

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

    0.5j=1nk=1nαjαkyjykxjxkj=1nαj

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

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

Получившийся счет функция является

f^(x)=j=1nα^jyjxxj+b^.

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

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

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

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

0.5j=1nk=1nαjαkyjykG(xj,xk)j=1nαj

в отношении α 1,..., αn, при условии αjyj=0, 0αjC для всех j = 1,.., n и условий комплементарности KKT. G (xk, xj) являются элементами матрицы Грамма. Получившийся счет функция является

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

Для получения дополнительной информации см. «Общие сведения о машинах опорных векторов», [1] и [3].

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

Алгоритмы

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

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

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

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

    В частности, fitcsvm завершает следующие шаги:

    1. Вычислить pc=pC.

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

      pc=1j=1Kpc,jpc.

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

    3. Обнулите матрицу затрат по умолчанию

      C=[0110].

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

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

    wj=wjjКласс kwjpc,k.

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

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

    Cj=nC0wj.

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

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

    xj=xjμjσj.

    μj=1kwkkwkxjk.

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

    (σj)2=v1v12v2kwk(xjkμj)2.

    v1=jwj.

    v2=j(wj)2.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    j=1nαj=nν.

Ссылки

[1] Christianini, N., and J. C. Shawe-Taylor. Введение в машины опорных векторов и других основанных на ядре методов обучения. Кембридж, Великобритания: Cambridge University Press, 2000.

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

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

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

[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. Оценка поддержки высокомерного распределения. Нейронный компут., Vol. 13, Number 7, 2001, pp. 1443-1471.

[6] Scholkopf, B., and A. Smola. Обучение с ядерными ядрами: Машины опорных векторов, регуляризация, оптимизация и далее, адаптивные расчеты и машинное обучение. Cambridge, MA: The MIT Press, 2002.

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

Введенный в R2014a