exponenta event banner

Широкие данные через Lasso и параллельные вычисления

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

См. также

| | | |

Связанные темы