fitcgam

Подгонка обобщенной аддитивной модели (GAM) для двоичной классификации

Описание

пример

Mdl = fitcgam(Tbl,ResponseVarName) возвращает обобщенную аддитивную модель Mdl обучен с использованием выборочных данных, содержащихся в таблице Tbl. Входной параметр ResponseVarName - имя переменной в Tbl который содержит метки классов для двоичной классификации.

пример

Mdl = fitcgam(Tbl,formula) использует аргумент спецификации модели formula для задания меток классов и переменных предиктора в Tbl. Можно задать подмножество переменных предиктора и членов взаимодействия для переменных предиктора при помощи formula.

Mdl = fitcgam(Tbl,Y) использует переменные предиктора в таблице Tbl и метки классов в векторе Y.

пример

Mdl = fitcgam(X,Y) использует предикторы в матрице X и метки классов в векторе Y.

пример

Mdl = fitcgam(___,Name,Value) задает опции, использующие один или несколько аргументов имя-значение в дополнение к любой комбинации входных аргументов в предыдущих синтаксисах. Для примера, 'Interactions',5 указывает, что включает пять членов в модели взаимодействия. Вы также можете задать список терминов взаимодействия, используя 'Interactions' аргумент имя-значение.

Примеры

свернуть все

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

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

load ionosphere

Обучите одномерную GAM, которая определяет, является ли возврат радара плохим ('b') или хорошо ('g').

Mdl = fitcgam(X,Y)
Mdl = 
  ClassificationGAM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'logit'
                Intercept: 2.2715
          NumObservations: 351


  Properties, Methods

Mdl является ClassificationGAM объект модели. Отображение модели показывает частичный список свойств модели. Чтобы просмотреть полный список свойств, дважды кликните имя переменной Mdl в Рабочей области. Откроется редактор Переменных для Mdl. Также можно отобразить свойства в Командном окне с помощью записи через точку. Для примера отобразите порядок классов Mdl.

classOrder = Mdl.ClassNames
classOrder = 2x1 cell
    {'b'}
    {'g'}

Классифицируйте первое наблюдение обучающих данных и постройте график локальных эффектов терминов в Mdl на предсказании.

label = predict(Mdl,X(1,:))
label = 1x1 cell array
    {'g'}

plotLocalEffects(Mdl,X(1,:))

Figure contains an axes. The axes with title Local Effects Plot contains an object of type bar.

The predict функция классифицирует первые X(1,:) наблюдения как 'g'. The plotLocalEffects функция создает горизонтальный столбчатый график, которая показывает локальные эффекты 10 наиболее важных членов на предсказание. Каждое значение локального эффекта показывает вклад каждого члена в классификационную оценку для 'g', который является логитом апостериорной вероятности того, что классификация 'g' для наблюдения.

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

  • Определите условия взаимодействия, используя formula входной параметр.

  • Задайте 'Interactions' аргумент имя-значение.

  • Сначала создайте модель с линейными терминами и добавьте условия взаимодействия к модели с помощью addInteractions функция.

Загрузите набор данных радужки Фишера. Составьте таблицу, которая содержит наблюдения для versicolor и virginica.

load fisheriris
inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
tbl = array2table(meas(inds,:),'VariableNames',["x1","x2","x3","x4"]);
tbl.Y = species(inds,:);

Задайте formula

Обучите GAM, который содержит четыре линейных условия (x1, x2, x3, и x4) и двумя терминами взаимодействия (x1*x2 и x2*x3). Определите условия используя формулу в форме 'Y ~ terms'.

Mdl1 = fitcgam(tbl,'Y ~ x1 + x2 + x3 + x4 + x1:x2 + x2:x3');

Функция добавляет условия взаимодействия к модели в порядке важности. Можно использовать Interactions свойство для проверки членов в модели взаимодействия и порядка, в котором fitcgam добавляет их в модель. Отобразите Interactions свойство.

Mdl1.Interactions
ans = 2×2

     2     3
     1     2

Каждая строка Interactions представляет один термин взаимодействия и содержит индексы столбцов переменных предиктора для термина взаимодействия.

