fitPosterior

Подходящие апостериорные вероятности для классификатора машины вектора поддержки (SVM)

Синтаксис

ScoreSVMModel = fitPosterior(SVMModel)
[ScoreSVMModel,ScoreTransform] = fitPosterior(SVMModel)
[ScoreSVMModel,ScoreTransform] = fitPosterior(SVMModel,Name,Value)

Описание

пример

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

пример

[ScoreSVMModel,ScoreTransform] = fitPosterior(SVMModel) дополнительно возвращает оптимальный счет в параметры функции преобразования апостериорной вероятности.

пример

[ScoreSVMModel,ScoreTransform] = fitPosterior(SVMModel,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, можно задать количество сгибов или демонстрационной пропорции затяжки.

Примеры

свернуть все

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

load ionosphere

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

SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

SVMModel является классификатором ClassificationSVM.

Соответствуйте оптимальному счету к функции преобразования апостериорной вероятности.

rng(1); % For reproducibility
ScoreSVMModel = fitPosterior(SVMModel)
ScoreSVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: '@(S)sigmoid(S,-9.481802e-01,-1.218745e-01)'
          NumObservations: 351
                    Alpha: [90x1 double]
                     Bias: -0.1343
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


  Properties, Methods

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

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

[label,scores] = resubPredict(SVMModel);
[~,postProbs] = resubPredict(ScoreSVMModel);
table(Y(1:10),label(1:10),scores(1:10,2),postProbs(1:10,2),'VariableNames',...
    {'TrueLabel','PredictedLabel','Score','PosteriorProbability'})
ans=10×4 table
    TrueLabel    PredictedLabel     Score     PosteriorProbability
    _________    ______________    _______    ____________________

       'g'            'g'           1.4861           0.82215      
       'b'            'b'          -1.0004           0.30436      
       'g'            'g'           1.8685           0.86916      
       'b'            'b'          -2.6458          0.084183      
       'g'            'g'           1.2805           0.79184      
       'b'            'b'          -1.4617           0.22028      
       'g'            'g'           2.1672           0.89814      
       'b'            'b'          -5.7085         0.0050122      
       'g'            'g'           2.4797           0.92223      
       'b'            'b'          -2.7811          0.074805      

Обучите мультикласс классификатор SVM посредством процесса one-all (OVA) классификация, и затем постройте контуры вероятности для каждого класса. Чтобы реализовать OVA непосредственно, смотрите fitcecoc.

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

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

Исследуйте график рассеивания данных.

figure
gscatter(X(:,1),X(:,2),Y);
title('{\bf Scatter Diagram of Iris Measurements}');
xlabel('Petal length');
ylabel('Petal width');
legend('Location','Northwest'); 
axis tight

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

classNames = {'setosa'; 'virginica'; 'versicolor'};
numClasses = size(classNames,1);
inds = cell(3,1); % Preallocation
SVMModel = cell(3,1);

rng(1); % For reproducibility
for j = 1:numClasses
    inds{j} = strcmp(Y,classNames{j});  % OVA classification
    SVMModel{j} = fitcsvm(X,inds{j},'ClassNames',[false true],...
        'Standardize',true,'KernelFunction','rbf','KernelScale','auto');
end

fitcsvm использует эвристическую процедуру, которая включает подвыборку, чтобы вычислить значение шкалы ядра.

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

for j = 1:numClasses
    SVMModel{j} = fitPosterior(SVMModel{j});
end
Warning: Classes are perfectly separated. The optimal score-to-posterior transformation is a step function.

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

d = 0.02;
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
    min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];

posterior = cell(3,1); 
for j = 1:numClasses
    [~,posterior{j}] = predict(SVMModel{j},xGrid);
end

Для каждого классификатора SVM постройте контур апостериорной вероятности в соответствии с графиком рассеивания данных.

figure
h = zeros(numClasses + 1,1); % Preallocation for graphics handles
for j = 1:numClasses
subplot(2,2,j)
contourf(x1Grid,x2Grid,reshape(posterior{j}(:,2),size(x1Grid,1),size(x1Grid,2)));
hold on
h(1:numClasses) = gscatter(X(:,1),X(:,2),Y);
title(sprintf('Posteriors for %s Class',classNames{j}));
xlabel('Petal length');
ylabel('Petal width');
legend off
axis tight
hold off
end
h(numClasses + 1) = colorbar('Location','EastOutside',...
    'Position',[[0.8,0.1,0.05,0.4]]);
