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