predict

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

    Описание

    пример

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

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

    пример

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

    пример

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

    Примеры

    свернуть все

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

    Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит чашелистик и лепестковые измерения для ирисовых диафрагм virginica и versicolor. Создайте 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 как числовая матрица, которая содержит два лепестковых измерения для ирисовых диафрагм virginica и versicolor. Создайте 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 если модель не содержит периоды взаимодействия.

    Типы данных: логический

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

    свернуть все

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

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

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

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

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

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

    Больше о

    свернуть все

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

    predict классифицирует путем минимизации ожидаемой стоимости misclassification:

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

    где:

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

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

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

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

    Ожидаемая стоимость Misclassification

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

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

    Ожидаемая матрица стоимости CE имеет размер Nobs- 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) истинная misclassification стоимость классификации наблюдения как k, когда его истинным классом является i.

    Истинная стоимость Misclassification

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

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

    Введенный в R2021a