Задайте 'Interactions'

Передайте обучающие данные (tbl) и имя переменной отклика в tbl на fitcgam, так что функция включает линейные условия для всех других переменных в качестве предикторов. Задайте 'Interactions' аргумент имя-значение с помощью логической матрицы для включения двух членов взаимодействия, x1*x2 и x2*x3.

Mdl2 = fitcgam(tbl,'Y','Interactions',logical([1 1 0 0; 0 1 1 0]));
Mdl2.Interactions
ans = 2×2

     2     3
     1     2

Можно также задать 'Interactions' как количество членов взаимодействия или как 'all' включить все доступные условия взаимодействия. Среди заданных условий взаимодействия fitcgam определяет те, чьи значения p не больше, чем 'MaxPValue' и добавляет их в модель. Значение по умолчанию 'MaxPValue' равен 1, так что функция добавляет все заданные условия взаимодействия в модель.

Задайте 'Interactions','all' и установите 'MaxPValue' аргумент имя-значение 0,01.

Mdl3 = fitcgam(tbl,'Y','Interactions','all','MaxPValue',0.01);
Mdl3.Interactions
ans = 5×2

     3     4
     2     4
     1     4
     2     3
     1     3

Mdl3 включает пять из шести доступных пар терминов взаимодействия.

Использование addInteractions Функция

Обучите одномерную GAM, которая содержит линейные условия для предикторов, и затем добавьте условия взаимодействия к обученной модели с помощью addInteractions функция. Задайте второй входной параметр addInteractions точно так же вы задаете 'Interactions' аргумент имя-значение fitcgam. Список членов взаимодействия можно задать с помощью логической матрицы, количества членов взаимодействия или 'all'.

Укажите количество членов взаимодействия как 5, чтобы добавить пять наиболее важных членов взаимодействия к обученной модели.

Mdl4 = fitcgam(tbl,'Y');
UpdatedMdl4 = addInteractions(Mdl4,5);
UpdatedMdl4.Interactions
ans = 5×2

     3     4
     2     4
     1     4
     2     3
     1     3

Mdl4 является одномерной GAM, и UpdatedMdl4 - обновленный GAM, содержащий все термины в Mdl4 и пять дополнительных условий взаимодействия.

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

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

load ionosphere

Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal' аргумент имя-значение как 'on'.

rng('default') % For reproducibility
CVMdl = fitcgam(X,Y,'CrossVal','on')
CVMdl = 
  ClassificationPartitionedGAM
    CrossValidatedModel: 'GAM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
      NumTrainedPerFold: [1x1 struct]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'logit'


  Properties, Methods

The fitcgam функция создает ClassificationPartitionedGAM объект модели CVMdl с 10 складками. Во время перекрестной проверки программное обеспечение завершает следующие шаги:

  1. Случайным образом разбейте данные на 10 наборов.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другие 9 наборов.

  3. Сохраните 10 компактных обученных моделей в векторе камеры 10 на 1 в Trained свойство перекрестно проверенного объекта модели ClassificationPartitionedGAM.

Вы можете переопределить настройку перекрестной проверки по умолчанию с помощью 'CVPartition', 'Holdout', 'KFold', или 'Leaveout' аргумент имя-значение.

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

label = kfoldPredict(CVMdl);

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

C = confusionchart(Y,label);

Figure contains an object of type ConfusionMatrixChart.

Вычислите ошибку классификации.

L = kfoldLoss(CVMdl)
L = 0.0712

Средняя степень неправильной классификации более 10 складок составляет около 7%.

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

Загрузка данных переписи 1994 года, хранящихся в census1994.mat. Набор данных состоит из демографических данных Бюро переписи населения США, чтобы предсказать, составляет ли индивидуум более 50 000 долларов в год. Задача классификации состоит в том, чтобы соответствовать модели, которая предсказывает категорию заработной платы людей с учетом их возраста, рабочего класса, уровня образования, семейного положения, расы и так далее.

load census1994

