Обобщенная аддитивная модель (GAM) для двоичной классификации
A ClassificationGAM объект является обобщенным объектом аддитивной модели (GAM) для двоичной классификации. Это интерпретируемая модель, которая объясняет оценки классов (логит вероятностей классов), используя сумму одномерных и двумерных функций формы.
Можно классифицировать новые наблюдения с помощью predict и постройте график влияния каждой функции формы на прогноз (оценка класса) для наблюдения с помощью plotLocalEffects функция. Полный список функций объекта для ClassificationGAM, см. Функции объекта.
Создать ClassificationGAM объект с помощью fitcgam. Можно указать как линейные термины, так и условия взаимодействия для предикторов, чтобы включить одномерные функции формы (деревья предикторов) и двумерные функции формы (деревья взаимодействий) в обучаемую модель соответственно.
Можно обновить обучаемую модель с помощью resume или addInteractions.
resume функция возобновляет обучение для существующих терминов в модели.
addInteractions функция добавляет элементы взаимодействия в модель, содержащую только линейные элементы.
BinEdges - Края ячеек для числовых предикторов[]Это свойство доступно только для чтения.
Ребра ячеек для числовых предикторов, заданные как массив ячеек из p числовых векторов, где p - число предикторов. Каждый вектор включает в себя края ячейки для числового предсказателя. Элемент в массиве ячеек для категориального предиктора пуст, поскольку программное обеспечение не содержит категориальных предикторов.
Программа содержит числовые предикторы только при указании 'NumBins' аргумент «имя-значение» в качестве положительного целого скаляра при обучении модели с учащимися дерева. BinEdges пустое свойство, если 'NumBins' пустое значение (по умолчанию).
Можно воспроизвести привязанные данные предиктора Xbinned с помощью BinEdges свойство обучаемой модели mdl.
X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
idxNumeric = idxNumeric';
end
for j = idxNumeric
x = X(:,j);
% Convert x to array if x is a table.
if istable(x)
x = table2array(x);
end
% Group x into bins by using the discretize function.
xbinned = discretize(x,[-inf; edges{j}; inf]);
Xbinned(:,j) = xbinned;
endXbinned содержит индексы ячеек в диапазоне от 1 до числа ячеек для числовых предикторов. Xbinned значения равны 0 для категориальных предикторов. Если X содержит NaNs, затем соответствующее Xbinned значения NaNs.
Типы данных: cell
Interactions - Индексы терминов взаимодействия[]Это свойство доступно только для чтения.
Индексы терминов взаимодействия, указанные как t-на-2 матрица положительных чисел, где t - количество терминов взаимодействия в модели. Каждая строка матрицы представляет один член взаимодействия и содержит индексы столбцов данных предиктора. X для термина взаимодействия. Если модель не включает член взаимодействия, то это свойство пустое ([]).
Программное обеспечение добавляет условия взаимодействия в модель в порядке важности на основе значений p. Это свойство используется для проверки порядка терминов взаимодействия, добавленных в модель.
Типы данных: double
Intercept - Срок перехвата моделиЭто свойство доступно только для чтения.
Член перехвата (константа) модели, который является суммой членов перехвата в деревьях предикторов и деревьях взаимодействия, заданных как числовой скаляр.
Типы данных: single | double
ModelParameters - Параметры, используемые для обучения моделиЭто свойство доступно только для чтения.
Параметры, используемые для обучения модели, заданные как объект параметра модели. ModelParameters содержит значения параметров, например, для аргументов «имя-значение», используемых для обучения модели. ModelParameters не содержит оценочных параметров.
Доступ к полям ModelParameters используя точечную нотацию. Например, получить доступ к максимальному количеству разделений решений для каждого дерева взаимодействия с помощью Mdl.ModelParameters.MaxNumSplitsPerInteraction.
PairDetectionBinEdges - Края бункера для обнаружения терминов взаимодействияЭто свойство доступно только для чтения.
Границы ячеек для обнаружения членов взаимодействия для числовых предикторов, заданных как массив ячеек из p числовых векторов, где p - число предикторов. Каждый вектор включает в себя края ячейки для числового предсказателя. Элемент в массиве ячеек для категориального предиктора пуст, поскольку программное обеспечение не содержит категориальных предикторов.
Чтобы ускорить процесс обнаружения терминов взаимодействия, программное обеспечение помещает числовые предикторы максимум в 8 четких ячеек. Количество ячеек может быть меньше 8, если предиктор имеет менее 8 уникальных значений.
Типы данных: cell
ReasonForTermination - Причина остановки обученияЭто свойство доступно только для чтения.
Причина обучения останавливается модель, указанная как структура с двумя полями, PredictorTrees и InteractionTrees.
Используйте это свойство, чтобы проверить, содержит ли модель указанное количество деревьев для каждого линейного члена ('NumTreesPerPredictor') и для каждого члена взаимодействия ('NumTreesPerInteraction'). Если fitcgam функция прекращает обучение перед добавлением указанного количества деревьев, это свойство содержит причину завершения.
Типы данных: struct
CategoricalPredictors - Индексы категориального предиктора[]Это свойство доступно только для чтения.
Индексы категориального предиктора, указанные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).
Типы данных: double
ClassNames - Уникальные метки классаЭто свойство доступно только для чтения.
Уникальные метки классов, используемые в обучении, указанные как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. ClassNames имеет тот же тип данных, что и метки класса Y. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
ClassNames также определяет порядок классов.
Типы данных: single | double | logical | char | cell | categorical
Cost - Расходы на неправильную классификациюЗатраты на неправильную классификацию, указанные как числовая матрица 2 на 2.
Cost( - стоимость классификации точки по классу i,j)j если его истинный класс i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.
Программное обеспечение использует Cost значение для прогнозирования, но не обучения. Значение можно изменить с помощью точечной нотации.
Пример: Mdl.Cost = C;
Типы данных: double
ExpandedPredictorNames - Расширенные имена предикторовЭто свойство доступно только для чтения.
Расширенные имена предикторов, заданные как массив ячеек символьных векторов.
ExpandedPredictorNames является таким же, как PredictorNames для обобщенной аддитивной модели.
Типы данных: cell
NumObservations - Количество наблюденийЭто свойство доступно только для чтения.
Количество наблюдений в данных обучения, хранящихся в X и Y, указывается как числовой скаляр.
Типы данных: double
PredictorNames - Имена переменных предиктораЭто свойство доступно только для чтения.
Имена переменных предиктора, заданные как массив ячеек векторов символов. Порядок элементов PredictorNames соответствует порядку, в котором имена предикторов появляются в данных обучения.
Типы данных: cell
Prior - Вероятности предыдущего классаЭто свойство доступно только для чтения.
Вероятности предшествующего класса, определенные как числовой вектор с двумя элементами. Порядок элементов соответствует порядку элементов в ClassNames.
Типы данных: double
ResponseName - Имя переменной ответаЭто свойство доступно только для чтения.
Имя ответной переменной, указанное как символьный вектор.
Типы данных: char
RowsUsed - Строки, используемые в фитинге[] | логический векторЭто свойство доступно только для чтения.
Строки исходных учебных данных, используемых при подборе ClassificationGAM модель, заданная как логический вектор. Это свойство пусто, если используются все строки.
Типы данных: logical
ScoreTransform - Преобразование балловПреобразование баллов, указанное как символьный вектор или дескриптор функции. ScoreTransform представляет встроенную функцию преобразования или дескриптор функции для преобразования прогнозируемых оценок классификации.
Изменение функции преобразования баллов на function, например, использовать точечную нотацию.
Для встроенной функции введите символьный вектор.
Mdl.ScoreTransform = 'function';
В этой таблице описаны доступные встроенные функции.
| Стоимость | Описание |
|---|---|
'doublelogit' | 1/( 1 + e-2x) |
'invlogit' | log (x/( 1 - x)) |
'ismax' | Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0 |
'logit' | 1/( 1 + e-x) |
'none' или 'identity' | x (без преобразования) |
'sign' | -1 для x < 0 0 для x = 0 1 для x > 0 |
'symmetric' | 2x – 1 |
'symmetricismax' | Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1 |
'symmetriclogit' | 2/( 1 + e-x) - 1 |
Для определяемой функции MATLAB ® или функции введите ее дескриптор.
Mdl.ScoreTransform = @function;
function должен принять матрицу (исходные баллы) и вернуть матрицу того же размера (преобразованные баллы).
Это свойство определяет вычисление выходного балла для функций объекта, таких как predict, margin, и edge. Использовать 'logit' для вычисления задних вероятностей и использования 'none' для вычисления логита задних вероятностей.
Типы данных: char | function_handle
W - Наблюдательные весаЭто свойство доступно только для чтения.
Веса наблюдений, используемые для обучения модели, заданные как n-by-1 числовой вектор. n - количество наблюдений (NumObservations).
Программное обеспечение нормализует веса наблюдения, указанные в 'Weights' аргумент имя-значение, чтобы элементы W внутри конкретного класса суммируется с предшествующей вероятностью этого класса.
Типы данных: double
X - ПредикторыЭто свойство доступно только для чтения.
Предикторы, используемые для обучения модели, указанные как числовая матрица или таблица.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single | double | table
Y - Этикетки классовЭто свойство доступно только для чтения.
Метки классов, используемые для обучения модели, задаются как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Y имеет тот же тип данных, что и переменная ответа, используемая для обучения модели. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Каждая строка Y представляет наблюдаемую классификацию соответствующей строки X.
Типы данных: single | double | logical | char | cell | categorical
CompactClassificationGAMcompact | Уменьшение размера модели машинного обучения |
ClassificationPartitionedGAMcrossval | Модель машинного обучения с перекрестной проверкой |
addInteractions | Добавление терминов взаимодействия в одномерную обобщенную аддитивную модель (GAM) |
resume | Возобновление обучения обобщенной аддитивной модели (GAM) |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
partialDependence | Вычислить частичную зависимость |
plotLocalEffects | Построить график локальных эффектов терминов в обобщенной аддитивной модели (GAM) |
plotPartialDependence | Создание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE) |
shapley | Значения Шапли |
resubPredict | Классификация данных обучения с использованием обученного классификатора |
resubLoss | Потеря классификации возмещения |
resubMargin | Маржа классификации ресообразования |
resubEdge | Край классификации повторной субституции |
compareHoldout | Сравнение точности двух классификационных моделей с использованием новых данных |
testckfold | Сравнение точности двух классификационных моделей с помощью повторной перекрестной проверки |
Тренируйте одномерную обобщенную аддитивную модель, которая содержит линейные термины для предикторов. Затем интерпретируйте прогноз для указанного экземпляра данных с помощью 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,:))

