Этот пример показывает, как 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 заставляет все коэффициенты, кроме одного, быть 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) имеет только два ненулевых компонента, и поэтому может предоставить лучшие прогнозные оценки новых данных.
fitrlinear | lasso | lassoglm | lassoPlot | ridge