census1994 содержит обучающий набор обучающих данных adultdata и набор тестовых данных adulttest. Чтобы уменьшить время работы для этого примера, выделите 500 обучающих наблюдений из adultdata при помощи datasample функция.

rng('default')
NumSamples = 5e2;
adultdata = datasample(adultdata,NumSamples,'Replace',false);

Подготовка optimizableVariable объекты для аргументов имя-значение, которые необходимо оптимизировать с помощью байесовской оптимизации. Этот пример находит оптимальные значения для MaxNumSplitsPerPredictor и NumTreesPerPredictor аргументы fitcgam.

maxNumSplits = optimizableVariable('maxNumSplits',[1,10],'Type','integer');
numTrees = optimizableVariable('numTrees',[1,500],'Type','integer');

Создайте целевую функцию, которая принимает вход z = [maxNumSplits,numTrees] и возвращает перекрестно проверенное значение потерь z.

minfun = @(z)kfoldLoss(fitcgam(adultdata,'salary','CrossVal','on', ...
    'MaxNumSplitsPerPredictor',z.maxNumSplits, ...
    'NumTreesPerPredictor',z.numTrees)); 

Если вы задаете опцию перекрестной проверки ('CrossVal','on'), затем fitcgam функция возвращает перекрестно проверенный объект модели ClassificationPartitionedGAM. The kfoldLoss функция возвращает классификационные потери, полученные перекрестной проверенной моделью. Поэтому указатель на функцию minfun вычисляет потери перекрестной валидации у параметров в z.

Поиск оптимальных параметров [maxNumSplits,numTrees] использование bayesopt. Для повторяемости выберите 'expected-improvement-plus' функция сбора. Функция сбора по умолчанию зависит от времени выполнения и, следовательно, может давать различные результаты.

results = bayesopt(minfun,[maxNumSplits,numTrees],'Verbose',0, ...
    'IsObjectiveDeterministic',true, ...
    'AcquisitionFunctionName','expected-improvement-plus');

Получите лучшую точку от results.

zbest = bestPoint(results)
zbest=1×2 table
    maxNumSplits    numTrees
    ____________    ________

         1            123   

Обучите оптимизированную GAM с помощью zbest значения.

Mdl = fitcgam(adultdata,'salary', ...
    'MaxNumSplitsPerPredictor',zbest.maxNumSplits, ...
    'NumTreesPerPredictor',zbest.numTrees);

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

свернуть все

Выборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.

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

    • Переменная отклика должна быть категориальными символьными или строковыми массивами, логическим или числовым вектором или массивом ячеек из векторов символов. Хорошей практикой является определение порядка классов в переменной отклика при помощи 'ClassNames' аргумент имя-значение.

    • Столбец для весов должен быть числовым вектором.

    Вы должны задать переменную отклика в Tbl при помощи ResponseVarName или formula и задайте веса наблюдений в Tbl при помощи 'Weights'.

    • Задайте переменную отклика при помощи ResponseVarNamefitcgam использует оставшиеся переменные в качестве предикторов. Чтобы использовать подмножество остальных переменных в Tbl в качестве предикторов задайте переменные предиктора при помощи 'PredictorNames'.

    • Задайте спецификацию модели при помощи formulafitcgam использует подмножество переменных в Tbl как переменные предиктора и переменная отклика, как задано в formula.

  • Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика Y и количество строк в Tbl должно быть равным. Чтобы использовать подмножество переменных в Tbl в качестве предикторов задайте переменные предиктора при помощи 'PredictorNames'.

fitcgam рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Tbl чтобы быть отсутствующими значениями.

  • fitcgam не использует наблюдения со всеми отсутствующими значениями в подгонке.

  • fitcgam не использует наблюдения с отсутствующими значениями отклика в подгонке.

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

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

Имя переменной отклика, заданное как вектор символов или строковый скаляр, содержащий имя переменной отклика в Tbl. Для примера, если переменная отклика Y хранится в Tbl.Y, затем укажите его следующим 'Y'.

Типы данных: char | string

