lassoblm

Байесова модель линейной регрессии с регуляризацией лассо

Описание

Байесов объект модели линейной регрессии lassoblm задает объединенное предшествующее распределение коэффициентов регрессии и отклонения воздействия (β, σ 2) для реализации Bayesian lasso regression [1]. Для j = 1, …, NumPredictors, условным предшествующим распределением βj |σ2 является Лаплас (удвойте экспоненциал), распределение со средним значением 0 и масштабирует σ 2/λ, где λ является регуляризацией лассо, или уменьшением, параметром. Предшествующее распределение σ 2 является обратной гаммой с формой A и шкала B.

Вероятность данных t=1Tϕ(yt;xtβ,σ2), где ϕ (yt; xtβ, σ 2) является Гауссовой плотностью вероятности, оцененной в yt со средним xtβ и отклонением σ 2. Получившееся апостериорное распределение не аналитически послушно. Для получения дополнительной информации на апостериорном распределении, смотрите Аналитически Послушное Последующее поколение.

В целом, когда вы создаете Байесов объект модели линейной регрессии, он задает объединенное предшествующее распределение и характеристики модели линейной регрессии только. Таким образом, объект модели является шаблоном, предназначенным для дальнейшего использования. А именно, чтобы включить данные в модель для анализа апостериорного распределения и выбора функции, передайте объект модели и данные к соответствующей объектной функции.

Создание

Синтаксис

PriorMdl = lassoblm(NumPredictors)
PriorMdl = lassoblm(NumPredictors,Name,Value)

Описание

пример

PriorMdl = lassoblm(NumPredictors) создает Байесов объект модели линейной регрессии (PriorMdl), состоявший из предикторов NumPredictors и прерывания, и устанавливает свойство NumPredictors. Объединенное предшествующее распределение (β, σ 2) подходит для реализации Байесовой регрессии лассо [1]. PriorMdl является шаблоном, который задает предшествующие дистрибутивы и specifyies значения параметра регуляризации лассо λ и размерность β.

пример

PriorMdl = lassoblm(NumPredictors,Name,Value) свойства наборов (кроме NumPredictors) использование аргументов пары "имя-значение". Заключите каждое имя свойства в кавычки. Например, lassoblm(3,'Lambda',0.5) задает уменьшение 0.5 для этих трех коэффициентов (не прерывание).

Свойства

развернуть все

Можно установить перезаписываемые значения свойств, когда вы создаете объект модели при помощи синтаксиса аргумента пары "имя-значение", или после того, как вы создаете объект модели при помощи записи через точку. Например, чтобы установить уменьшение для всех коэффициентов, кроме прерывания, к 0.5, входят

PriorMdl.Lambda = 0.5;

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

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

При определении NumPredictors исключите любой термин прерывания для значения.

После создания модели, если вы изменяете значения NumPredictors с помощью записи через точку, затем эти параметры возвращаются к значениям по умолчанию:

  • Имена переменных (VarNames)

  • Параметр уменьшения (Lambda)

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

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

ЗначениеОписание
falseИсключите прерывание из модели регрессии. Поэтому β является p - размерный вектор, где p является значением NumPredictors.
trueВключайте прерывание в модель регрессии. Поэтому β (p + 1) - размерный вектор. Эта спецификация заставляет T-by-1 вектор из единиц предварительно ожидаться к данным о предикторе во время оценки и симуляции.

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

Пример: 'Intercept',false

Типы данных: логический

Переменная прогноза называет для отображений, заданных как вектор строки или вектор ячейки векторов символов. VarNames должен содержать элементы NumPredictors. VarNames(j) является именем переменной в столбце j набора данных предиктора, который вы задаете во время оценки, симуляции или прогнозирования.

