Ловите арканом и эластичная сеть с перекрестной проверкой

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

Смотрите также

| | | |

Похожие темы