set(get(h(numClasses + 1),'YLabel'),'String','Posterior','FontSize',16);
legend(h(1:numClasses),'Location',[0.6,0.2,0.1,0.1]);

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

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

load ionosphere

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

SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

SVMModel является классификатором ClassificationSVM.

Соответствуйте оптимальному счету к функции преобразования апостериорной вероятности. Сравните время выполнения от использования 10-кратной перекрестной проверки (значение по умолчанию) и 10%-я тестовая выборка затяжки.

rng(1); % For reproducibility
tic;    % Start the stopwatch
SVMModel_10FCV = fitPosterior(SVMModel);
toc     % Stop the stopwatch and display the run time
Elapsed time is 1.192187 seconds.
tic;
SVMModel_HO = fitPosterior(SVMModel,'Holdout',0.10);
toc
Elapsed time is 0.270493 seconds.

Несмотря на то, что оба времени выполнения коротко, потому что набор данных является относительно небольшим, SVMModel_HO соответствует функции преобразования счета намного быстрее, чем SVMModel_10FCV. Можно задать перекрестную проверку затяжки (вместо 10-кратной перекрестной проверки по умолчанию), чтобы уменьшать время выполнения для больших наборов данных.

Входные параметры

свернуть все

Полный, обученный классификатор SVM, заданный как модель ClassificationSVM, обученная с fitcsvm.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: fitPosterior(SVMModel,'KFold',5) использует пять сгибов в перекрестной подтвержденной модели.

Раздел перекрестной проверки раньше вычислял функцию преобразования, заданную как пара, разделенная запятой, состоящая из 'CVPartition' и объекта раздела cvpartition, как создано cvpartition. Можно использовать только одну из этих четырех опций за один раз для создания перекрестной подтвержденной модели: 'KFold', 'Holdout', 'Leaveout' или 'CVPartition'.

Аргумент пары "имя-значение" crossval fitcsvm разделяет данные в подмножества с помощью cvpartition.

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

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

Можно использовать только одну из этих четырех опций за один раз для создания перекрестной подтвержденной модели: 'KFold', 'Holdout', 'Leaveout' или 'CVPartition'.

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

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

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

Можно использовать только одну из этих четырех опций за один раз для создания перекрестной подтвержденной модели: 'KFold', 'Holdout', 'Leaveout' или 'CVPartition'.

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

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

Флаг перекрестной проверки "Оставляет тот" указанием, использовать ли перекрестную проверку, "пропускают один", чтобы вычислить функцию преобразования, заданную как пара, разделенная запятой, состоящая из 'Leaveout' и 'on' или 'off'. Используйте перекрестную проверку, "пропускают один" путем определения 'Leaveout','on'.

Можно использовать только одну из этих четырех опций за один раз для создания перекрестной подтвержденной модели: 'KFold', 'Holdout', 'Leaveout' или 'CVPartition'.

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

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

свернуть все

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

Чтобы оценить апостериорные вероятности для наблюдений набора обучающих данных, передайте ScoreSVMModel resubPredict.

Чтобы оценить апостериорные вероятности для новых наблюдений, передайте новые наблюдения и ScoreSVMModel к predict.

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

  • Если значением поля Type ScoreTransform является sigmoid, то ScoreTransform также имеет эти поля:

  • Если значением поля Type ScoreTransform является step, то ScoreTransform также имеет эти поля:

    • PositiveClassProbability: значение π в ступенчатой функции. Это значение представляет вероятность, что наблюдение находится в положительном классе или апостериорной вероятности, что наблюдение находится в положительном классе, данном, что его счет находится в интервале (LowerBound, UpperBound).

    • LowerBound: значение max yn=1sn в ступенчатой функции. Это значение представляет нижнюю границу интервала счета, который присваивает наблюдения с очками в интервале апостериорная вероятность того, чтобы быть в положительном классе PositiveClassProbability. Любое наблюдение со счетом меньше, чем LowerBound имеет апостериорную вероятность того, чтобы быть в положительном классе, равном 0.

    • UpperBound: значение minyn=+1sn в ступенчатой функции. Это значение представляет верхнюю границу интервала счета, который присваивает наблюдения с очками в интервале апостериорная вероятность того, чтобы быть в положительном классе PositiveClassProbability. Любое наблюдение со счетом, больше, чем UpperBound, имеет апостериорную вероятность того, чтобы быть в положительном классе, равном 1.

  • Если значением поля Type ScoreTransform является constant, то ScoreTransform.PredictedClass содержит имя прогноза класса.

    Этот результат совпадает с SVMModel.ClassNames. Апостериорной вероятностью наблюдения, находящегося в ScoreTransform.PredictedClass, всегда является 1.

