fitcsvm

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

Описание

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

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

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

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

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

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

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

пример

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

пример

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

Примеры

свернуть все

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

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 перекрестный подтвержденный классификатор.

Оцените misclassification уровень из выборки.

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 представляет переменную отклика и x1x2 , и 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

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

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

G(xj,xk)=exp(xjxk2)

'linear'Линейное ядро, значение по умолчанию для изучения 2D класса

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. Затем программное обеспечение применяет соответствующую норму ядра, чтобы вычислить матрицу Грамма.

  • Если вы задаете 'auto', затем программное обеспечение выбирает соответствующий масштабный коэффициент с помощью эвристической процедуры. Эта эвристическая процедура использует подвыборку, таким образом, оценки могут варьироваться от одного вызова до другого. Поэтому, чтобы воспроизвести результаты, установите использование seed случайных чисел 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

Типы данных: логический

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

ЗначениеОписание
'ISDA'Итеративный один алгоритм данных (см. [30]),
'L1QP'Использование quadprog (Optimization Toolbox), чтобы реализовать L 1 мягко-граничная минимизация квадратичным программированием. Эта опция требует лицензии Optimization Toolbox™. Для получения дополнительной информации см. Определение Квадратичного программирования (Optimization Toolbox).
'SMO'Последовательная минимальная оптимизация (см. [17]),

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

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

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

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

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

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

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

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

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

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

  • zeros(size(X,1),1) для изучения 2D класса

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

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

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

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

Если 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

Типы данных: логический

Параметр ν для Изучения Одного класса в виде разделенной запятой пары, состоящей из '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.

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

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

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

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

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

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

Совет

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

Типы данных: логический

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

Эта таблица суммирует доступные опции уровня многословия.

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

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

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

Другие опции классификации

свернуть все

Категориальные предикторы перечисляют в виде одного из значений в этой таблице.

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Cost(i,j) = 1 если i ~= j и Cost(i,j) = 0 если i = j для изучения 2D класса

Пример: '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.

Для изучения 2D класса, если вы задаете матрицу стоимости, затем обновления программного обеспечения априорные вероятности путем слияния штрафов, описанных в матрице стоимости. Для получения дополнительной информации об отношениях и алгоритмическом поведении 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 + 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 единицы (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% из данных как данные о валидации, и обучают модель с помощью остальной части данных.

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

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

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

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

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

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

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

  3. Сохраните k компактные, обученные модели в k- 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.

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

Для примера смотрите, Оптимизируют Классификатор SVM.

Пример: 'auto'

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

Имя поляЗначенияЗначение по умолчанию
Optimizer
  • 'bayesopt' — Используйте Байесовую оптимизацию. Внутренне, эта установка вызовы bayesopt.

  • 'gridsearch' — Используйте поиск сетки с NumGridDivisions значения на размерность.

  • 'randomsearch' — Поиск наугад среди MaxObjectiveEvaluations 'points'.

'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
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitioncvpartition объект, как создано 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 одного класса или приложениям изучения 2D класса. Чтобы обучить классификаторы SVM с помощью данных больше чем с двумя классами, использовать fitcecoc.

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

Больше о

свернуть все

Ограничение поля

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

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

Матрица грамма

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

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

Условия взаимозависимости Karush-Kuhn-Tucker (KKT)

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

В SVM условия взаимозависимости KKT

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

для всего j = 1..., n, где f(xj)=ϕ(xj)β+b, ϕ является функцией ядра (см. матрицу Грамма), и ξj является слабой переменной. Если классы совершенно отделимы, то ξ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) матрицы Грамма.

Маленькое значение ν приводит к меньшему количеству векторов поддержки и, поэтому, сглаженный, грубый контур решения. Большое значение ν ведет, чтобы больше поддержать векторы и, поэтому, соблазнительный, гибкий контур решения. Оптимальное значение ν должно быть достаточно большим, чтобы получить сложность данных и достаточно маленький, чтобы не перетренироваться. Кроме того, 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 для отделимых классов.

  • Для неотделимых классов алгоритм использует слабые переменные (ξ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 th оценка вектора α^, 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 к вектору, в основном состоявшему из 0s.

    • Установите аргумент пары "имя-значение" 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 удаляет наблюдения, которые имеют нулевой вес или априорную вероятность.

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

    А именно, fitcsvm завершает эти шаги:

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

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

      pc=1j=1Kpc,jpc.

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

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

      C=[0110].

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

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

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

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

  • Для изучения 2D класса, 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

    j=1nαj=nν.

Ссылки

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

[2] Вентилятор, R.-E., P.-H. Чен и C.-J. Лин. “Выбор рабочего набора с помощью информации о втором порядке для учебных машин опорных векторов”. Журнал Исследования Машинного обучения, Издания 6, 2005, стр 1889–1918.

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

[4] Кекмен V, T.-M. Хуан и М. Вогт. “Итеративный Один Алгоритм Данных для Учебных Машин Ядра от Огромных Наборов данных: Теория и Эффективность”. Машины опорных векторов: Теория и Приложения. Отредактированный Липо Ваном, 255–274. Берлин: Springer-Verlag, 2005.

[5] Scholkopf, B., Дж. К. Платт, Дж. К. Шейв-Тейлор, А. Дж. Смола и Р. К. Уильямсон. “Оценивая Поддержку Высоко-размерного Распределения”. Нейронный Comput., Издание 13, Номер 7, 2001, стр 1443–1471.

[6] Scholkopf, B. и A. Смола. Изучение с ядрами: машины опорных векторов, регуляризация, оптимизация и вне, адаптивный расчет и машинное обучение. Кембридж, MA: нажатие MIT, 2002.

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

Введенный в R2014a
Для просмотра документации необходимо авторизоваться на сайте