predict

Классификация наблюдений с помощью машины опорных векторов (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                                               

The 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объект модели объект модели, возвращенный 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- classification score для классификации 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 - шкала ядра, а β - вектор подгоняемых линейных коэффициентов.

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

Апостериорная вероятность

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

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

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

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

    где:

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

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

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

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

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

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

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

prior probability класса является предполагаемой относительной частотой, с которой наблюдения из этого класса происходят в населении.

Совет

  • Если вы используете линейную модель 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 классифицировать наблюдения в класс, получая наибольший счет (наибольшую апостериорную вероятность). Программное обеспечение учитывает затраты на неправильную классификацию путем применения коррекции средних затрат перед обучением классификатора. То есть, учитывая класс, предшествующий векторной P, C матрицы затрат неправильной классификации и w вектора веса наблюдений, программное обеспечение задает новый вектор весов наблюдений (W), такой что

    Wj=wjPjk=1KCjk.

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

Блок Simulink

Чтобы интегрировать предсказание модели классификации SVM в Simulink®, можно использовать блок ClassificationSVM Predict в библиотеке Statistics and Machine Learning Toolbox™ или блок MATLAB Function с predict функция. Для примеров смотрите Предсказать метки классов Используя ClassificationSVM Предсказать блок и Предсказать метки классов Используя Блок MATLAB function.

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

  • Если вы используете библиотечный блок Statistics and Machine Learning Toolbox, можно использовать Fixed-Point Tool (Fixed-Point Designer) для преобразования модели с плавающей точкой в фиксированную точку.

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

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

Ссылки

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

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

.
Введенный в R2014a