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

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

Смотрите также

| | | |

Похожие темы