predict

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

Описание

пример

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.7176
      {'g'}          {'g'}           2.0002
      {'b'}          {'b'}          -9.6851
      {'g'}          {'g'}           2.5618
      {'b'}          {'b'}          -1.5481
      {'g'}          {'g'}           2.0983
      {'b'}          {'b'}          -2.7012
      {'b'}          {'b'}         -0.66312
      {'g'}          {'g'}           1.6045
      {'g'}          {'g'}           1.7729

Пометьте новые наблюдения с помощью классификатора 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.968445e+00,3.121617e-01)'
                    Alpha: [88x1 double]
                     Bias: -0.2142
         KernelParameters: [1x1 struct]
                       Mu: [0.8886 0 0.6365 0.0457 0.5933 0.1200 0.5414 ... ]
                    Sigma: [0.3151 0 0.5032 0.4476 0.5251 0.4668 0.4966 ... ]
           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.67789     
      {'g'}            {'g'}              0.94447     
      {'g'}            {'g'}              0.98744     
      {'g'}            {'g'}               0.9248     
      {'g'}            {'g'}               0.9711     
      {'g'}            {'g'}              0.96986     
      {'g'}            {'g'}              0.97803     
      {'g'}            {'g'}               0.9436     

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 \in 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 isempty).

Больше о

свернуть все

Классификационная оценка

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

    Wj=wjPjk=1KCjk.

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

Блок Simulink

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

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

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

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

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

Ссылки

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

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

Введенный в R2014a