lassoglm

Ловите арканом или эластичная сетевая регуляризация для обобщенных линейных моделей

Синтаксис

B = lassoglm(X,y)
B = lassoglm(X,y,distr)
B = lassoglm(X,y,distr,Name,Value)
[B,FitInfo] = lassoglm(___)

Описание

пример

B = lassoglm(X,y) возвращается оштрафованный, наибольшее правдоподобие соответствовало коэффициентам для обобщенных линейных моделей данных о предикторе X и ответ y, где значения в y приняты, чтобы иметь нормальное распределение вероятностей. Каждый столбец B соответствует конкретному коэффициенту регуляризации в Lambda. По умолчанию lassoglm выполняет регуляризацию лассо с помощью геометрической последовательности значений Lambda.

B = lassoglm(X,y,distr) выполняет регуляризацию лассо, чтобы соответствовать моделям с помощью распределения вероятностей distr для y.

B = lassoglm(X,y,distr,Name,Value) подгонки упорядочили обобщенные линейные регрессии с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, 'Alpha',0.5 ставит эластичную сеть как метод регуляризации с параметром Alpha, равный 0,5.

пример

[B,FitInfo] = lassoglm(___) также возвращает структуру FitInfo, который содержит информацию о припадке моделей, с помощью любого из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Создайте набор данных с избыточными предикторами и идентифицируйте те предикторы при помощи lassoglm.

Создайте случайный матричный X с 100 наблюдениями и 10 предикторами. Создайте нормально распределенный ответ y с помощью только четырех из предикторов и небольшого количества шума.

rng default
X = randn(100,10);
weights = [0.6;0.5;0.7;0.4];
y = X(:,[2 4 5 7])*weights + randn(100,1)*0.1; % Small added noise

Выполните регуляризацию лассо.

B = lassoglm(X,y);

Найдите вектор коэффициентов для 75-го значения Lambda в B.

B(:,75)
ans = 10×1

         0
    0.5431
         0
    0.3944
    0.6173
         0
    0.3473
         0
         0
         0

lassoglm идентифицирует и удаляет избыточные предикторы.

Создайте данные из модели Poisson и идентифицируйте важные предикторы при помощи lassoglm.

Создайте данные с 20 предикторами. Создайте переменную отклика Пуассона с помощью только трех из предикторов плюс константа.

rng default % For reproducibility
X = randn(100,20);
weights = [.4;.2;.3];
mu = exp(X(:,[5 10 15])*weights + 1);
y = poissrnd(mu);

Создайте перекрестную подтвержденную регуляризацию лассо модели регрессии Пуассона данных.

[B,FitInfo] = lassoglm(X,y,'poisson','CV',10);

Исследуйте график перекрестной проверки видеть эффект параметра регуляризации Lambda.

lassoPlot(B,FitInfo,'plottype','CV'); 
legend('show') % Show legend

Зеленая круговая и пунктирная линия определяет местоположение Lambda с минимальной ошибкой перекрестной проверки. Синяя круговая и пунктирная линия определяет местоположение точки с минимальной ошибкой перекрестной проверки плюс одно стандартное отклонение.

Найдите ненулевые коэффициенты модели, соответствующие двум идентифицированным точкам.

idxLambdaMinDeviance = FitInfo.IndexMinDeviance;
mincoefs = find(B(:,idxLambdaMinDeviance))
mincoefs = 7×1

     3
     5
     6
    10
    11
    15
    16

idxLambda1SE = FitInfo.Index1SE;
min1coefs = find(B(:,idxLambda1SE))
min1coefs = 3×1

     5
    10
    15

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

Предскажите, получили ли студенты B или выше на их последнем экзамене при помощи lassoglm.

Загрузите набор данных examgrades. Преобразуйте последние классы экзамена в логический вектор, где 1 представляет класс 80 или выше и 0 представляет класс ниже 80.

load examgrades
X = grades(:,1:4);
y = grades(:,5);
yBinom = (y>=80);

Разделите данные в наборы обучающих данных и наборы тестов.

