exponenta event banner

предсказать

Классифицировать наблюдения с помощью классификатора вспомогательных векторов (SVM)

Описание

пример

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

пример

[label,score] = predict(SVMModel,X) также возвращает матрицу баллов (score), указывая вероятность того, что метка исходит от определенного класса. Для SVM показателями правдоподобия являются либо классификационные оценки, либо апостериорные вероятности классов. Для каждого наблюдения в X, прогнозируемая метка класса соответствует максимальному баллу среди всех классов.

Примеры

свернуть все

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

load ionosphere
rng(1); % For reproducibility

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

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; % Extract trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModel является ClassificationPartitionedModel классификатор. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий CompactClassificationSVM классификатор, который программное обеспечение обучило с помощью обучающего набора.

Маркировать результаты испытаний образцов. Просмотрите результаты первых 10 наблюдений в тестовом образце.

[label,score] = predict(CompactSVMModel,XTest);
table(YTest(1:10),label(1:10),score(1:10,2),'VariableNames',...
    {'TrueLabel','PredictedLabel','Score'})
ans=10×3 table
    TrueLabel    PredictedLabel     Score  
    _________    ______________    ________

      {'b'}          {'b'}          -1.7177
      {'g'}          {'g'}           2.0003
      {'b'}          {'b'}          -9.6844
      {'g'}          {'g'}           2.5617
      {'b'}          {'b'}          -1.5483
      {'g'}          {'g'}           2.0983
      {'b'}          {'b'}          -2.7016
      {'b'}          {'b'}         -0.66313
      {'g'}          {'g'}           1.6046
      {'g'}          {'g'}            1.773

Маркировка новых наблюдений с помощью классификатора SVM.

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

load ionosphere
rng(1); % For reproducibility
n = size(X,1);       % Training sample size 
isInds = 1:(n-10);   % In-sample indices 
oosInds = (n-9):n;   % Out-of-sample indices

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

SVMModel = fitcsvm(X(isInds,:),Y(isInds),'Standardize',true,...
    'ClassNames',{'b','g'});
CompactSVMModel = compact(SVMModel);
whos('SVMModel','CompactSVMModel')
  Name                 Size             Bytes  Class                                                 Attributes

  CompactSVMModel      1x1              30482  classreg.learning.classif.CompactClassificationSVM              
  SVMModel             1x1             137582  ClassificationSVM                                               

CompactClassificationSVM классификатор (CompactSVMModel) использует меньше места, чем ClassificationSVM классификатор (SVMModel) потому что SVMModel сохраняет данные.

Оцените оптимальную функцию преобразования «оценка-задняя вероятность».

CompactSVMModel = fitPosterior(CompactSVMModel,...
    X(isInds,:),Y(isInds))
CompactSVMModel = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: '@(S)sigmoid(S,-1.968433e+00,3.121233e-01)'
                    Alpha: [88x1 double]
                     Bias: -0.2143
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [88x34 double]
      SupportVectorLabels: [88x1 double]


  Properties, Methods

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

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

[labels,PostProbs] = predict(CompactSVMModel,X(oosInds,:));
table(Y(oosInds),labels,PostProbs(:,2),'VariableNames',...
    {'TrueLabels','PredictedLabels','PosClassPosterior'})
ans=10×3 table
    TrueLabels    PredictedLabels    PosClassPosterior
    __________    _______________    _________________

      {'g'}            {'g'}              0.98419     
      {'g'}            {'g'}              0.95545     
      {'g'}            {'g'}              0.67794     
      {'g'}            {'g'}              0.94448     
      {'g'}            {'g'}              0.98745     
      {'g'}            {'g'}              0.92481     
      {'g'}            {'g'}               0.9711     
      {'g'}            {'g'}              0.96986     
      {'g'}            {'g'}              0.97803     
      {'g'}            {'g'}              0.94361     

