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

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

Загрузите ovariancancer данные. Эти данные имеют 216 наблюдений и 4000 предикторов в 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 the parallel pool (number of workers: 6).

ans = 

 ProcessPool 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 90.892114 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 16.517331 seconds.

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

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

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

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

Для просмотра документации необходимо авторизоваться на сайте