rng default    % Set the seed for reproducibility
c = cvpartition(yBinom,'HoldOut',0.3);
idxTrain = training(c,1);
idxTest = ~idxTrain;
XTrain = X(idxTrain,:);
yTrain = yBinom(idxTrain);
XTest = X(idxTest,:);
yTest = yBinom(idxTest);

Выполните регуляризацию лассо для обобщенной линейной образцовой регрессии с 3-кратной перекрестной проверкой на данных тренировки. Примите, что значения в y биномиальным образом распределяются. Выберите коэффициенты модели, соответствующие Lambda с минимальным ожидаемым отклонением.

[B,FitInfo] = lassoglm(XTrain,yTrain,'binomial','CV',3);
idxLambdaMinDeviance = FitInfo.IndexMinDeviance;
B0 = FitInfo.Intercept(idxLambdaMinDeviance);
coef = [B0; B(:,idxLambdaMinDeviance)]
coef = 5×1

  -21.1911
    0.0235
    0.0670
    0.0693
    0.0949

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

yhat = glmval(coef,XTest,'logit');
yhatBinom = (yhat>=0.5);

Определите точность прогнозов с помощью матрицы беспорядка.

c = confusionchart(yTest,yhatBinom);

Функция правильно предсказывает 31 класс экзамена. Однако функция неправильно предсказывает, что 1 студент получает B или выше и студенты 4 получают оценку ниже B.

Входные параметры

свернуть все

Данные о предикторе, заданные как числовая матрица. Каждая строка представляет одно наблюдение, и каждый столбец представляет одну переменную прогноза.

Типы данных: single | double

Данные об ответе, заданные как числовой вектор, логический вектор, категориальный массив или 2D столбец числовая матрица.

  • Когда distr не является 'binomial', y является числовым векторным или категориальным массивом длины n, где n является количеством строк в X. Ответ y(i) соответствует строке i в X.

  • Когда distr является 'binomial', y является одним из следующего:

    • Числовой вектор длины n, где каждая запись представляет успех (1) или отказ (0)

    • Логический вектор длины n, где каждая запись представляет успешность или неуспешность

    • Категориальный массив длины n, где каждая запись представляет успешность или неуспешность

    • 2D столбец числовая матрица, где первый столбец содержит количество успехов для каждого наблюдения и второго столбца, содержит общее количество испытаний

Типы данных: single | double | logical | categorical

Распределение данных об ответе, заданных как одно из следующего:

  • 'normal'

  • 'binomial'

  • 'poisson'

  • 'gamma'

  • 'inverse gaussian'

lassoglm использует соответствие функции ссылки по умолчанию distr. Задайте другую функцию ссылки использование аргумента пары "имя-значение" Link.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: lassoglm(X,y,'poisson','Alpha',0.5) выполняет эластичную сетевую регуляризацию, принимающую, что значениями ответа является распределенный Пуассон. Аргумент пары "имя-значение" 'Alpha',0.5 устанавливает параметр, используемый в эластичной сетевой оптимизации.

Вес лассо (L 1) по сравнению с гребнем (L 2) оптимизация, заданная как пара, разделенная запятой, состоящая из 'Alpha' и значения положительной скалярной величины в интервале (0,1]. Значение   Alpha = 1 представляет регрессию лассо, Alpha близко к 0, приближается к гребенчатой регрессии, и другие значения представляют эластичную сетевую оптимизацию. Смотрите Эластичную Сеть.

Пример: 'Alpha',0.75

Типы данных: single | double

Спецификация перекрестной проверки для оценки отклонения, заданного как пара, разделенная запятой, состоящая из 'CV' и одно из следующего:

  • 'resubstitution'lassoglm использует X и y, чтобы соответствовать модели и оценить отклонение без перекрестной проверки.

  • Положительное скалярное целое число Klassoglm использует K - перекрестная проверка сгиба.

  • Объект cvpartition cvplassoglm использует метод перекрестной проверки, выраженный в cvp. Вы не можете использовать раздел 'leaveout' с lassoglm.

Пример: 'CV',10

