predict

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

    Описание

    пример

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

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

    пример

    label = predict(Mdl,X,'IncludeInteractions',includeInteractions) задает, включать ли термины взаимодействия в расчеты.

    пример

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

    Примеры

    свернуть все

    Обучите обобщенную аддитивную модель с помощью обучающих выборок, а затем пометьте тестовые выборки.

    Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит сепальные и лепестковые измерения для версиколор и виргиниковых ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

    load fisheriris
    inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
    X = meas(inds,:);
    Y = species(inds,:);

    Случайным образом разбейте наблюдения на набор обучающих данных и тестовый набор с расслоением, используя информацию о классе в Y. Укажите 30% -ная выборка удержания для проверки.

    rng('default') % For reproducibility
    cv = cvpartition(Y,'HoldOut',0.30);

    Извлеките индексы обучения и тестирования.

    trainInds = training(cv);
    testInds = test(cv);

    Укажите наборы обучающих и тестовых данных.

    XTrain = X(trainInds,:);
    YTrain = Y(trainInds);
    XTest = X(testInds,:);
    YTest = Y(testInds);

    Обучите обобщенную аддитивную модель с помощью предикторов XTrain и метки классов YTrain. Рекомендуемая практика состоит в том, чтобы задать имена классов.

    Mdl = fitcgam(XTrain,YTrain,'ClassNames',{'versicolor','virginica'})
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'versicolor'  'virginica'}
               ScoreTransform: 'logit'
                    Intercept: -1.1090
              NumObservations: 70
    
    
      Properties, Methods
    
    

    Mdl является ClassificationGAM объект модели.

    Спрогнозируйте метки тестовых выборок.

    label = predict(Mdl,XTest);

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

    t = table(YTest,label,'VariableNames',{'True Label','Predicted Label'});
    idx = randsample(sum(testInds),10);
    t(idx,:)
    ans=10×2 table
          True Label      Predicted Label
        ______________    _______________
    
        {'virginica' }    {'virginica' } 
        {'virginica' }    {'virginica' } 
        {'versicolor'}    {'virginica' } 
        {'virginica' }    {'virginica' } 
        {'virginica' }    {'virginica' } 
        {'versicolor'}    {'versicolor'} 
        {'versicolor'}    {'versicolor'} 
        {'versicolor'}    {'versicolor'} 
        {'versicolor'}    {'versicolor'} 
        {'virginica' }    {'virginica' } 
    
    

    Создайте график неточностей из истинных меток YTest и предсказанные метки label.

    cm = confusionchart(YTest,label);

    Figure contains an object of type ConfusionMatrixChart.

    Оцените логит апостериорных вероятностей для новых наблюдений с помощью классификационной GAM, которая содержит как линейные, так и условия взаимодействия для предикторов. Классифицируйте новые наблюдения с помощью объекта эффективной памяти модели. Укажите, включать ли условия взаимодействия при классификации новых наблюдений.

    Загрузите ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b') или хорошо ('g').

    load ionosphere

    Разделите набор данных на два набора: один, содержащий обучающие данные, и другой, содержащий новые, незащищенные тестовые данные. Резервируйте 10 наблюдений для нового набора тестовых данных.

    rng('default') % For reproducibility
    n = size(X,1);
    newInds = randsample(n,10);
    inds = ~ismember(1:n,newInds);
    XNew = X(newInds,:);
    YNew = Y(newInds);

    Обучите GAM с помощью предикторов X и метки классов Y. Рекомендуемая практика состоит в том, чтобы задать имена классов. Укажите, чтобы включить 10 наиболее важных условий взаимодействия.

    Mdl = fitcgam(X(inds,:),Y(inds),'ClassNames',{'b','g'},'Interactions',10);

    Mdl является ClassificationGAM объект модели.

    Сохраните память путем уменьшения размера обученной модели.

    CMdl = compact(Mdl);
    whos('Mdl','CMdl')
      Name      Size              Bytes  Class                                                 Attributes
    
      CMdl      1x1             1081082  classreg.learning.classif.CompactClassificationGAM              
      Mdl       1x1             1282640  ClassificationGAM                                               
    

    CMdl является CompactClassificationGAM объект модели.

    Спрогнозируйте метки, используя как линейные, так и условия взаимодействия, а затем используя только линейные условия. Чтобы исключить условия взаимодействия, задайте 'IncludeInteractions',false. Оцените логит апостериорных вероятностей путем определения ScoreTransform свойство как 'none'.

    CMdl.ScoreTransform = 'none';
    [labels,scores] = predict(CMdl,XNew);
    [labels_nointeraction,scores_nointeraction] = predict(CMdl,XNew,'IncludeInteractions',false);
    t = table(YNew,labels,scores,labels_nointeraction,scores_nointeraction, ...
        'VariableNames',{'True Labels','Predicted Labels','Scores' ...
        'Predicted Labels Without Interactions','Scores Without Interactions'})
    t=10×5 table
        True Labels    Predicted Labels          Scores          Predicted Labels Without Interactions    Scores Without Interactions
        ___________    ________________    __________________    _____________________________________    ___________________________
    
           {'g'}            {'g'}           -40.23      40.23                    {'g'}                        -37.484     37.484     
           {'g'}            {'g'}          -41.215     41.215                    {'g'}                        -38.737     38.737     
           {'g'}            {'g'}          -44.413     44.413                    {'g'}                        -42.186     42.186     
           {'g'}            {'b'}           3.0658    -3.0658                    {'b'}                         1.4338    -1.4338     
           {'g'}            {'g'}          -84.637     84.637                    {'g'}                        -81.269     81.269     
           {'g'}            {'g'}           -27.44      27.44                    {'g'}                        -24.831     24.831     
           {'g'}            {'g'}          -62.989     62.989                    {'g'}                          -60.4       60.4     
           {'g'}            {'g'}          -77.109     77.109                    {'g'}                        -75.937     75.937     
           {'g'}            {'g'}          -48.519     48.519                    {'g'}                        -47.067     47.067     
           {'g'}            {'g'}          -56.256     56.256                    {'g'}                        -53.373     53.373     
    
    

    Предсказанные метки для тестовых данных Xnew не варьируются в зависимости от включения условий взаимодействия, но оцененные значения баллов различны.

    Обучите обобщенную аддитивную модель, а затем постройте график апостериорных областей вероятностей с помощью значений вероятностей первого класса.

    Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит два измерения лепестков для versicolor и virginica irises. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

    load fisheriris
    inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
    X = meas(inds,3:4);
    Y = species(inds,:);

    Обучите обобщенную аддитивную модель с помощью предикторов X и метки классов Y. Рекомендуемая практика состоит в том, чтобы задать имена классов.

    Mdl = fitcgam(X,Y,'ClassNames',{'versicolor','virginica'});

    Mdl является ClassificationGAM объект модели.

    Задайте сетку значений в наблюдаемом пространстве предикторов.

    xMax = max(X);
    xMin = min(X);
    x1 = linspace(xMin(1),xMax(1),250);
    x2 = linspace(xMin(2),xMax(2),250);
    [x1Grid,x2Grid] = meshgrid(x1,x2);

    Спрогнозируйте апостериорные вероятности для каждого образца в сетке.

    [~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

    Постройте график апостериорных областей вероятностей с помощью значений вероятностей первого класса 'versicolor'.

    h = scatter(x1Grid(:),x2Grid(:),1,PosteriorRegion(:,1));
    h.MarkerEdgeAlpha = 0.3;

    Постройте график обучающих данных.

    hold on
    gh = gscatter(X(:,1),X(:,2),Y,'k','dx');
    title('Iris Petal Measurements and Posterior Probabilities')
    xlabel('Petal length (cm)')
    ylabel('Petal width (cm)')
    legend(gh,'Location','Best')
    colorbar
    hold off

    Figure contains an axes. The axes with title Iris Petal Measurements and Posterior Probabilities contains 3 objects of type scatter, line. These objects represent versicolor, virginica.

    Входные параметры

    свернуть все

    Обобщенная аддитивная модель, заданная как ClassificationGAM или CompactClassificationGAM объект модели.

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

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

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

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

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

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

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

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

      • X может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict игнорирует их.

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

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

    Флаг для включения условий взаимодействия модели, заданный как true или false.

    Значение по умолчанию includeInteractions значение true если Mdl содержит условия взаимодействия. Значение должно быть false если модель не содержит членов взаимодействия.

    Типы данных: logical

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

    свернуть все

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

    Если Mdl.ScoreTransform является 'logit'(по умолчанию), затем каждую запись label соответствует классу с минимальными ожидаемыми затратами на неправильную классификацию для соответствующей строки X. В противном случае каждая запись соответствует классу с максимальным счетом.

    label имеет тот совпадающий тип данных, что и наблюдаемые метки классов, которые обучали Mdl, и его длина равна количеству строк в X. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

    Предсказанные апостериорные вероятности или счета классов, возвращенные в виде двухколоночной числовой матрицы с одинаковым числом строк, как X. Первый и второй столбцы score содержат первый класс (или отрицательный класс, Mdl.ClassNames(1)) и второго класса (или положительного класса, Mdl.ClassNames(2)) оценить значения для соответствующих наблюдений, соответственно.

    Если Mdl.ScoreTransform является 'logit'(по умолчанию), тогда значения баллов являются апостериорными вероятностями. Если Mdl.ScoreTransform является 'none', тогда значения баллов являются логитом апостериорных вероятностей. Программное обеспечение обеспечивает несколько встроенных функций преобразования счетов. Для получения дополнительной информации смотрите ScoreTransform свойство Mdl.

    Вы можете изменить преобразование счета, задав 'ScoreTransform' аргумент fitcgam во время обучения или путем изменения ScoreTransform свойство после обучения.

    Подробнее о

    свернуть все

    Предсказанные метки классов

    predict классифицирует путем минимизации ожидаемых затрат на неправильную классификацию:

    y^=argminy=1,...,Kj=1KP^(j|x)C(y|j),

    где:

    • y^ - предсказанная классификация.

    • K - количество классов.

    • P^(j|x) - апостериорная вероятность j классов для x наблюдений.

    • C(y|j) - стоимость классификации наблюдения как y, когда его истинный класс j.

    Ожидаемые затраты на неправильную классификацию

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

    Предположим, у вас есть Nobs наблюдения, которые вы хотите классифицировать с помощью обученного классификатора, и у вас есть K классы. Наблюдения помещаются в матрицу X с одним наблюдением за строкой.

    Матрица ожидаемых затрат CE имеет размер Nobs-by- K. Каждая строка CE содержит ожидаемые (средние) затраты на классификацию наблюдений по каждому из K классы. CE(n,k) является

    i=1KP^(i|X(n))C(k|i),

    где:

    • K - количество классов.

    • P^(i|X(n)) - апостериорная вероятность i классов для X наблюдений (n).

    • C(k|i) - истинная стоимость неправильной классификации при классификации наблюдения как k, когда его истинный класс i.

    Истинные затраты на неправильную классификацию

    Истинная стоимость неправильной классификации является стоимостью классификации наблюдения в неправильный класс.

    Можно задать истинные затраты на неправильную классификацию по классам с помощью 'Cost' аргумент имя-значение при создании классификатора. Cost(i,j) - стоимость классификации наблюдений в классы j когда его истинный класс i. По умолчанию Cost(i,j)=1 если i~=j, и Cost(i,j)=0 если i=j. Другими словами, стоимость 0 для правильной классификации и 1 для неправильной классификации.

    Введенный в R2021a