exponenta event banner

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' и cvpartition объект секционирования, созданный cvpartition. Для создания перекрестно проверенной модели одновременно можно использовать только одну из этих четырех опций: 'KFold', 'Holdout', 'Leaveout', или 'CVPartition'.

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

Пример: Предположим, что вы создаете случайный раздел для пятикратной перекрестной проверки 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: Значение 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=−1sk≤sj≤minyk=+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 + + требуется Coder™ MATLAB ®. Дополнительные сведения см. в разделе Введение в создание кода.

Алгоритмы

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

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

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

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

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

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

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

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

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

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

Ссылки

[1] Плэтт, J. «Вероятностные результаты для вспомогательных векторных машин и сравнения с регуляризованными методами правдоподобия». Достижения в классификаторах больших марж. Кембридж, Массачусетс: MIT Press, 2000, стр. 61-74.

Представлен в R2014a