Максимальное количество ненулевых коэффициентов в модели, заданной как пара, разделенная запятой, состоящая из 'DFmax' и положительного целочисленного скаляра. lassoglm возвращает результаты только для значений Lambda, которые удовлетворяют этот критерий.

Пример: 'DFmax',25

Типы данных: single | double

Коэффициенты регуляризации, заданные как пара, разделенная запятой, состоящая из 'Lambda' и вектор неотрицательных значений. Смотрите Лассо.

  • Если вы не предоставляете Lambda, то lassoglm оценивает самое большое значение Lambda, который дает непустую модель. В этом случае LambdaRatio дает отношение самого маленького к самому большому значению последовательности, и NumLambda дает длину вектора.

  • Если вы предоставляете Lambda, то lassoglm игнорирует LambdaRatio и NumLambda.

  • Если Standardize является true, то Lambda является множеством значений, используемым, чтобы соответствовать моделям данными X, стандартизированными, чтобы иметь нулевое среднее значение и отклонение одного.

Значением по умолчанию является геометрическая последовательность значений NumLambda только с самым большим значением, которое в состоянии произвести B = 0.

Типы данных: single | double

Отношение самого маленького к самым большим значениям Lambda, когда вы не предоставляете Lambda, заданный как пара, разделенная запятой, состоящая из 'LambdaRatio' и положительной скалярной величины.

Если вы устанавливаете LambdaRatio = 0, то lassoglm генерирует последовательность по умолчанию значений Lambda и заменяет самое маленькое на 0.

Пример: 'LambdaRatio',1e–2

Типы данных: single | double

Отображение между средним µ ответа и линейным предиктором Xb, заданный как пара, разделенная запятой, состоящая из 'Link' и одно из значений в этой таблице.

ЗначениеОписание
'comploglog'

журнал (-журнал ((1 – µ))) = Xb

'identity', значение по умолчанию для распределения 'normal'

µ = Xb

'log', значение по умолчанию для распределения 'poisson'

регистрируйте (µ) = Xb

'logit', значение по умолчанию для распределения 'binomial'

журнал (µ / (1 – µ)) = Xb

'loglog'

журнал (-журнал (µ)) = Xb

'probit'

Φ–1 (µ) = Xb, где Φ является нормальной (Гауссовой) кумулятивной функцией распределения

'reciprocal', значение по умолчанию для распределения 'gamma'

µ –1 = Xb

p (номер), значение по умолчанию для распределения 'inverse gaussian'p = –2)

µ p = Xb

Массив ячеек формы   {FL FD FI}, содержа три указателя на функцию, созданные с помощью @, которые задают ссылку (FL), производная ссылки (FD) и обратная ссылка (FI). Или, структура указателей на функцию с полем Link, содержащим FL, поле Derivative, содержащее FD и поле Inverse, содержащее FI.

Заданная пользователями функция ссылки (см. Функцию Настраиваемой ссылки),

Пример: 'Link','probit'

Типы данных: char | string | single | double | cell

Максимальное количество итераций, позволенных, заданных как пара, разделенная запятой, состоящая из 'MaxIter' и положительного целочисленного скаляра.

Если алгоритм выполняет итерации MaxIter прежде, чем достигнуть допуска сходимости RelTol, то функция прекращает выполнять итерации и возвращает предупреждающее сообщение.

Функция может возвратить больше чем одно предупреждение, когда NumLambda больше, чем 1.

Пример: 'MaxIter',1e3

Типы данных: single | double

Количество повторений Монте-Карло для перекрестной проверки, заданной как пара, разделенная запятой, состоящая из 'MCReps' и положительного целочисленного скаляра.

  • Если CV является 'resubstitution' или cvpartition типа 'resubstitution', то MCReps должен быть 1.

  • Если CV является cvpartition типа 'holdout', то MCReps должен быть больше, чем 1.

Пример: 'MCReps',2

Типы данных: single | double

Количество значений Lambda, которые использует lassoglm, когда вы не предоставляете Lambda, заданный как пара, разделенная запятой, состоящая из 'NumLambda' и положительного целочисленного скаляра. lassoglm может возвратить меньше, чем подгонки NumLambda, если отклонение подгонок опускается ниже пороговой части пустого отклонения (отклонение подгонки без каких-либо предикторов X).

