Обобщенная аддитивная модель (GAM) для регрессии
A RegressionGAM объект является обобщенным объектом аддитивной модели (GAM) для регрессии. Это интерпретируемая модель, которая объясняет переменную ответа, используя сумму одномерных и двумерных функций формы.
Можно прогнозировать ответы для новых наблюдений с помощью predict и постройте график влияния каждой функции формы на прогноз (значение отклика) для наблюдения с помощью plotLocalEffects функция. Полный список функций объекта для RegressionGAM, см. Функции объекта.
Создать RegressionGAM объект с помощью fitrgam. Можно указать как линейные термины, так и условия взаимодействия для предикторов, чтобы включить одномерные функции формы (деревья предикторов) и двумерные функции формы (деревья взаимодействий) в обучаемую модель соответственно.
Можно обновить обучаемую модель с помощью 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'). Если fitrgam функция прекращает обучение перед добавлением указанного количества деревьев, это свойство содержит причину завершения.
Типы данных: struct
CategoricalPredictors - Индексы категориального предиктора[]Это свойство доступно только для чтения.
Индексы категориального предиктора, указанные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).
Типы данных: double
ExpandedPredictorNames - Расширенные имена предикторовЭто свойство доступно только для чтения.
Расширенные имена предикторов, заданные как массив ячеек символьных векторов.
ExpandedPredictorNames является таким же, как PredictorNames для обобщенной аддитивной модели.
Типы данных: cell
NumObservations - Количество наблюденийЭто свойство доступно только для чтения.
Количество наблюдений в данных обучения, хранящихся в X и Y, указывается как числовой скаляр.
Типы данных: double
PredictorNames - Имена переменных предиктораЭто свойство доступно только для чтения.
Имена переменных предиктора, заданные как массив ячеек векторов символов. Порядок элементов PredictorNames соответствует порядку, в котором имена предикторов появляются в данных обучения.
Типы данных: cell
ResponseName - Имя переменной ответаЭто свойство доступно только для чтения.
Имя ответной переменной, указанное как символьный вектор.
Типы данных: char
ResponseTransform - Функция преобразования ответа'none' | дескриптор функцииФункция преобразования ответа, указанная как 'none' или дескриптор функции. ResponseTransform описывает, как программное обеспечение преобразует необработанные значения ответа.
Для определяемой функции MATLAB ® или функции введите ее дескриптор. Например, можно ввестиMdl.ResponseTransform = @function, где function принимает числовой вектор исходных ответов и возвращает числовой вектор того же размера, содержащий преобразованные ответы.
Типы данных: char | function_handle
RowsUsed - Строки, используемые в фитинге[] | логический векторЭто свойство доступно только для чтения.
Строки исходных учебных данных, используемых при подборе RegressionGAM модель, заданная как логический вектор. Это свойство пусто, если используются все строки.
Типы данных: logical
W - Наблюдательные весаЭто свойство доступно только для чтения.
Веса наблюдений, используемые для обучения модели, заданные как n-by-1 числовой вектор. n - количество наблюдений (NumObservations).
Программное обеспечение нормализует веса наблюдения, указанные в 'Weights' аргумент имя-значение, чтобы элементы W сумма до 1.
Типы данных: double
X - ПредикторыЭто свойство доступно только для чтения.
Предикторы, используемые для обучения модели, указанные как числовая матрица или таблица.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Типы данных: single | double | table
Y - ОтветЭто свойство доступно только для чтения.
Ответ, заданный как числовой вектор.
Каждая строка Y представляет наблюдаемый отклик соответствующей строки X.
Типы данных: single | double
CompactRegressionGAMcompact | Уменьшение размера модели машинного обучения |
RegressionPartitionedGAMcrossval | Модель машинного обучения с перекрестной проверкой |
addInteractions | Добавление терминов взаимодействия в одномерную обобщенную аддитивную модель (GAM) |
resume | Возобновление обучения обобщенной аддитивной модели (GAM) |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
partialDependence | Вычислить частичную зависимость |
plotLocalEffects | Построить график локальных эффектов терминов в обобщенной аддитивной модели (GAM) |
plotPartialDependence | Создание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE) |
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,:))

predict функция предсказывает продажную цену для первого наблюдения как 4.4421e5. 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.Interactionsans = 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 использует одномерную функцию формы для каждого предиктора.
f2 (x2) +⋯+fp (xp),
где y - переменная отклика, которая следует за нормальным распределением со средним λ и стандартным отклонением g (λ) - функция идентификационной линии связи, а c - член перехвата (константа). fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).
Можно включить взаимодействия между предикторами в модель, добавив в модель двумерные функции формы важных терминов взаимодействия.
+∑i,j∈{1,2,⋯,p}fij (xixj),
где fij (xixj) - двумерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для члена взаимодействия для предикторов (дерева взаимодействия).
fitrgam находит важные условия взаимодействия на основе p-значений F-тестов. Дополнительные сведения см. в разделе Определение терминов взаимодействия.
[1] Лу, Инь, Рич Каруана и Йоханнес Герке. «Внятные модели для классификации и регрессии». Материалы 18-й Международной конференции АСМ СИГКДД по вопросам обнаружения знаний и интеллектуального анализа данных (KDD "12). Пекин, Китай: ACM Press, 2012, стр. 150-158.
[2] Лу, Инь, Рич Каруана, Йоханнес Герке и Джайлс Хукер. «Точные внятные модели с парными взаимодействиями». Материалы 19-й Международной конференции ACM SIGKDD по открытию знаний и анализу данных (KDD "13), Чикаго, Иллинойс, США: ACM Press, 2013, стр. 623-631.
addInteractions | CompactRegressionGAM | fitrgam | RegressionPartitionedGAM | resume
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.