Этот пример показывает, как предсказать пробег (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);
Когда вы активируете Data Cursor и и кликаете по графику, вы видите имя предиктора, коэффициента, значения Lambda
и индекса той точки, имея в виду столбец в b
, сопоставленном с той подгонкой.
Здесь, эластичная сеть и результаты лассо не очень похожи. Кроме того, эластичный сетевой график отражает известное качественное свойство эластичного сетевого метода. Эластичная сеть сохраняет три ненулевых коэффициента, когда Lambda
увеличивается (к левым графика), и эти три коэффициента достигают 0 приблизительно в том же значении Lambda
. Напротив, график лассо показывает два из этих трех коэффициентов, становящихся 0 в том же значении Lambda
, в то время как другой коэффициент остается ненулевым для более высоких значений Lambda
.
Это поведение иллюстрирует общий шаблон. В целом эластичная сеть имеет тенденцию сохранять или пропускать группы очень коррелированых предикторов, когда Lambda
увеличивается. Напротив, лассо имеет тенденцию пропускать меньшие группы или даже отдельные предикторы.