exponenta event banner

предсказать

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

    Описание

    пример

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

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

    пример

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

    пример

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

    Примеры

    свернуть все

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

    Загрузить fisheriris набор данных. Создать X в качестве числовой матрицы, которая содержит измерения чашелистиков и лепестков для versicolor и virginica ирисов. Создать 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 ирисов. Создать 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,..., K∑j=1KP^ (j 'x) C (y' j),

    где:

    • y ^ - прогнозируемая классификация.

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

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

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

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

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

    Предположим, что у вас есть 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) - истинная стоимость неправильной классификации при классификации наблюдения как k, когда его истинным классом является i.

    Истинная стоимость неправильной классификации

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

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

    Представлен в R2021a