Пример: 'NumLambda',150

Типы данных: single | double

Дополнительная переменная прогноза, заданная как пара, разделенная запятой, состоящая из 'Offset' и числового вектора с одинаковым числом строк как X. Функция lassoglm сохраняет содействующее значение Offset зафиксированным в 1.0.

Типы данных: single | double

Опция, чтобы перекрестный подтвердить параллельно и задать случайные потоки, заданные как пара, разделенная запятой, состоящая из 'Options' и структуры. Эта опция требует Parallel Computing Toolbox™.

Создайте структуру Options с statset. Поля опции:

  • 'UseParallel' Установите на true, чтобы вычислить параллельно. Значением по умолчанию является false.

  • UseSubstreams — Установите на true, чтобы вычислить параллельно восстанавливаемым способом. Для воспроизводимости, набор Streams к типу, позволяющему подпотоки: 'mlfg6331_64' или 'mrg32k3a'. Значением по умолчанию является false.

  • Объектный массив Streams — A RandStream или массив ячеек, состоящий из одного такого объекта. Если вы не задаете Streams, то lassoglm использует поток по умолчанию.

Пример: 'Options',statset('UseParallel',true)

Типы данных: struct

Имена переменных прогноза, в порядке, в котором они появляются в X, заданном как пара, разделенная запятой, состоящая из 'PredictorNames' и массива строк или массива ячеек из символьных векторов.

Пример: 'PredictorNames',{'Height','Weight','Age'}

Типы данных: string | cell

Порог сходимости для координатного алгоритма спуска [3], заданный как пара, разделенная запятой, состоящая из 'RelTol' и положительной скалярной величины. Алгоритм останавливается, когда последовательные оценки вектора коэффициентов отличаются по L 2 нормы относительной суммой меньше, чем RelTol.

Пример: 'RelTol',2e–3

Типы данных: single | double

Отметьте для стандартизации данных о предикторе X прежде, чем соответствовать моделям, заданным как пара, разделенная запятой, состоящая из 'Standardize' и или true или false. Если Standardize является true, то данные X масштабируются, чтобы иметь нулевое среднее значение и отклонение одного. Standardize влияет, применяется ли регуляризация к коэффициентам в стандартизированной шкале или исходной шкале. Результаты всегда представляются в исходной шкале данных.

Пример: 'Standardize',false

Типы данных: логический

Веса наблюдения, заданные как пара, разделенная запятой, состоящая из 'Weights' и неотрицательного вектора. Weights имеет длину n, где n является количеством строк X. По крайней мере два значения должны быть положительными.

Типы данных: single | double

Выходные аргументы

свернуть все

Подходящие коэффициенты, возвращенные как числовая матрица. B является p-by-L матрица, где p является количеством предикторов (столбцы) в X, и L является количеством значений Lambda. Можно задать количество значений Lambda с помощью аргумента пары "имя-значение" NumLambda.

Коэффициент, соответствующий термину прерывания, является полем в FitInfo.

Типы данных: single | double

Подходящая информация обобщенных линейных моделей, возвращенных как структура с полями, описанными в этой таблице.

Поле в FitInfoОписание
InterceptТермин прерывания β 0 для каждой линейной модели, 1-by-L вектор
LambdaПараметры lambda в порядке возрастания, 1-by-L вектор
AlphaЗначение параметра Alpha, скаляра
DFКоличество ненулевых коэффициентов в B для каждого значения Lambda, 1-by-L вектор
Deviance

Отклонение подобранной модели для каждого значения Lambda, 1-by-L вектор

Если модель перекрестный подтверждена, то значения для Deviance представляют предполагаемое ожидаемое отклонение модели, применился к новым данным, как вычислено перекрестной проверкой. В противном случае Deviance является отклонением подобранной модели, применился к данным, используемым, чтобы выполнить подгонку.

PredictorNamesЗначение параметра PredictorNames, сохраненного как массив ячеек из символьных векторов

Если вы устанавливаете аргумент пары "имя-значение" CV перекрестный подтверждать, структура FitInfo содержит эти дополнительные поля.

