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

пример

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 из набора данных предиктора, который вы задаете во время оценки, симуляции или прогнозирования.

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

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

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

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

Предположим X T- 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 - mean(X,'omitnan'))./std(X,'omitnan');
y = (y - mean(y,'omitnan'))/std(y,'omitnan');

Несмотря на то, что этот пример стандартизирует переменные, можно задать различные значения уменьшения для каждого коэффициента путем установки 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 в командной строке). Отобразите среднее значение каждого предиктора. Удалите наблюдения, содержащие ведущий отсутствующие значения от всех предикторов.

predmeans = mean(X,'omitnan')
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
Для просмотра документации необходимо авторизоваться на сайте