предсказать

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

Синтаксис

label = predict(SVMModel,X)
[label,score] = predict(SVMModel,X)

Описание

пример

label = predict(SVMModel,X) возвращает вектор предсказанных меток класса для данных о предикторе в таблице или матричном X, на основе обученной модели SVMModel классификации машин вектора поддержки (SVM). Обученная модель 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.6841
       'g'            'g'            2.5618
       'b'            'b'            -1.548
       'g'            'g'            2.0984
       'b'            'b'           -2.7018
       'b'            'b'          -0.66291
       'g'            'g'            1.6046
       'g'            'g'            1.7731

Маркируйте новые наблюдения с помощью классификатора 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              30288  classreg.learning.classif.CompactClassificationSVM              
  SVMModel             1x1             137628  ClassificationSVM                                               

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

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

CompactSVMModel = fitPosterior(CompactSVMModel,...
    X(isInds,:),Y(isInds))
CompactSVMModel = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: '@(S)sigmoid(S,-1.968452e+00,3.121267e-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.67792     
       'g'              'g'               0.94448     
       'g'              'g'               0.98744     
       'g'              'g'               0.92482     
       'g'              'g'               0.97111     
       '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 являются положительной музыкой класса к соответствующим наблюдениям. Вы не можете получить апостериорные вероятности для изучения одного класса.

  • Для изучения 2D класса score является матрицей 2D столбца с одинаковым числом строк как 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 пуст ([]).

Больше о

свернуть все

Счет классификации

classification score 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) = xjx (линейное ядро), то функция счета уменьшает до

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

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

Для получения дополнительной информации смотрите Машины Вектора Поддержки Понимания.

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

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

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

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

    P(sj)={0;s<max yk=1skπ;max yk=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 классифицируют наблюдения в класс, приводящий к самому большому счету (самая большая апостериорная вероятность). Программное обеспечение составляет misclassification затраты путем применения исправления средней стоимости перед обучением классификатор. Таким образом, учитывая класс предшествующий векторный P, misclassification матрица стоимости C и вектор веса наблюдения w, программное обеспечение задает новый вектор весов наблюдения (W), таким образом что

    Wj=wjPjk=1KCjk.

Ссылки

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

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

Введенный в R2014a