Поле в FitInfoОписание
SEСтандартная погрешность Deviance для каждого Lambda, как вычислено во время перекрестной проверки, 1-by-L вектор
LambdaMinDevianceЗначение Lambda с минимальным ожидаемым отклонением, как вычислено перекрестной проверкой, скаляром
Lambda1SEСамый большой Lambda оценивает таким образом, что Deviance в одной стандартной погрешности минимума, скаляра
IndexMinDevianceИндекс Lambda со значением LambdaMinDeviance, скаляр
Index1SEИндекс Lambda со значением Lambda1SE, скаляр

Больше о

свернуть все

Функция ссылки

Функция ссылки f (μ) сопоставляет распределение со средним μ к линейной модели с данными X и вектор коэффициентов b с помощью формулы

f (μ) = X b.

Можно найти формулы для функций ссылки в описании аргумента пары "имя-значение" Link. Эта таблица приводит функции ссылки, которые обычно используются для каждого распределения.

Семейство распределенийФункция ссылки по умолчаниюДругие типичные функции ссылки
'normal''identity' 
'binomial''logit''comploglog', 'loglog', 'probit'
'poisson''log' 
'gamma''reciprocal' 
'inverse gaussian'–2 

Лассо

Для неотрицательного значения λ lassoglm решает проблему

minβ0,β(1NОтклонение(β0,β)+λj=1p|βj|).

  • Функциональное Отклонение в этом уравнении является отклонением образцовой подгонки к ответам с помощью прерывания β 0 и коэффициенты предиктора β. Формула для Отклонения зависит от параметра distr, который вы предоставляете к lassoglm. При минимизации λ - оштрафованное отклонение эквивалентно максимизации λ - оштрафовал loglikelihood.

  • N является количеством наблюдений.

  • λ является неотрицательным параметром регуляризации, соответствующим одному значению Lambda.

  • Параметры β 0 и β являются скаляром и вектором длины p, соответственно.

Когда λ увеличивается, количество ненулевых компонентов уменьшений β.

Проблема лассо включает L 1 норма β, как контрастируется с эластичным сетевым алгоритмом.

Эластичная сеть

Для α строго между 0 и 1, и неотрицательный λ, эластичная сеть решает проблему

minβ0,β(1NОтклонение(β0,β)+λPα(β)),

где

Pα(β)=(1α)2β22+αβ1=j=1p((1α)2βj2+α|βj|).

Эластичная сеть совпадает с лассо когда α = 1. Для других значений α термин штрафа (β) интерполирует между L 1 норму β и L в квадрате 2 нормы β. Когда α уменьшается к 0, эластичные сетевые подходы регрессия ridge.

Ссылки

[1] Tibshirani, R. “Уменьшение регрессии и Выбор через Лассо”. Журнал Королевского Статистического Общества. Серии B, Издание 58, № 1, 1996, стр 267–288.

[2] Цзоу, H. и Т. Хэсти. “Регуляризация и Выбор переменной через Эластичную Сеть”. Журнал Королевского Статистического Общества. Серии B, Издание 67, № 2, 2005, стр 301–320.

[3] Фридман, J., Р. Тибширэни и Т. Хэсти. “Пути к регуляризации для Обобщенных Линейных Моделей через Координатный Спуск”. Журнал Статистического программного обеспечения. Издание 33, № 1, 2010. https://www.jstatsoft.org/v33/i01

[4] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы Статистического Изучения. 2-й выпуск. Нью-Йорк: Спрингер, 2008.

[5] Добсон, A. J. Введение в Обобщенные Линейные Модели. 2-й выпуск. Нью-Йорк: Chapman & Hall/CRC Press, 2002.

[6] Маккуллаг, P. и Дж. А. Нелдер. Обобщенные Линейные Модели. 2-й выпуск. Нью-Йорк: Chapman & Hall/CRC Press, 1989.

[7] Collett, D. Моделирование Двоичных данных. 2-й выпуск. Нью-Йорк: Chapman & Hall/CRC Press, 2003.

Расширенные возможности

Представленный в R2012a