В этом примере показано, как использовать 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