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