В этом примере показано, как предсказать пробег (MPG) автомобиля на основе его веса, водоизмещения, лошадиных сил и ускорения, используя методы лассо и упругой сетки.
Загрузить carbig набор данных.
load carbigИзвлеките непрерывные (некатегорические) предикторы (лассо не обрабатывает категориальные предикторы).
X = [Acceleration Displacement Horsepower Weight];
Выполните подгонку лассо с 10-кратной перекрестной проверкой.
[b,fitinfo] = lasso(X,MPG,'CV',10);Постройте график результата.
lassoPlot(b,fitinfo,'PlotType','Lambda','XScale','log');

Рассчитайте корреляцию предикторов. Сначала устраните NaNs.
nonan = ~any(isnan([X MPG]),2); Xnonan = X(nonan,:); MPGnonan = MPG(nonan,:); corr(Xnonan)
ans = 4×4
1.0000 -0.5438 -0.6892 -0.4168
-0.5438 1.0000 0.8973 0.9330
-0.6892 0.8973 1.0000 0.8645
-0.4168 0.9330 0.8645 1.0000
Поскольку некоторые предикторы сильно коррелированы, выполните упругую подгонку сетки. Использовать Alpha = 0.5.
[ba,fitinfoa] = lasso(X,MPG,'CV',10,'Alpha',.5);
Постройте график результата. Назовите каждый предиктор, чтобы вы могли определить, какая кривая.
pnames = {'Acceleration','Displacement','Horsepower','Weight'};
lassoPlot(ba,fitinfoa,'PlotType','Lambda','XScale','log',...
'PredictorNames',pnames);
Когда вы активируете курсор данных и нажимаете на график, вы видите имя предиктора, коэффициент, значение Lambdaи индекс этой точки, означающий столбец в b связано с этим вписыванием.
Здесь результаты упругой сетки и лассо не очень похожи. Кроме того, график упругой сетки отражает заметное качественное свойство техники упругой сетки. Эластичная сетка сохраняет три ненулевых коэффициента как Lambda увеличивается (слева от графика), и эти три коэффициента достигают 0 примерно при одном и том же значении Lambda значение. Напротив, график лассо показывает два из трех коэффициентов, становящихся 0 при одном и том же значении Lambda, в то время как другой коэффициент остается ненулевым для более высоких значений Lambda.
Это поведение является примером общей модели. В целом, эластичная сетка имеет тенденцию удерживать или уменьшать группы высоко коррелированных предикторов в качестве Lambda увеличивается. Напротив, лассо имеет тенденцию уменьшать меньшие группы или даже отдельные предикторы.
fitrlinear | lasso | lassoglm | lassoPlot | ridge