predict функция классифицирует первое наблюдение X(1,:) как 'g'. 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.Interactionsans = 5×2
3 4
2 4
1 4
2 3
1 3
Mdl4 является одномерным GAM, и UpdatedMdl4 является обновленным GAM, который содержит все термины в Mdl4 и пять дополнительных условий взаимодействия.
Обучайте одномерную классификацию GAM (которая содержит только линейные члены) для небольшого числа итераций. После обучения модели для дополнительных итераций сравните потери при ресоздании.
Загрузить ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный отклик для радарных возвращений, либо плохой ('b') или хорошо ('g').
load ionosphereОбучить одномерный GAM, который определяет, является ли возврат радара плохим ('b') или хорошо ('g'). Укажите число деревьев на линейный член как 2. fitcgam выполняет итерацию алгоритма повышения для указанного числа итераций. Для каждой повышающей итерации функция добавляет одно дерево на линейный член. Определить 'Verbose' 2 для отображения диагностических сообщений при каждой итерации.
Mdl = fitcgam(X,Y,'NumTreesPerPredictor',2,'Verbose',2);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 1D| 0| 486.59| - | - | | 1D| 1| 166.71| Inf| 1| | 1D| 2| 78.336| 0.58205| 1|
Чтобы проверить, fitcgam поезда указанное количество деревьев, отображение ReasonForTermination свойство обучаемой модели и просмотр отображаемого сообщения.
Mdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Terminated after training the requested number of trees.'
InteractionTrees: ''
Вычислите потери классификации для данных обучения.
resubLoss(Mdl)
ans = 0.0142
Возобновите обучение модели еще для 100 итераций. Поскольку Mdl содержит только линейные члены, resume функция возобновляет обучение для линейных членов и добавляет для них больше деревьев (деревьев предикторов). Определить 'Verbose' и 'NumPrint' отображение диагностических сообщений при каждых 10 итерациях.
UpdatedMdl = resume(Mdl,100,'Verbose',1,'NumPrint',10);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 1D| 0| 78.336| - | - | | 1D| 1| 38.364| 0.17429| 1| | 1D| 10| 0.16311| 0.011894| 1| | 1D| 20| 0.00035693| 0.0025178| 1| | 1D| 30| 8.1191e-07| 0.0011006| 1| | 1D| 40| 1.7978e-09| 0.00074607| 1| | 1D| 50| 3.6113e-12| 0.00034404| 1| | 1D| 60| 1.7497e-13| 0.00016541| 1|
UpdatedMdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Unable to improve the model fit.'
InteractionTrees: ''
resume прекращает обучение, когда добавление новых деревьев не улучшает отклонение модели.
Вычислите потерю классификации с помощью обновленной модели.
resubLoss(UpdatedMdl)
ans = 0
Потеря классификации уменьшается после resume обновляет модель с помощью дополнительных итераций.
Обобщённая аддитивная модель (GAM) - интерпретируемая модель, которая объясняет оценки классов (логит вероятностей классов), используя сумму одномерных и двумерных функций формы предикторов.
fitcgam использует усиленное дерево в качестве функции формы для каждого предиктора и, необязательно, для каждой пары предикторов; следовательно, функция может фиксировать нелинейное отношение между предиктором и переменной отклика. Поскольку вклады отдельных функций формы в прогноз (классификационный балл) хорошо разделены, модель легко интерпретировать.
Стандартный GAM использует одномерную функцию формы для каждого предиктора.
f2 (x2) +⋯+fp (xp),
где y - переменная отклика, которая следует за биномиальным распределением с вероятностью успеха (вероятность положительного класса) λ в n наблюдениях. g (λ) является функцией логитовой линии связи, а c - член перехвата (константа). fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).
Можно включить взаимодействия между предикторами в модель, добавив в модель двумерные функции формы важных терминов взаимодействия.
+∑i,j∈{1,2,⋯,p}fij (xixj),
где fij (xixj) - двумерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для члена взаимодействия для предикторов (дерева взаимодействия).
fitcgam находит важные условия взаимодействия на основе p-значений F-тестов. Дополнительные сведения см. в разделе Определение терминов взаимодействия.
[1] Лу, Инь, Рич Каруана и Йоханнес Герке. «Внятные модели для классификации и регрессии». Материалы 18-й Международной конференции АСМ СИГКДД по вопросам обнаружения знаний и интеллектуального анализа данных (KDD "12). Пекин, Китай: ACM Press, 2012, стр. 150-158.
[2] Лу, Инь, Рич Каруана, Йоханнес Герке и Джайлс Хукер. «Точные внятные модели с парными взаимодействиями». Материалы 19-й Международной конференции ACM SIGKDD по открытию знаний и анализу данных (KDD "13), Чикаго, Иллинойс, США: ACM Press, 2013, стр. 623-631.
addInteractions | ClassificationPartitionedGAM | CompactClassificationGAM | fitcgam | resume
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.