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.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              30498  classreg.learning.classif.CompactClassificationSVM              
  SVMModel             1x1             137838  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 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<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