Обобщенная аддитивная модель (GAM) для двоичной классификации
A ClassificationGAM
объект является объектом обобщенной аддитивной модели (GAM) для двоичной классификации. Это интерпретируемая модель, которая объясняет счета классов (логит вероятностей классов) с помощью суммы одномерных и двухмерных функций формы.
Можно классифицировать новые наблюдения при помощи predict
function, и построить эффект каждой функции формы на предсказание (счет класса) для наблюдения с помощью plotLocalEffects
функция. Полный список функций объекта для ClassificationGAM
, см. Функции объекта.
Создайте ClassificationGAM
объект при помощи fitcgam
. Можно задать как линейные условия, так и условия взаимодействия для предикторов, чтобы включить одномерные функции формы (деревья предикторов) и двухмерные функции формы (деревья взаимодействия) в обученную модель, соответственно.
Вы можете обновить обученную модель при помощи resume
или addInteractions
.
resume
функция возобновляет обучение для существующих членов в модели.
addInteractions
функция добавляет условия взаимодействия к модели, которая содержит только линейные условия.
BinEdges
- Границы интервала для числовых предикторов[]
Это свойство доступно только для чтения.
Границы интервала для числовых предикторов, заданные как массив ячеек из p числовых векторов, где p - количество предикторов. Каждый вектор включает границы интервала для числового предиктора. Элемент в массиве ячеек для категориального предиктора пуст, потому что программное обеспечение не встраивает категориальные предикторы.
Программное обеспечение помещает числовые предикторы только, если вы задаете 'NumBins'
аргумент имя-значение как положительный целочисленный скаляр при обучении модели с учениками дерева. The 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;
end
Xbinned
содержит индексы интервала в диапазоне от 1 до количества интервалов для числовых предикторов. Xbinned
значения 0 для категориальных предикторов. Если X
содержит NaN
s, затем соответствующее Xbinned
значения NaN
с.
Типы данных: cell
Interactions
- Индексы терминов взаимодействия[]
Это свойство доступно только для чтения.
Индексы терминов взаимодействия, заданные как t
-by-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.
Стоимость
- стоимость классификации точки в класс (i
, j
)j
если его класс true 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' | журнал (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' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию.
Mdl.ScoreTransform = @function;
function
необходимо принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Это свойство определяет выход счета расчета для функций объекта, таких как predict
, margin
, и edge
. Использование 'logit'
для вычисления апостериорных вероятностей и использования 'none'
вычислить логит апостериорных вероятностей.
Типы данных: char
| function_handle
W
- Веса наблюденийЭто свойство доступно только для чтения.
Веса наблюдений, используемые для обучения модели, заданные как n-на-1 числовой вектор. n - количество наблюдений (NumObservations
).
Программа нормализует веса наблюдений, указанные в 'Weights'
аргумент имя-значение так, чтобы элементы W
в пределах конкретной суммы классов до предшествующей вероятности этого класса.
Типы данных: double
X
- ПредикторыЭто свойство доступно только для чтения.
Предикторы, используемые для обучения модели, заданные как числовая матрица или таблица.
Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single
| double
| table
Y
- Метки классовЭто свойство доступно только для чтения.
Метки классов, используемые для обучения модели, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. Y
имеет тот совпадающий тип данных, что и переменная отклика, используемая для обучения модели. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Каждая строка Y
представляет наблюдаемую классификацию соответствующей строки X
.
Типы данных: single
| double
| logical
| char
| cell
| categorical
CompactClassificationGAM
compact | Уменьшите размер модели машинного обучения |
ClassificationPartitionedGAM
crossval | Перекрестная валидация модели машинного обучения |
addInteractions | Добавьте условия взаимодействия в одномерную обобщенную аддитивную модель (GAM) |
resume | Возобновите обучение обобщенной аддитивной модели (GAM) |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
partialDependence | Вычисление частичной зависимости |
plotLocalEffects | Постройте график локальных эффектов терминов в обобщенной аддитивной модели (GAM) |
plotPartialDependence | Создайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE) |
shapley | Значения 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,:))
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 (которая содержит только линейные условия) для небольшого количества итераций. После обучения модели для больших итераций сравните потерю реституции.
Загрузите 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 использует одномерную функцию формы для каждого предиктора.
где y - переменная отклика, которая следует биномиальному распределению с вероятностью успеха (вероятность положительного класса), μ в n наблюдениях. g (μ) является функцией ссылки логита, а c - точка пересечения (константа) термин. fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).
Можно включать взаимодействия между предикторами в модель путем добавления двухмерных функций формы важных членов взаимодействия к модели.
где fij (xi xj) - двухмерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для термина взаимодействия для предикторов (дерева взаимодействия).
fitcgam
находит важные условия взаимодействия на основе p -values F -tests. Для получения дополнительной информации смотрите Обнаружение терминов взаимодействия.
[1] Лу, Инь, Рич Каруана и Йоханнес Герке. «Внятные модели для классификации и регрессии». Материалы 18-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных (KDD "12). Пекин, Китай: Пресса ACM, 2012, стр. 150-158.
[2] Лу, Инь, Рич Каруана, Йоханнес Герке и Джайлз Хукер. «Точные интеллектуальные модели с парными взаимодействиями». Материалы 19-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных (KDD "13) Чикаго, Иллинойс, США: ACM Press, 2013, стр. 623-631.
addInteractions
| ClassificationPartitionedGAM
| CompactClassificationGAM
| fitcgam
| resume
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.