Ловите арканом регуляризацию

Этот пример показывает, как 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');

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

Пунктирные вертикальные строки представляют значение Lambda с минимальной среднеквадратической ошибкой (справа) и значение Lambda с минимальной среднеквадратической ошибкой плюс одно стандартное отклонение. Это последнее значение является рекомендуемой установкой для Lambda. Эти строки появляются только, когда вы выполняете перекрестную проверку. Крест подтверждает путем установки аргумента пары "имя-значение" 'CV'. Этот пример использует 10-кратную перекрестную проверку.

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

Для маленьких значений Lambda (к праву в графике), содействующие значения близко к оценке наименьших квадратов.

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

Для просмотра документации необходимо авторизоваться на сайте