Спецификация модели, заданная в виде вектора символов или строкового скаляра в форме 'Y ~ terms'. The formula аргумент задает переменную отклика и линейные условия и условия взаимодействия для переменных предиктора. Использование formula для задания подмножества переменных в Tbl как предикторы для настройки модели. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

Для примера задайте 'Y~x1+x2+x3+x1:x2'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют линейные условия для переменных. x1:x2 представляет термин взаимодействия для x1 и x2.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Кроме того, можно задать переменную отклика и линейные условия для предикторов, использующих formula, и задайте условия взаимодействия для предикторов, использующих 'Interactions'.

fitcgam создает набор деревьев взаимодействия, используя только те условия, p которых значения не больше 'MaxPValue' значение.

Пример: 'Y~x1+x2+x3+x1:x2'

Типы данных: char | string

Метки класса, заданные как категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Каждая строка Y представляет классификацию соответствующей строки X или Tbl.

Хорошей практикой является определение порядка классов при помощи 'ClassNames' аргумент имя-значение.

fitcgam рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Y чтобы быть отсутствующими значениями. fitcgam не использует наблюдения с отсутствующими значениями отклика в подгонке.

Типы данных: single | double | categorical | logical | char | string | cell

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

fitcgam рассматривает NaN значения в X как отсутствующие значения. Функция не использует наблюдения со всеми отсутствующими значениями в подгонке. fitcgam использует наблюдения с некоторыми отсутствующими значениями для X чтобы найти разделения на переменные, для которых эти наблюдения имеют допустимые значения.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Interactions','all','MaxPValue',0.05 задает, чтобы включать все доступные условия взаимодействия, значения p которых не более 0,05.
Опции GAM

свернуть все

Начальная скорость обучения ускорения градиента для членов взаимодействия, заданная как числовой скаляр в интервале (0,1].

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

Настройка модели с использованием малой скорости обучения требует большего количества итераций обучения, но часто достигает лучшей точности.

Для получения дополнительной информации о ускорении градиента, см. Алгоритм ускорения градиента.

Пример: 'InitialLearnRateForInteractions',0.1

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

Начальная скорость обучения для ускорения градиента для линейных членов, заданная как числовой скаляр в интервале (0,1].

Для каждой итерации увеличения для деревьев предикторов, fitcgam начинает аппроксимацию с начальной скоростью обучения. Функция уменьшает скорость обучения вдвое, пока не найдет скорость, которая улучшает подгонку модели.

Настройка модели с использованием малой скорости обучения требует большего количества итераций обучения, но часто достигает лучшей точности.

Для получения дополнительной информации о ускорении градиента, см. Алгоритм ускорения градиента.

Пример: 'InitialLearnRateForPredictors',0.1

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

Количество или список членов взаимодействия для включения в S набора кандидатов, заданные как неотрицательный целочисленный скаляр, логическая матрица или 'all'.

  • Количество членов взаимодействия, заданное как неотрицательное целое число - S включает указанное количество важных членов взаимодействия, выбранных исходя из p - значений членов.

  • Список условий взаимодействия, заданных как логическая матрица - S включает условия, заданные t-by- p логическая матрица, где t количество членов взаимодействия и p - количество предикторов, используемых для обучения модели. Для примера, logical([1 1 0; 0 1 1]) представляет две пары членов взаимодействия: пару первого и второго предикторов и пару второго и третьего предикторов.

    Если fitcgam использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. То есть индексы столбцов логической матрицы не подсчитывают переменные веса отклика и наблюдения. Индексы также не подсчитывают переменные, не используемые функцией.

  • 'all' - S включает все возможные пары членов взаимодействия, что   p*(p – 1)/2 количество терминов в общей сложности.

Среди терминов взаимодействия в S, fitcgam функция идентифицирует те, чьи p -значения не больше 'MaxPValue' и использует их, чтобы создать набор деревьев взаимодействия. Используйте значение по умолчанию ('MaxPValue'1) для построения деревьев взаимодействия с использованием всех терминов в S.

Пример: 'Interactions','all'

