Упорядочите широкие данные параллельно

Этот пример показывает, как упорядочить модель со значительно большим количеством предикторов, чем наблюдения. Широкие данные являются данными с большим количеством предикторов, чем наблюдения. Как правило, с широкими данными вы хотите идентифицировать важные предикторы. Используйте lassoglm в качестве исследовательского или экранирующего инструмента, чтобы выбрать меньший набор переменных, чтобы приоритизировать ваше моделирование и исследование. Используйте параллельные вычисления, чтобы ускорить перекрестную проверку.

Загрузите данные ovariancancer. Эти данные имеют 216 наблюдений и 4 000 предикторов в переменной рабочей области obs. Ответы являются двоичным файлом, или 'Cancer' или 'Normal', в переменной рабочей области grp. Преобразуйте ответы на двоичный файл для использования в lassoglm.

load ovariancancer
y = strcmp(grp,'Cancer');

Установите опции использовать параллельные вычисления. Подготовьтесь вычислять в параллели с помощью parpool.

opt = statset('UseParallel',true);
parpool()
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.

ans = 

 Pool with properties: 

            Connected: true
           NumWorkers: 6
              Cluster: local
        AttachedFiles: {}
    AutoAddClientPath: true
          IdleTimeout: 30 minutes (30 minutes remaining)
          SpmdEnabled: true

Соответствуйте перекрестному подтвержденному набору упорядоченных моделей. Используйте параметр Alpha, чтобы способствовать сдерживающим группам очень коррелированых предикторов, в противоположность устранению всех кроме одного члена группы. Обычно вы используете относительно большое значение Alpha.

rng('default') % For reproducibility
tic
[B,S] = lassoglm(obs,y,'binomial','NumLambda',100, ...
  'Alpha',0.9,'LambdaRatio',1e-4,'CV',10,'Options',opt);
toc
Elapsed time is 82.390258 seconds.

Исследуйте график перекрестной проверки.

lassoPlot(B,S,'PlotType','CV');     
legend('show') % Show legend

Исследуйте график трассировки.

lassoPlot(B,S,'PlotType','Lambda','XScale','log')

Правильная (зеленая) вертикальная пунктирная линия представляет Lambda, обеспечивающий самое маленькое перекрестное подтвержденное отклонение. Левая (синяя) пунктирная линия имеет минимальное отклонение плюс не больше, чем одно стандартное отклонение. Эта синяя строка имеет много меньше предикторов:

[S.DF(S.Index1SE) S.DF(S.IndexMinDeviance)]
ans = 1×2

    50    89

Вы попросили, чтобы lassoglm соответствовал использованию 100 различных значений Lambda. Сколько это использовало?

size(B)
ans = 1×2

        4000          84

lassoglm остановился после 84 значений, потому что отклонение было слишком маленьким для маленьких значений Lambda. Чтобы постараться не сверхсоответствовать, lassoglm останавливается, когда отклонение подобранной модели является слишком маленьким по сравнению с отклонением в бинарных ответах, игнорируя переменные прогноза.

Можно обеспечить lassoglm, чтобы включать больше условий при помощи аргумента пары "имя-значение" 'Lambda'. Например, задайте набор значений Lambda, который дополнительно включает три значения, меньшие, чем значения в S.Lambda.

minLambda = min(S.Lambda);
explicitLambda = [minLambda*[.1 .01 .001] S.Lambda];

Задайте 'Lambda',explicitLambda, когда вы вызовете функцию lassoglm. lassoglm останавливается, когда отклонение подобранной модели является слишком маленьким, даже при том, что вы явным образом обеспечиваете набор значений Lambda.

Чтобы сэкономить время, можно использовать:

  • Меньше Lambda, означая меньше подгонок

  • Меньше сгибов перекрестной проверки

  • Большее значение для LambdaRatio

Используйте последовательное вычисление и все три из этих экономящих время методов:

tic
[Bquick,Squick] = lassoglm(obs,y,'binomial','NumLambda',25,...
    'LambdaRatio',1e-2,'CV',5);
toc
Elapsed time is 14.668383 seconds.

Графически сравните новые результаты с первыми результатами.

lassoPlot(Bquick,Squick,'PlotType','CV');     
legend('show') % Show legend

lassoPlot(Bquick,Squick,'PlotType','Lambda','XScale','log')

Количество ненулевых коэффициентов в самом низком плюс одна модель стандартного отклонения - приблизительно 50, подобные первому вычислению.