Регуляризация Лассо

Этот пример показывает, как lasso определяет и отбрасывает ненужные предикторы.

Сгенерируйте 200 выборок пятимерных искусственных данных X из экспоненциальных распределений различными средствами.

rng(3,'twister') % For reproducibility
X = zeros(200,5);
for ii = 1:5
    X(:,ii) = exprnd(ii,200,1);
end

Сгенерируйте данные отклика Y = X * r + eps , где r имеет всего два ненулевых компонента и eps шума норма со стандартным отклонением 0,1.

r = [0;2;0;-3;0];
Y = X*r + randn(200,1)*.1;

Подбор перекрестно проверенной последовательности моделей с lasso , и постройте график результата.

[b,fitinfo] = lasso(X,Y,'CV',10);
lassoPlot(b,fitinfo,'PlotType','Lambda','XScale','log');

Figure contains 2 axes. Axes 1 with title Trace Plot of Coefficients Fit by Lasso is empty. Axes 2 with title Trace Plot of Coefficients Fit by Lasso contains 7 objects of type line. These objects represent LambdaMinMSE, Lambda1SE, B1, B2, B3, B4, B5.

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

Штриховые вертикальные линии представляют Lambda значение с минимальной средней квадратичной невязкой (справа) и Lambda значение с минимальной средней квадратичной невязкой плюс одно стандартное отклонение. Это последнее значение является рекомендуемой настройкой для Lambda . Эти линии появляются только при выполнении перекрестной валидации. Перекрестная проверка путем установки 'CV' аргумент пары "имя-значение". В этом примере используется 10-кратная перекрестная валидация.

Верхняя часть графика показывает степени свободы (df), означающие количество ненулевых коэффициентов в регрессии, как функцию Лямбды. Слева, большое значение Lambda заставляет все коэффициенты, кроме одного, быть 0. Справа все пять коэффициентов ненулевые, хотя график показывает только два четко. Другие три коэффициента настолько малы, что вы не можете визуально отличить их от 0.

Для небольших значений Лямбды (справа на графике) значения коэффициентов близки к оценке методом наименьших квадратов.

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

lam = fitinfo.Index1SE;
fitinfo.MSE(lam)
ans = 0.1398
b(:,lam)
ans = 5×1

         0
    1.8855
         0
   -2.9367
         0

lasso хорошо справился с поиском вектора коэффициентов r .

Для сравнения найдите оценку методом наименьших квадратов r .

rhat = X\Y
rhat = 5×1

   -0.0038
    1.9952
    0.0014
   -2.9993
    0.0031

Оценка b(:,lam) имеет немного большую среднюю квадратичную невязку, чем средняя квадратичная невязка rhat .

res = X*rhat - Y;     % Calculate residuals
MSEmin = res'*res/200 % b(:,lam) value is 0.1398
MSEmin = 0.0088

Но b(:,lam) имеет только два ненулевых компонента, и поэтому может предоставить лучшие прогнозные оценки новых данных.

См. также

| | | |

Похожие темы