Типы данных: single | double | logical | char | string

Максимальное количество разделений решений (или узлов ветви) для каждого дерева взаимодействия (повышенное дерево для термина взаимодействия), заданное как положительный целочисленный скаляр.

Пример: 'MaxNumSplitsPerInteraction',5

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

Максимальное количество разделений решений (или узлов ветви) для каждого дерева предикторов (усиленное дерево для линейного термина), заданное как положительный целочисленный скаляр. По умолчанию, fitcgam использует пень дерева для дерева предиктора.

Пример: 'MaxNumSplitsPerPredictor',5

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

Максимальное p-значение для обнаружения членов взаимодействия, заданное в виде числа в интервале [0,1].

fitcgam сначала находит набор кандидатов, S членов взаимодействия formula или 'Interactions'. Затем функция идентифицирует условия взаимодействия, p которых - значения не больше 'MaxPValue' и использует их, чтобы создать набор деревьев взаимодействия.

Значение по умолчанию ('MaxPValue',1) строит деревья взаимодействия для всех членов взаимодействия в S набора кандидатов.

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

Пример: 'MaxPValue',0.05

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

Количество интервалов для числовых предикторов, заданное как положительный целочисленный скаляр или [] (пустой).

  • Если вы задаете 'NumBins' значение как положительный целочисленный скаляр (numBins), затем fitcgam помещает каждый числовой предиктор в самое большее numBins equiprobable bins, а затем выращивает деревья на индексах интервал вместо исходных данных.

    • Количество интервалов может быть меньше numBins если предиктор имеет меньше numBins уникальные значения.

    • fitcgam не содержит категориальные предикторы.

  • Если на 'NumBins' значение пусто ([]), затем fitcgam не содержит предикторов.

Когда вы используете большой набор обучающих данных, эта опция binning ускоряет обучение, но может привести к снижению точности. Сначала можно использовать значение по умолчанию 'NumBins', а затем измените значение в зависимости от точности и скорости обучения.

Обученная модель Mdl сохраняет границы интервала в BinEdges свойство.

Пример: 'NumBins',50

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

Количество деревьев на один член взаимодействия, заданное как положительный целочисленный скаляр.

The 'NumTreesPerInteraction' значение эквивалентно количеству итераций ускорения градиента для членов взаимодействия для предикторов. Для каждой итерации, fitcgam добавляет к модели набор деревьев взаимодействия, по одному дереву для каждого термина взаимодействия. Чтобы узнать о алгоритме ускорения градиента, см. «Алгоритм ускорения градиента».

Можно определить, имеет ли подобранная модель заданное количество деревьев, просмотрев диагностическое сообщение, отображаемое при 'Verbose' равен 1 или 2, или путем проверки ReasonForTermination значение свойства модели Mdl.

Пример: 'NumTreesPerInteraction',500

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

Количество деревьев на один линейный член, заданное как положительный целочисленный скаляр.

The 'NumTreesPerPredictor' значение эквивалентно количеству итераций ускорения градиента для линейных членов для предикторов. Для каждой итерации, fitcgam добавляет к модели набор деревьев предикторов, по одному дереву для каждого предиктора. Чтобы узнать о алгоритме ускорения градиента, см. «Алгоритм ускорения градиента».

Можно определить, имеет ли подобранная модель заданное количество деревьев, просмотрев диагностическое сообщение, отображаемое при 'Verbose' равен 1 или 2, или путем проверки ReasonForTermination значение свойства модели Mdl.

Пример: 'NumTreesPerPredictor',500

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

Другие опции классификации

свернуть все

Категориальный список предикторов, заданный как одно из значений в этой таблице.

ЗначениеОписание
Вектор положительных целых чисел

Каждая запись в векторе является индексом значением, соответствующим столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся между 1 и p, где p - количество предикторов, используемых для обучения модели.

Если fitcgam использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

Логический вектор

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

Матрица символовКаждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames. Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину.
Строковые массивы или массив ячеек векторов символовКаждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames.
'all'Все предикторы категоричны.

