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

В этом примере показано, как упорядочить модель со значительно большим количеством предикторов, чем наблюдения. Широкие данные являются данными с большим количеством предикторов, чем наблюдения. Как правило, с широкими данными вы хотите идентифицировать важные предикторы. Используйте 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, похожие на первый расчет.