Широкие Данные через Лассо и Параллельные вычисления

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

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

| | | |

Похожие темы