По умолчанию, если данные предиктора находятся в таблице (Tbl), fitcgam принимает, что переменная категориальна, если это логический вектор, неупорядоченный категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fitcgam принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors' аргумент имя-значение.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена классов, используемых для обучения, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов. ClassNames должен иметь тот совпадающий тип данных, что и переменная отклика в Tbl или Y.

Если ClassNames является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

Использование ClassNames кому:

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

  • Задайте порядок любой размерности входного или выходного аргумента, которая соответствует порядку классов. Для примера используйте ClassNames для определения порядка размерностей Cost или порядок столбцов классификационных оценок, возвращаемых predict.

  • Выберите подмножество классов для обучения. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Чтобы обучить модель с помощью наблюдений из классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

Значение по умолчанию для ClassNames - набор всех различных имен классов в переменной отклика в Tbl или Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

Стоимость неправильной классификации точки, заданная как одно из следующего:

  • Числовая матрица 2 на 2, где Cost(i,j) - стоимость классификации точки в класс j если его класс true i (то есть строки соответствуют истинному классу, а столбцы - предсказанному классу). Чтобы задать порядок классов для соответствующих строк и столбцов Cost, установите 'ClassNames' аргумент имя-значение.

  • Структурные S с двумя полями: S.ClassNames, который содержит имена групп как переменная того совпадающий тип данных, что и переменная отклика в Tbl или Y; и S.ClassificationCosts, которая содержит матрицу затрат.

Пример: 'Cost',[0 2; 1 0]

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

Количество итераций между распечатками диагностических сообщений, заданное как неотрицательный целочисленный скаляр. Этот аргумент действителен только тогда, когда вы задаете 'Verbose' как 1.

Если вы задаете 'Verbose',1 и 'NumPrint',numPrint, затем программное обеспечение отображает диагностические сообщения каждый numPrint итерации в Командном окне.

Пример: 'NumPrint',500

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

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

  • Если вы поставляете X и Y, тогда можно использовать PredictorNames для назначения имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} - имя X(:,1), PredictorNames{2} - имя X(:,2)и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, тогда можно использовать PredictorNames выбрать, какие переменные предиктора использовать в обучении. То есть, fitcgam использует только переменные предиктора в PredictorNames и переменной отклика во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

Типы данных: string | cell

Предыдущие вероятности для каждого класса, заданные как один из следующих:

  • Вектор символов или строковый скаляр.

    • 'empirical' определяет вероятности классов из частот классов в переменной отклика в Y или Tbl. Если вы передаете веса наблюдений, fitcgam использует веса, чтобы вычислить вероятности классов.

    • 'uniform' устанавливает все вероятности классов равными.

  • Вектор (по одному скалярному значению для каждого класса). Чтобы задать порядок классов для соответствующих элементов 'Prior', установите 'ClassNames' аргумент имя-значение.

  • Структурные S с двумя полями.

    • S.ClassNames содержит имена классов как переменная того же типа, что и переменная отклика в Y или Tbl.

    • S.ClassProbs содержит вектор соответствующих вероятностей.

fitcgam нормализует веса в каждом классе ('Weights') для сложения значения априорной вероятности соответствующего класса.

Пример: 'Prior','uniform'

Типы данных: char | string | single | double | struct

Имя переменной отклика, заданное как вектор символов или строковый скаляр.

  • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

  • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

Типы данных: char | string

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

В этой таблице суммированы доступные преобразования счетов. Задайте один с помощью соответствующего вектора символов или строкового скаляра.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования счета. Указатель на функцию должен принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).

Этот аргумент определяет выход счета расчета для функций объекта, таких как predict, margin, и edge. Использование 'logit' (по умолчанию) для вычисления апостериорных вероятностей и использования 'none' вычислить логит апостериорных вероятностей.

Пример: 'ScoreTransform','none'

Типы данных: char | string | function_handle

Уровень подробностей, заданный как 0, 1, или 2. The Verbose значение управляет объемом информации, отображаемой программным обеспечением в Командном окне.

В этой таблице представлены доступные опции уровня подробностей.