Больше о

свернуть все

Сигмоидальная функция

Сигмоидальная функция, которая сопоставляет, выигрывает sj, соответствующий наблюдению, которое j к положительной апостериорной вероятности класса

P(sj)=11+exp(Asj+B).

Если значением поля Type ScoreTransform является sigmoid, то параметры A и B соответствуют полям Scale и Intercept ScoreTransform, соответственно.

Ступенчатая функция

Ступенчатая функция, которая сопоставляет, выигрывает sj, соответствующий наблюдению, которое j к положительной апостериорной вероятности класса

P(sj)={0;s<max yk=1skπ;max yk=1sksjminyk=+1sk1;sj>minyk=+1sk,

где:

  • sj является счетом наблюдения j.

  • +1 и –1 обозначают положительные и отрицательные классы, соответственно.

  • π является априорной вероятностью, что наблюдение находится в положительном классе.

Если значением поля Type ScoreTransform является step, то количества max yk=1sk и minyk=+1sk соответствуйте полям LowerBound и UpperBound ScoreTransform, соответственно.

Постоянная функция

Постоянная функция сопоставляет все очки в выборке к апостериорным вероятностям 1 или 0.

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

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

Советы

  • Этот процесс описывает один способ предсказать положительные апостериорные вероятности класса.

    1. Обучите классификатор SVM путем передачи данных fitcsvm. Результатом является обученный классификатор SVM, такой как SVMModel, который хранит данные. Программное обеспечение устанавливает свойство функции преобразования счета (SVMModel.ScoreTransformation) на none.

    2. Передайте обученный классификатор SVM SVMModel fitSVMPosterior или fitPosterior. Результатом, такой как, ScoreSVMModel, является обученный классификатор того же самого SVM, когда SVMModel, кроме программного обеспечения устанавливает ScoreSVMModel.ScoreTransformation на оптимальную функцию преобразования счета.

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

      Если вы пропускаете шаг 2, то predict возвращает положительный счет класса, а не положительную апостериорную вероятность класса.

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

Алгоритмы

Программное обеспечение соответствует соответствующему счету к функции преобразования апостериорной вероятности при помощи классификатора SVM, который SVMModel и путем проведения 10-кратной перекрестной проверки с помощью хранимых данных о предикторе (SVMModel.X) и класс маркирует (SVMModel.Y), как обрисовано в общих чертах в [1]. Функция преобразования вычисляет апостериорную вероятность, что наблюдение классифицируется в положительный класс (SVMModel.Classnames(2)).

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

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

  • В изучении 2D класса, если один из этих двух классов имеет относительную частоту 0, то функция преобразования является постоянной функцией. Функция fitPosterior не подходит для изучения одного класса.

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

Если вы повторно оцениваете счет к функции преобразования апостериорной вероятности, то есть, если вы передаете классификатор SVM fitPosterior или fitSVMPosterior, и его свойством ScoreTransform не является none, то программное обеспечение:

  • Выводит предупреждение

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

Альтернативная функциональность

Можно также соответствовать функции апостериорной вероятности при помощи fitSVMPosterior. Эта функция подобна fitPosterior, кроме него более широко, потому что это принимает более широкую область значений типов классификатора SVM.

Ссылки

[1] Платт, J. “Вероятностные выходные параметры для машин вектора поддержки и сравнений с упорядоченными методами вероятности”. Усовершенствования в Больших Граничных Классификаторах. Кембридж, MA: Нажатие MIT, 2000, стр 61–74.

Смотрите также

| | |

Введенный в R2014a