Значением по умолчанию является {'Beta(1)','Beta(2),...,Beta(p)}, где p является значением NumPredictors.

Пример: 'VarNames',["UnemploymentRate"; "CPI"]

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

Ловите арканом параметр регуляризации для всех коэффициентов регрессии, заданных в виде положительного числа или (Intercept + NumPredictors)-by-1 положительный числовой вектор. Большие значения Lambda заставляют соответствующие коэффициенты уменьшаться ближе, чтобы обнулить.

Предположим, что X является T-by-NumPredictors матрица данных о предикторе, которые вы задаете во время оценки, симуляции или прогнозирования.

  • Если Lambda является вектором, и Intercept является true, Lambda(1) является уменьшением для прерывания, Lambda(2) является уменьшением для коэффициента первого предиктора X(:,1), Lambda(3) является уменьшением для коэффициента второго предиктора X(:,2), …, и Lambda(NumPredictors + 1) является уменьшением для коэффициента последнего предиктора X(:,NumPredictors).

  • Если Lambda является вектором, и Intercept является false, Lambda(1) является уменьшением для коэффициента первого предиктора X(:,1), …, и Lambda(NumPredictors) является уменьшением для коэффициента последнего предиктора X(:,NumPredictors).

  • Если вы предоставляете скалярный s для Lambda, то все коэффициенты предикторов в X имеют уменьшение s.

    • Если Intercept является true, прерывание имеет уменьшение 0.01, и lassoblm хранит [0.01; s*ones(NumPredictors,1)] в Lambda.

    • В противном случае lassoblm хранит s*ones(NumPredictors,1) в Lambda.

Пример: 'Lambda',6

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

Сформируйте гиперпараметр обратной гаммы, предшествующей на σ 2, заданный в виде числа.

A должен быть, по крайней мере, –(Intercept + NumPredictors)/2.

С B, сохраненным зафиксированным, обратное гамма распределение становится более высоким и более сконцентрированным, когда A увеличивается. Эта характеристика взвешивает предшествующую модель σ 2 в большей степени, чем вероятность во время следующей оценки.

Для функциональной формы обратного гамма распределения смотрите Аналитически Послушное Последующее поколение.

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

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

Масштабный коэффициент обратной гаммы, предшествующей на σ 2, заданный как положительная скалярная величина или Inf.

С A, сохраненным зафиксированным, обратное гамма распределение становится более высоким и более сконцентрированным, когда B увеличивается. Эта характеристика взвешивает предшествующую модель σ 2 в большей степени, чем вероятность во время следующей оценки.

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

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

Функции объекта

estimateВыполните выбор переменной прогноза для Байесовых моделей линейной регрессии
simulateМоделируйте коэффициенты регрессии и отклонение воздействия Байесовой модели линейной регрессии
forecastПредскажите ответы Байесовой модели линейной регрессии
plotВизуализируйте предшествующую и следующую плотность Байесовых параметров модели линейной регрессии
summarizeСтатистика сводных данных распределения Байесовой модели линейной регрессии для выбора переменной прогноза

Примеры

свернуть все

Считайте несколько моделью линейной регрессии, которая предсказывает США действительный валовой национальный продукт (GNPR) с помощью линейной комбинации индекса промышленного производства (IPI), общая занятость (E) и действительная заработная плата (WR).

GNPRt=β0+β1IPIt+β2Et+β3WRt+εt.

\forall t, εt серия независимых Гауссовых воздействий со средним значением 0 и отклонение σ2.

Примите эти предшествующие дистрибутивы:

  • Для j = 0..., 3, βj|σ2 имеет распределение Лапласа со средним значением 0 и шкалой σ2/λ, где λ параметр уменьшения. Коэффициенты условно независимы.

  • σ2IG(A,B). A и B форма и шкала, соответственно, обратного гамма распределения.

Создайте предшествующую модель для Байесовой линейной регрессии. Задайте количество предикторов p.

p = 3;
Mdl = lassoblm(p);

PriorMdl является lassoblm Байесов объект модели линейной регрессии, представляющий предшествующее распределение отклонения воздействия и коэффициентов регрессии. В командном окне lassoblm отображает сводные данные предшествующих дистрибутивов.

Также можно создать предшествующую модель для Байесовой регрессии лассо путем передачи количества предикторов к bayeslm и установки аргумента пары "имя-значение" ModelType 'lasso'.

MdlBayesLM = bayeslm(p,'ModelType','lasso')
MdlBayesLM = 
  lassoblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           Lambda: [4x1 double]
                A: 3
                B: 1

 
           |  Mean     Std           CI95         Positive   Distribution  
---------------------------------------------------------------------------
 Intercept |  0       100    [-200.000, 200.000]    0.500   Scale mixture  
 Beta(1)   |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 Beta(2)   |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 Beta(3)   |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 Sigma2    | 0.5000  0.5000    [ 0.138,  1.616]     1.000   IG(3.00,    1) 
 

Mdl и MdlBayesLM являются эквивалентными объектами модели.

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

Mdl.VarNames = ["IPI" "E" "WR"]
Mdl = 
  lassoblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           Lambda: [4x1 double]
                A: 3
                B: 1

 
           |  Mean     Std           CI95         Positive   Distribution  
---------------------------------------------------------------------------
 Intercept |  0       100    [-200.000, 200.000]    0.500   Scale mixture  
 IPI       |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 E         |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 WR        |  0       1        [-2.000,  2.000]     0.500   Scale mixture  
 Sigma2    | 0.5000  0.5000    [ 0.138,  1.616]     1.000   IG(3.00,    1) 
 

MATLAB® сопоставляет имена переменных к коэффициентам регрессии в отображениях.

Полагайте, что модель линейной регрессии в Создает Предшествующую Модель для Байесовой Регрессии Лассо.

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

p = 3;
PriorMdl = bayeslm(p,'ModelType','lasso','VarNames',["IPI" "E" "WR"]);
shrinkage = PriorMdl.Lambda
shrinkage = 4×1

    0.0100
    1.0000
    1.0000
    1.0000

PriorMdl хранит значения уменьшения для всех предикторов в его свойстве Lambda. shrinkage(1) является уменьшением для прерывания, и элементы shrinkage(2:end) соответствуют коэффициентам предикторов в Mdl.VarNames. Уменьшением по умолчанию для прерывания является 0.01, и значением по умолчанию является 1 для всех других коэффициентов.

Загрузите набор данных Нельсона-Плоссера. Создайте переменные для ряда предиктора и ответа. Поскольку лассо чувствительно к переменным шкалам, стандартизируйте все переменные.

load Data_NelsonPlosser
X = DataTable{:,PriorMdl.VarNames(2:end)};
y = DataTable{:,'GNPR'};

X = (X - nanmean(X))./nanstd(X);
y = (y - nanmean(y))/nanstd(y);

Несмотря на то, что этот пример стандартизирует переменные, можно задать различные значения уменьшения для каждого коэффициента путем установки свойства Lambda PriorMdl к числовому вектору значений уменьшения.

Реализуйте Байесовую регрессию лассо путем оценки крайних апостериорных распределений β и σ2. Поскольку Байесова регрессия лассо использует Цепь Маркова Монте-Карло (MCMC) для оценки, установите seed случайных чисел воспроизводить результаты.

rng(1);
PosteriorMdl = estimate(PriorMdl,X,y);
Method: lasso MCMC sampling with 10000 draws
Number of observations: 62
Number of predictors:   4
 
           |   Mean     Std         CI95        Positive  Distribution 
-----------------------------------------------------------------------
 Intercept | -0.4490  0.0527  [-0.548, -0.344]    0.000     Empirical  
 IPI       |  0.6679  0.1063  [ 0.456,  0.878]    1.000     Empirical  
 E         |  0.1114  0.1223  [-0.110,  0.365]    0.827     Empirical  
 WR        |  0.2215  0.1367  [-0.024,  0.494]    0.956     Empirical  
 Sigma2    |  0.0343  0.0062  [ 0.024,  0.048]    1.000     Empirical  
 

PosteriorMdl является объектом модели empiricalblm, который хранилища чертит от апостериорных распределений β и σ2 учитывая данные. estimate отображает сводные данные крайних апостериорных распределений в командной строке. Строки сводных данных соответствуют коэффициентам регрессии и отклонению воздействия, и столбцы соответствуют характеристикам апостериорного распределения. Характеристики включают:

  • CI95, который содержит 95%-е Байесовы equitailed вероятные интервалы для параметров. Например, апостериорная вероятность, что коэффициент регрессии (стандартизированного) E находится в [-0.110, 0.365], 0.95.

  • Positive, который содержит апостериорную вероятность, что параметр больше, чем 0. Например, вероятность, что прерывание больше, чем 0, 0.

По умолчанию estimate чертит и отбрасывает выборку выжигания дефектов размера 5000. Однако хорошая практика должна осмотреть график трассировки ничьих для соответствующего смешивания и отсутствия быстротечности. Постройте график трассировки ничьих для каждого параметра. Можно получить доступ к ничьим, которые составляют распределение (свойства BetaDraws и Sigma2Draws) использующий запись через точку.

figure;
for j = 1:(p + 1)
    subplot(2,2,j);
    plot(PosteriorMdl.BetaDraws(j,:));
    title(sprintf('%s',PosteriorMdl.VarNames{j}));
end

figure;
plot(PosteriorMdl.Sigma2Draws);
title('Sigma2');

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

Постройте апостериорные распределения отклонения воздействия и коэффициентов.

figure;
plot(PosteriorMdl)

E и WR не могут быть важными предикторами, потому что 0 в области высокой плотности в их апостериорных распределениях.

Полагайте, что модель линейной регрессии в Создает Предшествующую Модель для Байесовой Регрессии Лассо, и ее реализация в Выполняют Выбор переменной Используя Уменьшение Лассо По умолчанию.

Когда вы реализуете регрессию лассо, установившаяся практика должна стандартизировать переменные. Однако, если вы хотите сохранить интерпретацию коэффициентов, но переменные имеют различные шкалы, затем можно выполнить дифференциальное уменьшение путем определения различного уменьшения для каждого коэффициента.

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

p = 3;
PriorMdl = bayeslm(p,'ModelType','lasso','VarNames',["IPI" "E" "WR"]);

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

load Data_NelsonPlosser
X = DataTable{:,PriorMdl.VarNames(2:end)};
y = DataTable{:,'GNPR'};

figure;
plot(dates,y)
title('GNPR')

for j = 1:3
    figure;
    plot(dates,X(:,j));
    title(PriorMdl.VarNames(j + 1));
end

Переменные GNPR, IPI и WR, кажется, имеют экспоненциальный тренд.

Удалите экспоненциальный тренд из переменных GNPR, IPI и WR.

y = log(y);
X(:,[1 3]) = log(X(:,[1 3]));

Все переменные прогноза имеют различные шкалы (для получения дополнительной информации, введите Description в командной строке). Отобразите среднее значение каждого предиктора. Поскольку переменные содержат ведущие отсутствующие значения, используйте nanmean.

predmeans = nanmean(X)
predmeans = 1×3
104 ×

    0.0002    4.7700    0.0004

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

Используя запись через точку, припишите очень низкое уменьшение прерыванию, уменьшение 0,1 к первым и третьим предикторам и уменьшению 1 000 к второму предиктору.

PriorMdl.Lambda = [1e-5 0.1 1e4 0.1];

Реализуйте Байесовую регрессию лассо путем оценки крайних апостериорных распределений β и σ2. Поскольку Байесова регрессия лассо использует MCMC для оценки, установите seed случайных чисел воспроизводить результаты.

rng(1);
PosteriorMdl = estimate(PriorMdl,X,y);
Method: lasso MCMC sampling with 10000 draws
Number of observations: 62
Number of predictors:   4
 
           |  Mean     Std         CI95        Positive  Distribution 
----------------------------------------------------------------------
 Intercept | 2.0281  0.6839  [ 0.679,  3.323]    0.999     Empirical  
 IPI       | 0.3534  0.2497  [-0.139,  0.839]    0.923     Empirical  
 E         | 0.0000  0.0000  [-0.000,  0.000]    0.762     Empirical  
 WR        | 0.5250  0.3482  [-0.126,  1.209]    0.937     Empirical  
 Sigma2    | 0.0315  0.0055  [ 0.023,  0.044]    1.000     Empirical  
 

Полагайте, что модель линейной регрессии в Создает Предшествующую Модель для Байесовой Регрессии Лассо.

Выполните Байесовую регрессию лассо:

  1. Создайте Байесово лассо предшествующая модель для отклонения воздействия и коэффициентов регрессии. Используйте уменьшение по умолчанию.

  2. Протяните последние 10 периодов данных из оценки.

  3. Оцените крайние апостериорные распределения.

p = 3;
PriorMdl = bayeslm(p,'ModelType','lasso','VarNames',["IPI" "E" "WR"]);

load Data_NelsonPlosser
fhs = 10; % Forecast horizon size
X = DataTable{1:(end - fhs),PriorMdl.VarNames(2:end)};
y = DataTable{1:(end - fhs),'GNPR'};
XF = DataTable{(end - fhs + 1):end,PriorMdl.VarNames(2:end)}; % Future predictor data
yFT = DataTable{(end - fhs + 1):end,'GNPR'};                  % True future responses

rng(1); % For reproducibility
PosteriorMdl = estimate(PriorMdl,X,y,'Display',false);

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

yF = forecast(PosteriorMdl,XF);

figure;
plot(dates,DataTable.GNPR);
hold on
plot(dates((end - fhs + 1):end),yF)
h = gca;
hp = patch([dates(end - fhs + 1) dates(end) dates(end) dates(end - fhs + 1)],...
    h.YLim([1,1,2,2]),[0.8 0.8 0.8]);
uistack(hp,'bottom');
legend('Forecast Horizon','True GNPR','Forecasted GNPR','Location','NW')
title('Real Gross National Product: 1909 - 1970');
ylabel('rGNP');
xlabel('Year');
hold off

yF является вектором 10 на 1 будущих значений действительного GNP, соответствующего будущим данным о предикторе.

Оцените среднеквадратическую ошибку (RMSE) прогноза.

frmse = sqrt(mean((yF - yFT).^2))
frmse = 25.4831

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

Когда вы выполняете Байесовую регрессию лассо, лучшая практика состоит в том, чтобы искать соответствующие значения уменьшения. Один способ сделать так состоит в том, чтобы оценить прогноз RMSE по сетке значений уменьшения и выбрать уменьшение, которое минимизирует прогноз RMSE.

Больше о

развернуть все

Советы

  • Lambda является настраивающимся параметром. Поэтому выполните Байесовую регрессию лассо с помощью сетки значений уменьшения и выберите модель что лучшие балансы подходящий критерий и сложность модели.

  • Для оценки, симуляции и прогнозирования, MATLAB® не стандартизирует данные о предикторе. Если переменные в данных о предикторе имеют различные шкалы, то задают параметр уменьшения для каждого предиктора путем предоставления числового вектора для Lambda.

Альтернативная функциональность

Функция bayeslm может создать любой поддерживаемый предшествующий объект модели для Байесовой линейной регрессии.

Ссылки

[1] Припаркуйтесь, T. и Г. Казелла. "Байесово Лассо". Журнал американской Статистической Ассоциации. Издание 103, № 482, 2008, стр 681–686.

Введенный в R2018b