ЗначениеОписание
0Программа не отображает никакой информации.
1Программа отображает диагностические сообщения каждый numPrint итерации, где numPrint является 'NumPrint' значение.
2Программа отображает диагностические сообщения при каждой итерации.

Каждая линия диагностических сообщений показывает информацию о каждой усиливающей итерации и включает следующие столбцы:

  • Type - Тип обученных деревьев, 1D (деревья предикторов или усиленные деревья для линейных терминов для предикторов) или 2D (деревья взаимодействия или усиленные деревья для условий взаимодействия для предикторов)

  • NumTrees - Количество деревьев на линейный термин или термин взаимодействия, который fitcgam добавлено к модели до сих пор

  • Deviance - Отклонение модели

  • RelTol - Относительное изменение предсказаний модели: (y^ky^k1)(y^ky^k1)/y^ky^k, где y^k является вектор-столбец предсказаний модели при итерации k

  • LearnRate - Скорость обучения, используемый для текущей итерации

Пример: 'Verbose',1

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

Веса наблюдений, заданные как вектор скалярных значений или имя переменной в Tbl. Программа взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк в X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится в Tbl.W, затем укажите его следующим 'W'.

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

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

Опции перекрестной валидации

свернуть все

Флаг для обучения перекрестно проверенной модели, заданный как 'on' или 'off'.

Если вы задаете 'on', затем программное обеспечение обучает перекрестно проверенную модель с 10 складками.

Вы можете переопределить этот параметр перекрестной проверки с помощью 'CVPartition', 'Holdout', 'KFold', или 'Leaveout' аргумент имя-значение. Для создания модели с перекрестной проверкой можно использовать только один аргумент имя-значение перекрестной проверки за раз.

Кроме того, перекрестная проверка после создания модели путем передачи Mdl кому crossval.

Пример: 'Crossval','on'

Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

  1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

  2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

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

Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

  1. Случайным образом разделите данные на k наборы.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

  3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

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

Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

  1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

  2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

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

свернуть все

Обученная обобщенная аддитивная модель, возвращенная как один из объектов модели в этой таблице.

Объект моделиОпции перекрестной валидации для обучения объекта моделиСпособы классификации наблюдений с помощью объекта модели
ClassificationGAMНичегоИспользовать predict для классификации новых наблюдений и использования resubPredict классифицировать обучающие наблюдения.
ClassificationPartitionedGAMЗадайте KFold, Holdout, Leaveout, CrossVal, или CVPartitionИспользовать kfoldPredict классифицировать наблюдения, которые fitcgam протягивается во время обучения. kfoldPredict предсказывает метку класса для каждого наблюдения при помощи модели, обученной без этого наблюдения.

Ссылка на свойства Mdl, используйте запись через точку. Для примера введите Mdl.Interactions в Командном окне, чтобы отобразить условия взаимодействия в Mdl.

Подробнее о

свернуть все

Обобщенная аддитивная модель (GAM) для двоичной классификации

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

fitcgam использует усиленное дерево в качестве функции формы для каждого предиктора и, опционально, для каждой пары предикторов; поэтому функция может захватывать нелинейное отношение между предиктором и переменной отклика. Поскольку вклады отдельных функций формы в предсказание (классификационная оценка) хорошо разделены, модель легко интерпретировать.

Стандартная GAM использует одномерную функцию формы для каждого предиктора.

y~Binomial(n,μ)g(μ)=logμ1μ=c+f1(x1)+f2(x2)++fp(xp),

где y - переменная отклика, которая следует биномиальному распределению с вероятностью успеха (вероятность положительного класса), μ в n наблюдениях. g (μ) является функцией ссылки логита, а c - точка пересечения (константа) термин. fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).

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

g(μ)=c+f1(x1)+f2(x2)++fp(xp)+i,j{1,2,,p}fij(xixj),

где fij (xi xj) - двухмерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для термина взаимодействия для предикторов (дерева взаимодействия).

fitcgam находит важные условия взаимодействия на основе p -values F -tests. Для получения дополнительной информации смотрите Обнаружение терминов взаимодействия.

