fitPosterior

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

Загрузите ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b') или хорошо ('g').

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.481586e-01,-1.218402e-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.82214      
      {'b'}          {'b'}         -1.0004           0.30434      
      {'g'}          {'g'}          1.8686           0.86916      
      {'b'}          {'b'}         -2.6458          0.084182      
      {'g'}          {'g'}          1.2805           0.79183      
      {'b'}          {'b'}         -1.4618           0.22025      
      {'g'}          {'g'}          2.1671           0.89813      
      {'b'}          {'b'}         -5.7089         0.0050112      
      {'g'}          {'g'}          2.4797           0.92223      
      {'b'}          {'b'}         -2.7813          0.074797      

Обучите многоклассовый классификатор SVM через процесс классификации один от всех (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

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.

Обучите три двоичных классификатора 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]);

Figure contains 3 axes. Axes 1 with title Posteriors for setosa Class contains 4 objects of type contour, line. These objects represent setosa, versicolor, virginica. Axes 2 with title Posteriors for virginica Class contains 4 objects of type contour, line. These objects represent setosa, versicolor, virginica. Axes 3 with title Posteriors for versicolor Class contains 4 objects of type contour, line. These objects represent setosa, versicolor, virginica.

Оцените функцию счета-в-апостериорно-вероятностного преобразования после обучения классификатора 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.269959 seconds.
tic;
SVMModel_HO = fitPosterior(SVMModel,'Holdout',0.10);
toc
Elapsed time is 0.229205 seconds.

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

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

свернуть все

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

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

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

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

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

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

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

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

Можно использовать только одну из этих четырех опций за раз для создания перекрестно проверенной модели: '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: Значение maxyn=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<maxyk=1skπ;maxyk=1sksjminyk=+1sk1;sj>minyk=+1sk,

где:

  • sj - счет j наблюдений.

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

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

Если значение Type область ScoreTransform является step, затем величины maxyk=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)).

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

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

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

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

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

  • Отображение предупреждения

  • Устанавливает исходную функцию преобразования в 'none' перед оценкой нового

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

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

Ссылки

[1] Platt, J «. Вероятностные выходы для машин опорных векторов и сравнения с регуляризованными методами правдоподобия». Усовершенствования в классификаторах больших марж. Cambridge, MA: The MIT Press, 2000, pp. 61-74.

Введенный в R2014a