fitcsvm

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

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

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

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

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

Синтаксис

Mdl = fitcsvm(Tbl,ResponseVarName)
Mdl = fitcsvm(Tbl,formula)
Mdl = fitcsvm(Tbl,Y)
Mdl = fitcsvm(X,Y)
Mdl = fitcsvm(___,Name,Value)

Описание

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 array
    {'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

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

Можно настроить контуры (и, поэтому, количество векторов поддержки) путем установки ограничения поля во время обучения с помощью аргумента пары "имя-значение" '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

Контур, разделяющий выбросы от остальной части данных, происходит, где значением контура является 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');

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

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

  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

Оптимизируйте гиперпараметры автоматически с помощью 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   | BoxConstrain-|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    | t            |              |
|=====================================================================================================|
|    1 | Best   |     0.21652 |      18.493 |     0.21652 |     0.21652 |       64.836 |    0.0015729 |
|    2 | Accept |     0.35897 |     0.16509 |     0.21652 |     0.22539 |     0.036335 |       5.5755 |
|    3 | Best   |     0.13105 |       7.131 |     0.13105 |     0.14152 |    0.0022147 |    0.0023957 |
|    4 | Accept |     0.35897 |     0.10991 |     0.13105 |     0.13108 |       5.1259 |        98.62 |
|    5 | Accept |      0.1339 |      14.513 |     0.13105 |     0.13111 |    0.0011599 |    0.0010098 |
|    6 | Accept |     0.13105 |      3.3991 |     0.13105 |     0.13106 |    0.0010151 |    0.0045756 |
|    7 | Best   |     0.12821 |      9.0972 |     0.12821 |     0.12819 |    0.0010563 |    0.0022307 |
|    8 | Accept |      0.1339 |      11.601 |     0.12821 |     0.13013 |    0.0010113 |    0.0026572 |
|    9 | Accept |     0.12821 |      6.4781 |     0.12821 |     0.12976 |    0.0010934 |    0.0022461 |
|   10 | Accept |     0.12821 |      3.8203 |     0.12821 |     0.12933 |    0.0010315 |    0.0023551 |
|   11 | Accept |      0.1396 |       17.31 |     0.12821 |     0.12954 |       994.04 |      0.20756 |
|   12 | Accept |     0.13105 |      16.182 |     0.12821 |     0.12945 |       20.145 |     0.044584 |
|   13 | Accept |     0.21368 |      18.317 |     0.12821 |     0.12787 |       903.79 |     0.056122 |
|   14 | Accept |      0.1339 |     0.26202 |     0.12821 |     0.12939 |     0.018688 |     0.038639 |
|   15 | Accept |     0.12821 |      2.8504 |     0.12821 |      0.1295 |       5.6464 |      0.15938 |
|   16 | Accept |     0.13675 |      9.4282 |     0.12821 |     0.12798 |       0.5485 |     0.020716 |
|   17 | Accept |     0.12821 |      6.5178 |     0.12821 |     0.12955 |       1.2899 |     0.063233 |
|   18 | Accept |      0.1339 |      9.3664 |     0.12821 |     0.12957 |       869.51 |      0.94889 |
|   19 | Accept |     0.13675 |       9.368 |     0.12821 |     0.12957 |       112.89 |      0.31231 |
|   20 | Accept |     0.13105 |     0.12209 |     0.12821 |     0.12958 |    0.0010803 |      0.03695 |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstrain-|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    | t            |              |
|=====================================================================================================|
|   21 | Accept |     0.13675 |      9.5117 |     0.12821 |      0.1299 |       7.7299 |     0.076169 |
|   22 | Best   |     0.12536 |     0.17058 |     0.12536 |     0.13007 |    0.0010485 |     0.013248 |
|   23 | Accept |     0.20228 |      18.202 |     0.12536 |     0.12548 |     0.060212 |    0.0010323 |
|   24 | Accept |      0.1339 |     0.24592 |     0.12536 |     0.12556 |      0.30698 |      0.16097 |
|   25 | Accept |      0.1339 |      15.142 |     0.12536 |     0.12923 |       963.05 |       0.5183 |
|   26 | Accept |     0.13675 |     0.27628 |     0.12536 |     0.12888 |    0.0039748 |     0.015475 |
|   27 | Accept |      0.1339 |      1.5718 |     0.12536 |     0.12889 |      0.33582 |     0.066787 |
|   28 | Accept |      0.1339 |      15.411 |     0.12536 |     0.12884 |       4.2069 |     0.032774 |
|   29 | Best   |     0.12536 |     0.13208 |     0.12536 |     0.12658 |    0.0010233 |     0.017839 |
|   30 | Accept |     0.12536 |     0.13041 |     0.12536 |     0.12579 |    0.0010316 |     0.019592 |

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

Best observed feasible point:
    BoxConstraint    KernelScale
    _____________    ___________

      0.0010233       0.017839  

Observed objective function value = 0.12536
Estimated objective function value = 0.12579
Function evaluation time = 0.13208

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

      0.0010233       0.017839  

Estimated objective function value = 0.12579
Estimated function evaluation time = 0.1535
Mdl = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                                Alpha: [91×1 double]
                                 Bias: -5.6976
                     KernelParameters: [1×1 struct]
                       BoxConstraints: [351×1 double]
                      ConvergenceInfo: [1×1 struct]
                      IsSupportVector: [351×1 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.Properties.VariableNames).

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

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

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

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

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

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

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

  • Если вы задаете '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) для изучения 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

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

свернуть все

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

ЗначениеОписание
Вектор положительных целых чиселЗапись в векторе является индексным значением, соответствующим столбцу данных о предикторе (X или Tbl), который содержит категориальную переменную.
Логический векторЗапись true означает, что соответствующий столбец данных о предикторе (X или Tbl) является категориальной переменной.
Символьная матрицаКаждая строка матрицы является именем переменной прогноза. Имена должны совпадать с записями в PredictorNames. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
Массив строк или массив ячеек из символьных векторовКаждый элемент в массиве является именем переменной прогноза. Имена должны совпадать с записями в PredictorNames.
всеВсе предикторы являются категориальными.

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

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

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

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

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

Используйте ClassNames для:

  • Закажите классы во время обучения.

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

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

Значение по умолчанию для ClassNames является набором всех отличных имен классов в 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' и массив строк уникальных имен или массив ячеек уникальных векторов символов. Функциональность '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

Имя переменной отклика, заданное как пара, разделенная запятой, состоящая из 'ResponseName' и вектора символов или скаляра строки.

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

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

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

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

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

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

ЗначениеОписание
'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 является ones(n,1), где n является количеством наблюдений в X или Tbl.

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

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

Примечание

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

Опции перекрестной проверки

свернуть все

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

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

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

Также перекрестный подтвердите позже путем передачи Mdl crossval.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Флаг перекрестной проверки "Пропускает один", заданный как пара, разделенная запятой, состоящая из 'Leaveout' и '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'}.

  • все Оптимизируйте все имеющие право параметры.

  • Массив строк или массив ячеек имеющих право названий параметра.

  • Вектор объектов 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.

'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
Используйте не больше, чем одни из следующих трех имен полей.
CVPartitionОбъект cvpartition, как создано cvpartition.'Kfold',5, если вы не задаете поля перекрестной проверки
HoldoutСкаляр в области значений (0,1), представляющий часть затяжки.
KfoldЦелое число, больше, чем 1.

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

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

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

свернуть все

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

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

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

Ограничения

  • fitcsvm обучает классификаторы SVM одного класса или приложениям изучения 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 знак(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 s.

    • Установите аргумент пары "имя-значение" 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