Отклонение

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

Отклонение подобранной модели в два раза больше разницы между логарифмической правдоподобностью модели и насыщенной моделью:

-2 (log L - log Ls),

где L и Ls являются вероятностями подобранной модели и насыщенной модели, соответственно. Насыщенная модель является моделью с максимальным количеством параметров, которые вы можете оценить.

fitcgam использует отклонение для измерения качества модели и находит скорость обучения, которая уменьшает отклонение при каждой итерации. Задайте 'Verbose' равным 1 или 2, чтобы отобразить отклонение и скорость обучения в Командном окне.

Алгоритмы

свернуть все

Алгоритм ускорения градиента

fitcgam подходит для обобщенной аддитивной модели с использованием алгоритма ускорения градиента (Adaptive Logistic Regression).

fitcgam сначала строит наборы деревьев предикторов (усиленные деревья для линейных членов для предикторов), а затем строит наборы деревьев взаимодействий (усиленные деревья для терминов взаимодействия для предикторов). Алгоритм бустинга итерирует самое большее 'NumTreesPerPredictor' время для деревьев предикторов, а затем итерация для большинства 'NumTreesPerInteraction' время для деревьев взаимодействия.

Для каждой итерации увеличения, fitcgam создает набор деревьев предикторов с начальной скоростью обучения 'InitialLearnRateForPredictors', или создает набор деревьев взаимодействия с начальной скоростью обучения 'InitialLearnRateForInteractions'.

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

    • Обновленная модель = текущая модель + (темп обучения)· (новое дерево)

    • Обновлённая невязка = текущая невязка - (темп обучения)· (ответ объясняется новым деревом)

  • Если добавление набора деревьев улучшает подгонка модели (то есть уменьшает отклонение подгонки), то fitcgam переходит к следующей итерации.

  • В противном случае, fitcgam уменьшает вдвое скорость обучения и использует его, чтобы обновить модель и невязку. Функция продолжает уменьшать скорость обучения вдвое, пока не найдет скорость, которая улучшает подгонку модели.

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

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

    Можно определить, почему обучение остановлено, проверив ReasonForTermination свойство обученной модели.

Обнаружение терминов взаимодействия

Для каждого парного термина взаимодействия xi xj (задается formula или 'Interactions'), программное обеспечение выполняет F-тест, чтобы выяснить, является ли термин статистически значимым.

Чтобы ускорить процесс, fitcgam заключает числовые предикторы в самое большее 8 уравнительных интервалов. Количество интервалов может быть меньше 8, если предиктор имеет меньше 8 уникальных значений. F-test исследует нулевую гипотезу о том, что интервалы, созданные xi и xj, имеют одинаковые отклики по сравнению с альтернативой, что, по крайней мере, одно интервал имеет отличное значение отклика от других. Небольшое p -значение указывает, что различия значительны, что подразумевает, что соответствующий термин взаимодействия значителен и, следовательно, включая термин может улучшить подгонку модели.

fitcgam создает набор деревьев взаимодействия с помощью членов, значения p которых не больше 'MaxPValue' значение. Можно использовать 'MaxPValue' по умолчанию значение 1 для построения деревьев взаимодействия с использованием всех терминов, заданных formula или 'Interactions'.

fitcgam добавляет к модели условия взаимодействия в порядке важности на основе p значений. Используйте Interactions свойство возвращаемой модели для проверки порядка добавленных в модель членов взаимодействия.

Ссылки

[1] Лу, Инь, Рич Каруана и Йоханнес Герке. «Внятные модели для классификации и регрессии». Материалы 18-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных (KDD "12). Пекин, Китай: Пресса ACM, 2012, стр. 150-158.

[2] Лу, Инь, Рич Каруана, Йоханнес Герке и Джайлз Хукер. «Точные интеллектуальные модели с парными взаимодействиями». Материалы 19-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных (KDD "13) Чикаго, Иллинойс, США: ACM Press, 2013, стр. 623-631.

Введенный в R2021a