Обобщенная аддитивная модель (GAM) для регрессии
A RegressionGAM
объект является объектом обобщенной аддитивной модели (GAM) для регрессии. Это интерпретируемая модель, которая объясняет переменную отклика с помощью суммы одномерных и двухмерных функций формы.
Вы можете предсказать ответы для новых наблюдений, используя predict
function, и построить эффект каждой функции формы на предсказание (значение отклика) для наблюдения с помощью plotLocalEffects
функция. Полный список функций объекта для RegressionGAM
, см. Функции объекта.
Создайте RegressionGAM
объект при помощи fitrgam
. Можно задать как линейные условия, так и условия взаимодействия для предикторов, чтобы включить одномерные функции формы (деревья предикторов) и двухмерные функции формы (деревья взаимодействия) в обученную модель, соответственно.
Вы можете обновить обученную модель при помощи 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'
). Если fitrgam
функция завершает обучение перед добавлением заданного количества деревьев, это свойство содержит причину завершения.
Типы данных: struct
CategoricalPredictors
- Категориальные индексы предиктора[]
Это свойство доступно только для чтения.
Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors
содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]
).
Типы данных: double
ExpandedPredictorNames
- Расширенные имена предикторовЭто свойство доступно только для чтения.
Расширенные имена предикторов, заданные как массив ячеек из векторов символов.
ExpandedPredictorNames
то же, что и PredictorNames
для обобщенной аддитивной модели.
Типы данных: cell
NumObservations
- Количество наблюденийЭто свойство доступно только для чтения.
Количество наблюдений в обучающих данных, хранимых в X
и Y
, заданный как числовой скаляр.
Типы данных: double
PredictorNames
- Имена переменных предиктораЭто свойство доступно только для чтения.
Имена переменных предиктора, заданные как массив ячеек из векторов символов. Порядок элементов PredictorNames
соответствует порядку, в котором имена предикторов появляются в обучающих данных.
Типы данных: cell
ResponseName
- Имя переменной откликаЭто свойство доступно только для чтения.
Имя переменной отклика, заданное как вектор символов.
Типы данных: char
ResponseTransform
- Функция преобразования отклика'none'
| указатель на функциюФункция преобразования отклика, заданная как 'none'
или указатель на функцию. ResponseTransform
описывает, как программное обеспечение преобразует значения необработанного отклика.
Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию. Для примера можно ввести Mdl.ResponseTransform = @function
, где function
принимает числовой вектор исходных откликов и возвращает числовой вектор того же размера, содержащий преобразованные отклики.
Типы данных: char
| function_handle
RowsUsed
- Строки, используемые в подборе кривой[]
| логический векторЭто свойство доступно только для чтения.
Строки исходных обучающих данных, используемых при подборе кривой RegressionGAM
модель, заданная как логический вектор. Это свойство пустое, если используются все строки.
Типы данных: logical
W
- Веса наблюденийЭто свойство доступно только для чтения.
Веса наблюдений, используемые для обучения модели, заданные как n-на-1 числовой вектор. n - количество наблюдений (NumObservations
).
Программа нормализует веса наблюдений, указанные в 'Weights'
аргумент имя-значение так, чтобы элементы W
сумма до 1.
Типы данных: double
X
- ПредикторыЭто свойство доступно только для чтения.
Предикторы, используемые для обучения модели, заданные как числовая матрица или таблица.
Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single
| double
| table
Y
- ОтветЭто свойство доступно только для чтения.
Ответ, заданный как числовой вектор.
Каждая строка Y
представляет наблюдаемую реакцию соответствующей строки X
.
Типы данных: single
| double
CompactRegressionGAM
compact | Уменьшите размер модели машинного обучения |
RegressionPartitionedGAM
crossval | Перекрестная валидация модели машинного обучения |
addInteractions | Добавьте условия взаимодействия в одномерную обобщенную аддитивную модель (GAM) |
resume | Возобновите обучение обобщенной аддитивной модели (GAM) |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
partialDependence | Вычисление частичной зависимости |
plotLocalEffects | Постройте график локальных эффектов терминов в обобщенной аддитивной модели (GAM) |
plotPartialDependence | Создайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE) |
shapley | Значения Shapley |
resubPredict | Прогнозируйте ответы для обучающих данных, используя обученную регрессионую модель |
resubLoss | Регрессионная потеря реституции |
Обучите одномерную GAM, которая содержит линейные условия для предикторов. Затем интерпретируйте предсказание для заданного образца данных с помощью plotLocalEffects
функция.
Загрузите набор данных NYCHousing2015
.
load NYCHousing2015
Набор данных включает 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует эти переменные для анализа продажных цен (SALEPRICE
).
Предварительно обработайте набор данных. Удалите выбросы, преобразуйте datetime
массив (SALEDATE
) на номера месяцев и переместите переменную отклика (SALEPRICE
) до последнего столбца.
idx = isoutlier(NYCHousing2015.SALEPRICE); NYCHousing2015(idx,:) = []; NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE); NYCHousing2015 = movevars(NYCHousing2015,'SALEPRICE','After','SALEDATE');
Отобразите первые три строки таблицы.
head(NYCHousing2015,3)
ans=3×10 table
BOROUGH NEIGHBORHOOD BUILDINGCLASSCATEGORY RESIDENTIALUNITS COMMERCIALUNITS LANDSQUAREFEET GROSSSQUAREFEET YEARBUILT SALEDATE SALEPRICE
_______ ____________ ____________________________ ________________ _______________ ______________ _______________ _________ ________ _________
2 {'BATHGATE'} {'01 ONE FAMILY DWELLINGS'} 1 0 4750 2619 1899 8 0
2 {'BATHGATE'} {'01 ONE FAMILY DWELLINGS'} 1 0 4750 2619 1899 8 0
2 {'BATHGATE'} {'01 ONE FAMILY DWELLINGS'} 1 1 1287 2528 1899 12 0
Обучите одномерный GAM по продажным ценам. Задайте переменные для BOROUGH
, NEIGHBORHOOD
, BUILDINGCLASSCATEGORY
, и SALEDATE
как категориальные предикторы.
Mdl = fitrgam(NYCHousing2015,'SALEPRICE','CategoricalPredictors',[1 2 3 9])
Mdl = RegressionGAM PredictorNames: {1x9 cell} ResponseName: 'SALEPRICE' CategoricalPredictors: [1 2 3 9] ResponseTransform: 'none' Intercept: 3.7518e+05 NumObservations: 83517 Properties, Methods
Mdl
является RegressionGAM
объект модели. Отображение модели показывает частичный список свойств модели. Чтобы просмотреть полный список свойств, дважды кликните имя переменной Mdl
в Рабочей области. Откроется редактор Переменных для Mdl
. Также можно отобразить свойства в Командном окне с помощью записи через точку. Для примера отобразите предполагаемый точкой пересечения (постоянный) срок Mdl
.
Mdl.Intercept
ans = 3.7518e+05
Спрогнозируйте цену продажи для первого наблюдения обучающих данных и постройте график локальных эффектов терминов в Mdl
на предсказании.
yFit = predict(Mdl,NYCHousing2015(1,:))
yFit = 4.4421e+05
plotLocalEffects(Mdl,NYCHousing2015(1,:))
The predict
функция предсказывает цену продажи для первого наблюдения следующим 4.4421e5
. The plotLocalEffects
функция создает горизонтальный столбчатый график, которая показывает локальные эффекты членов в Mdl
на предсказании. Каждое значение локального эффекта показывает вклад каждого термина в прогнозируемую цену продажи.
Обучите обобщенную аддитивную модель, которая содержит линейные условия и условия взаимодействия для предикторов тремя различными способами:
Определите условия взаимодействия, используя formula
входной параметр.
Задайте 'Interactions'
аргумент имя-значение.
Сначала создайте модель с линейными терминами и добавьте условия взаимодействия к модели с помощью addInteractions
функция.
Загрузите carbig
набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.
load carbig
Создайте таблицу, которая содержит переменные предиктора (Acceleration
, Displacement
, Horsepower
, и Weight
) и переменной отклика (MPG
).
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
Задайте formula
Обучите GAM, который содержит четыре линейных условия (Acceleration
, Displacement
, Horsepower
, и Weight
) и двумя терминами взаимодействия (Acceleration*Displacement
и Displacement*Horsepower
). Определите условия используя формулу в форме 'Y ~ terms'
.
Mdl1 = fitrgam(tbl,'MPG ~ Acceleration + Displacement + Horsepower + Weight + Acceleration:Displacement + Displacement:Horsepower');
Функция добавляет условия взаимодействия к модели в порядке важности. Можно использовать Interactions
свойство для проверки членов в модели взаимодействия и порядка, в котором fitrgam
добавляет их в модель. Отобразите Interactions
свойство.
Mdl1.Interactions
ans = 2×2
2 3
1 2
Каждая строка Interactions
представляет один термин взаимодействия и содержит индексы столбцов переменных предиктора для термина взаимодействия.
Задайте 'Interactions'
Передайте обучающие данные (tbl
) и имя переменной отклика в tbl
на fitrgam
, так что функция включает линейные условия для всех других переменных в качестве предикторов. Задайте 'Interactions'
аргумент имя-значение с помощью логической матрицы для включения двух членов взаимодействия, x1*x2
и x2*x3
.
Mdl2 = fitrgam(tbl,'MPG','Interactions',logical([1 1 0 0; 0 1 1 0])); Mdl2.Interactions
ans = 2×2
2 3
1 2
Можно также задать 'Interactions'
как количество членов взаимодействия или как 'all'
включить все доступные условия взаимодействия. Среди заданных условий взаимодействия fitrgam
определяет те, чьи значения p не больше, чем 'MaxPValue'
и добавляет их в модель. Значение по умолчанию 'MaxPValue'
равен 1, так что функция добавляет все заданные условия взаимодействия в модель.
Задайте 'Interactions','all'
и установите 'MaxPValue'
аргумент имя-значение 0,05.
Mdl3 = fitrgam(tbl,'MPG','Interactions','all','MaxPValue',0.05);
Warning: Model does not include interaction terms because all interaction terms have p-values greater than the 'MaxPValue' value, or the software was unable to improve the model fit.
Mdl3.Interactions
ans = 0x2 empty double matrix
Mdl3
не включает условия взаимодействия, что подразумевает одно из следующего: все условия взаимодействия имеют значения p больше 0,05, или добавление условий взаимодействия не улучшает подгонку модели.
Использование addInteractions
Функция
Обучите одномерную GAM, которая содержит линейные условия для предикторов, и затем добавьте условия взаимодействия к обученной модели с помощью addInteractions
функция. Задайте второй входной параметр addInteractions
точно так же вы задаете 'Interactions'
аргумент имя-значение fitrgam
. Список членов взаимодействия можно задать с помощью логической матрицы, количества членов взаимодействия или 'all'
.
Укажите количество членов взаимодействия как 3, чтобы добавить три наиболее важных условия взаимодействия к обученной модели.
Mdl4 = fitrgam(tbl,'MPG');
UpdatedMdl4 = addInteractions(Mdl4,3);
UpdatedMdl4.Interactions
ans = 3×2
2 3
1 2
3 4
Mdl4
является одномерной GAM, и UpdatedMdl4
- обновленный GAM, содержащий все термины в Mdl4
и три дополнительных условия взаимодействия.
Обучите регрессионную GAM, которая содержит как линейные, так и условия взаимодействия. Задайте, чтобы обучить условия взаимодействия для небольшого количества итераций. После настройки условий взаимодействия для большего количества итераций сравните потерю реституции.
Загрузите carbig
набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.
load carbig
Задайте Acceleration
, Displacement
, Horsepower
, и Weight
как переменные предиктора (X
) и MPG
как переменная отклика (Y
).
X = [Acceleration,Displacement,Horsepower,Weight]; Y = MPG;
Обучите GAM, которая включает все доступные линейные условия и условия взаимодействия в X
. Задайте количество деревьев на срок взаимодействия как 2. fitrgam
итерация алгоритма бустинга 300 раз (по умолчанию) для линейных членов и итерация алгоритма заданное количество итераций для членов взаимодействия. Для каждой усиливающей итерации функция добавляет одно дерево на линейный член или одно дерево на член взаимодействия. Задайте 'Verbose'
как 1 для отображения диагностических сообщений на каждые 10 итераций.
Mdl = fitrgam(X,Y,'Interactions','all','NumTreesPerInteraction',2,'Verbose',1);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 1D| 0| 2.4432e+05| - | - | | 1D| 1| 9507.4| Inf| 1| | 1D| 10| 4470.6| 0.00025206| 1| | 1D| 20| 3895.3| 0.00011448| 1| | 1D| 30| 3617.7| 3.5365e-05| 1| | 1D| 40| 3402.5| 3.7992e-05| 1| | 1D| 50| 3257.1| 2.4983e-05| 1| | 1D| 60| 3131.8| 2.3873e-05| 1| | 1D| 70| 3019.8| 2.2967e-05| 1| | 1D| 80| 2925.9| 2.8071e-05| 1| | 1D| 90| 2845.3| 1.6811e-05| 1| | 1D| 100| 2772.7| 1.852e-05| 1| | 1D| 110| 2707.8| 1.6754e-05| 1| | 1D| 120| 2649.8| 1.651e-05| 1| | 1D| 130| 2596.6| 1.1723e-05| 1| | 1D| 140| 2547.4| 1.813e-05| 1| | 1D| 150| 2501.1| 1.8659e-05| 1| | 1D| 160| 2455.7| 1.386e-05| 1| | 1D| 170| 2416.9| 1.0615e-05| 1| | 1D| 180| 2377.2| 8.534e-06| 1| | 1D| 190| 2339| 7.6771e-06| 1| | 1D| 200| 2303.3| 9.5866e-06| 1| | 1D| 210| 2270.7| 8.4276e-06| 1| | 1D| 220| 2240.1| 8.5778e-06| 1| | 1D| 230| 2209.2| 9.6761e-06| 1| | 1D| 240| 2178.7| 7.0622e-06| 1| | 1D| 250| 2150.3| 8.3082e-06| 1| | 1D| 260| 2122.3| 7.9542e-06| 1| | 1D| 270| 2097.7| 7.6328e-06| 1| | 1D| 280| 2070.4| 9.4322e-06| 1| | 1D| 290| 2044.3| 7.5722e-06| 1| | 1D| 300| 2019.7| 6.6719e-06| 1| |========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 2D| 0| 2019.7| - | - | | 2D| 1| 1795.5| 0.0005975| 1| | 2D| 2| 1523.4| 0.0010079| 1|
Чтобы проверить, fitrgam
ли обучает указанное количество деревьев, отображает
ReasonForTermination
свойство обученной модели и просмотр отображаемых сообщений.
Mdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Terminated after training the requested number of trees.'
InteractionTrees: 'Terminated after training the requested number of trees.'
Вычислите потери регрессии для обучающих данных.
resubLoss(Mdl)
ans = 3.8277
Возобновите обучение модели для других 100 итераций. Потому что Mdl
содержит как линейные, так и условия взаимодействия, resume
функция возобновляет обучение для терминов взаимодействия и добавляет для них больше деревьев (деревьев взаимодействия).
UpdatedMdl = resume(Mdl,100);
|========================================================| | Type | NumTrees | Deviance | RelTol | LearnRate | |========================================================| | 2D| 0| 1523.4| - | - | | 2D| 1| 1363.9| 0.00039695| 1| | 2D| 10| 594.04| 8.0295e-05| 1| | 2D| 20| 359.44| 4.3201e-05| 1| | 2D| 30| 238.51| 2.6869e-05| 1| | 2D| 40| 153.98| 2.6271e-05| 1| | 2D| 50| 91.464| 8.0936e-06| 1| | 2D| 60| 61.882| 3.8528e-06| 1| | 2D| 70| 43.206| 5.9888e-06| 1|
UpdatedMdl.ReasonForTermination
ans = struct with fields:
PredictorTrees: 'Terminated after training the requested number of trees.'
InteractionTrees: 'Unable to improve the model fit.'
resume
завершает обучение при добавлении большего количества деревьев не улучшает отклонение подгонки модели.
Вычислите потери регрессии с помощью обновленной модели.
resubLoss(UpdatedMdl)
ans = 0.0944
Регрессионные потери уменьшаются после resume
обновляет модель с большим количеством итераций.
Обобщенная аддитивная модель (GAM) является интерпретируемой моделью, которая объясняет переменную отклика с использованием суммы одномерных и двухмерных функций формы предикторов.
fitrgam
использует усиленное дерево в качестве функции формы для каждого предиктора и, опционально, для каждой пары предикторов; поэтому функция может захватывать нелинейное отношение между предиктором и переменной отклика. Поскольку вклады отдельных функций формы в предсказание (значение отклика) хорошо разделены, модель легко интерпретировать.
Стандартная GAM использует одномерную функцию формы для каждого предиктора.
где y - переменная отклика, которая следует нормальному распределению со средним μ и стандартным σ отклонения. g (μ) является тождествами ссылки функцией, а c - точка пересечения (постоянным) термином. fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).
Можно включать взаимодействия между предикторами в модель путем добавления двухмерных функций формы важных членов взаимодействия к модели.
где fij (xi xj) - двухмерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для термина взаимодействия для предикторов (дерева взаимодействия).
fitrgam
находит важные условия взаимодействия на основе 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
| CompactRegressionGAM
| fitrgam
| RegressionPartitionedGAM
| resume
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.