В этом примере показано, как использовать lasso наряду с перекрестной проверкой для определения важных предикторов.
Загрузите данные образца и просмотрите описание.
load spectra
Description
Description =
11×72 char array
'== Spectral and octane data of gasoline == '
' '
'NIR spectra and octane numbers of 60 gasoline samples '
' '
'NIR: NIR spectra, measured in 2 nm intervals from 900 nm to 1700 nm '
'octane: octane numbers '
'spectra: a dataset array containing variables for NIR and octane '
' '
'Reference: '
'Kalivas, John H., "Two Data Sets of Near Infrared Spectra," Chemometrics'
'and Intelligent Laboratory Systems, v.37 (1997) pp.255-259 '
Лассо и эластичная сетка особенно хорошо подходят для широких данных, то есть данных с большим количеством предикторов, чем наблюдения с лассо и эластичной сеткой. В данных этого типа имеются избыточные предикторы. Вы можете использовать lasso наряду с перекрестной проверкой для определения важных предикторов.
Вычислить значение по умолчанию lasso подходит.
[b fitinfo] = lasso(NIR,octane);
Постройте график количества предикторов в аппроксимированной регуляризации лассо как функции Lambda , используя логарифмическую ось x.
lassoPlot(b,fitinfo,'PlotType','Lambda','XScale','log');

Трудно сказать, какое значение Lambda является уместным. Чтобы определить хорошее значение, попробуйте выполнить подгонку с перекрестной проверкой.
tic
[b fitinfo] = lasso(NIR,octane,'CV',10);
toc
Elapsed time is 7.353767 seconds.
Постройте график результата.
lassoPlot(b,fitinfo,'PlotType','Lambda','XScale','log');

Отображение предлагаемого значения Lambda .
fitinfo.Lambda1SE
ans =
0.0302
Отображение Lambda с минимальным MSE.
fitinfo.LambdaMinMSE
ans =
0.0144
Проверить качество соответствия на предложенное значение Lambda .
lambdaindex = fitinfo.Index1SE; mse = fitinfo.MSE(lambdaindex) df = fitinfo.DF(lambdaindex)
mse =
0.0528
df =
11
Подгонка использует только 11 из 401 предикторов и достигает небольшого перекрестно проверенного MSE.
Изучить график перекрестно проверенных MSE.
lassoPlot(b,fitinfo,'PlotType','CV'); % Use a log scale for MSE to see small MSE values better set(gca,'YScale','log');

Как Lambda увеличивается (влево), MSE быстро увеличивается. Коэффициенты снижены слишком сильно, и они не соответствуют адекватным ответам. Как Lambda уменьшается, модели больше (имеют больше ненулевых коэффициентов). Увеличение MSE предполагает, что модели переоборудованы.
Набор по умолчанию Lambda значения не включают значения, достаточно малые для включения всех предикторов. В этом случае нет причины смотреть на меньшие значения. Однако если требуется иметь меньшие значения, чем по умолчанию, используйте LambdaRatio параметр или укажите последовательность Lambda значения с использованием Lambda параметр. Для получения более подробной информации см. lasso справочная страница.
Перекрестная проверка может быть медленной. Если у вас есть лицензия Parallel Computing Toolbox, ускорьте вычисление перекрестной оценки лассо с помощью параллельных вычислений. Запустите параллельный пул.
mypool = parpool()
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.
mypool =
Pool with properties:
Connected: true
NumWorkers: 6
Cluster: local
AttachedFiles: {}
AutoAddClientPath: true
IdleTimeout: 30 minutes (30 minutes remaining)
SpmdEnabled: true
Задайте опцию параллельных вычислений и вычислите оценку лассо.
opts = statset('UseParallel',true); tic; [b fitinfo] = lasso(NIR,octane,'CV',10,'Options',opts); toc
Elapsed time is 3.799009 seconds.
Параллельные вычисления с использованием двух работников ускоряют решение этой проблемы.
Остановить параллельный пул.
delete(mypool)
Parallel pool using the 'local' profile is shutting down.
fitrlinear | lasso | lassoglm | lassoPlot | ridge