PostProbs является матрицей 10 на 2, где первый столбец - отрицательные апостериорные вероятности класса, а второй столбец - положительные апостериорные вероятности класса, соответствующие новым наблюдениям.

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

свернуть все

Модель классификации SVM, указанная как ClassificationSVM объект модели или CompactClassificationSVM объект модели, возвращенный fitcsvm или compactсоответственно.

Данные предиктора, подлежащие классификации, указываются как числовая матрица или таблица.

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные в столбцах X должен иметь тот же порядок, что и обучаемые переменные предиктора SVMModel.

    • Если вы тренировались SVMModel использование таблицы (например, Tbl) и Tbl содержит все числовые переменные предиктора, затем X может быть числовой матрицей. Чтобы обработать числовые предикторы в Tbl в качестве категориального во время обучения, определить категориальные предикторы, используя CategoricalPredictors аргумент пары имя-значение fitcsvm. Если Tbl содержит разнородные переменные предиктора (например, числовые и категориальные типы данных) и X является числовой матрицей, то predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многозначные переменные или массивы ячеек, отличные от массивов ячеек символьных векторов.

    • Если вы тренировались SVMModel использование таблицы (например, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и прошедшие обучение SVMModel (хранится в SVMModel.PredictorNames). Однако порядок столбцов X не обязательно соответствовать порядку столбцов Tbl. Также, Tbl и X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

    • Если вы тренировались SVMModel используя числовую матрицу, затем имена предикторов в SVMModel.PredictorNames и соответствующие имена переменных предиктора в X должно быть то же самое. Чтобы указать имена предикторов во время обучения, см. PredictorNames аргумент пары имя-значение fitcsvm. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

Если установить 'Standardize',true в fitcsvm обучаться SVMModel, то программное обеспечение стандартизирует столбцы X используя соответствующие средства в SVMModel.Mu и стандартные отклонения в SVMModel.Sigma.

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

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

свернуть все

Прогнозируемые метки класса, возвращаемые в виде категориального или символьного массива, логического или числового вектора или массива ячеек символьных векторов.

label имеет тот же тип данных, что и наблюдаемые метки классов (Y), прошедшего обучение SVMModel, и его длина равна количеству строк в X. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

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

Прогнозируемые оценки класса или апостериорные вероятности, возвращаемые как вектор числового столбца или числовая матрица.

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

  • Для двухклассного обучения, score является матрицей из двух столбцов с тем же количеством строк, что и X.

    • Если вы подгоняете оптимальную функцию преобразования «оценка-задняя вероятность», используя fitPosterior или fitSVMPosterior, то score содержит апостериорные вероятности классов. То есть, если значение SVMModel.ScoreTransform не является none, то первый и второй столбцы score содержат отрицательный класс (SVMModel.ClassNames{1}) и положительный класс (SVMModel.ClassNames{2}) задние вероятности для соответствующих наблюдений соответственно.

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

Если SVMModel.KernelParameters.Function является 'linear', то классификационный балл для наблюдения x равен

f (x) = (x/s) β + b.

SVMModel сохраняет β, b и s в свойствах Beta, Bias, и KernelParameters.Scaleсоответственно.

Чтобы оценить оценки классификации вручную, необходимо сначала применить любые преобразования к данным предиктора, которые были применены во время обучения. В частности, если указать 'Standardize',true при использовании fitcsvm, то необходимо стандартизировать данные предиктора вручную с помощью среднего значения SVMModel.Mu и стандартное отклонение SVMModel.Sigma, а затем разделить результат на шкалу ядра в SVMModel.KernelParameters.Scale.

Все функции SVM, такие как resubPredict и predict, примените любое требуемое преобразование перед оценкой.

Если SVMModel.KernelParameters.Function не является 'linear', то Beta пуст ([]).

Подробнее

свернуть все

Оценка классификации

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

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

f (x) =∑j=1nαjyjG (xj, x) + b,

где (α1,..., αn, b) - оцененные параметры SVM, G (xj, x) - скалярное произведение в предикторном пространстве между x и векторами поддержки, и сумма включает в себя наблюдения обучающего набора. Отрицательный балл классификации класса для x или балл для прогнозирования x в отрицательный класс равен -f (x).

Если G (xj, x) = xj′x (линейное ядро), то функция оценки уменьшается до

f (x) = (x/s) β + b.

s - шкала ядра, а β - вектор аппроксимированных линейных коэффициентов.

Дополнительные сведения см. в разделе Общие сведения о векторных машинах поддержки.

Задняя вероятность

Апостериорная вероятность - вероятность того, что наблюдение принадлежит конкретному классу, учитывая данные.

Для SVM задняя вероятность является функцией оценки P (s), что наблюдение j находится в классе k = {-1,1}.

  • Для разделяемых классов апостериорной вероятностью является ступенчатая функция

    P (sj) ={0;s<maxyk=−1skπ;maxyk=−1sk≤sj≤minyk=+1sk1;sj>minyk=+1sk,

    где:

    • sj - оценка наблюдения j.

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

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

  • Для неотделимых классов апостериорной вероятностью является сигмоидная функция

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

    где параметры A и B являются параметрами наклона и пересечения соответственно.

Предварительная вероятность

Предшествующая вероятность класса - предполагаемая относительная частота, с которой наблюдения из этого класса происходят в популяции.

Совет

  • Если для классификации используется линейная модель SVM и модель имеет множество векторов поддержки, то при использовании predict для способа прогнозирования может быть медленным. Для эффективной классификации наблюдений на основе линейной модели SVM удалите векторы поддержки из объекта модели с помощью discardSupportVectors.

Алгоритмы

  • По умолчанию и независимо от функции ядра модели MATLAB ® использует двойное представление функции оценки для классификации наблюдений на основе обученных моделей SVM, в частности

    f ^ (x) =∑j=1nα^jyjG (x, xj) + b ^.

    Этот метод прогнозирования требует обученных векторов поддержки и α коэффициентов (см. SupportVectors и Alpha свойства модели SVM).

  • По умолчанию программа вычисляет оптимальные апостериорные вероятности с помощью метода Платта [1]:

    1. Выполните 10-кратную перекрестную проверку.

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

    3. Оцените задние вероятности, введя оценки перекрестной проверки в подогнанную сигмоидальную функцию.

  • Программное обеспечение включает предыдущие вероятности в целевую функцию SVM во время обучения.

  • Для SVM, predict и resubPredict классифицировать наблюдения по классу, дающему наибольший балл (наибольшая задняя вероятность). Программное обеспечение учитывает затраты на неправильную классификацию, применяя коррекцию средней стоимости перед обучением классификатора. То есть, учитывая предшествующий классу вектор Р, матрицу С затрат на неправильную классификацию и весовой вектор w наблюдения, программное обеспечение определяет новый вектор весов (W) наблюдения так, что

    Wj=wjPj∑k=1KCjk.

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

Блок симулятора

Чтобы интегрировать прогнозирование модели классификации SVM в Simulink ®, можно использовать блок «Прогнозирование SVM» в библиотеке Toolbox™ статистики и машинного обучения или функциональный блок MATLAB с помощью predict функция. Для примеров посмотрите, Предсказывают, что Этикетки Класса Используя ClassificationSVM Предсказывают Блок и Предсказывают Этикетки Класса Используя Функциональный блок MATLAB.

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

  • При использовании блока библиотеки инструментов «Статистика и машинное обучение» для преобразования модели с плавающей запятой в фиксированную можно использовать инструмент «Фиксированная точка» (Fixed-Point Designer).

  • Поддержка массивов переменного размера должна быть включена для функционального блока MATLAB с predict функция.

  • При использовании функционального блока MATLAB можно использовать функции MATLAB для предварительной обработки или последующей обработки до или после прогнозирования в том же функциональном блоке MATLAB.

Ссылки

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

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

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