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 определяет и удаляет избыточные предикторы.

Создайте данные из модели Пуассона и идентифицируйте важные предикторы с помощью 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

Figure contains an axes. The axes with title Cross-Validated Deviance of Lasso Fit contains 5 objects of type errorbar, line. These objects represent Deviance with Error Bars, LambdaMinDeviance, Lambda1SE.

Зеленый круг и пунктирная линия определяют местоположение 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

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

Спрогнозируйте, получили ли студенты степень 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);

Figure contains an object of type ConfusionMatrixChart.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

  • 'normal'

  • 'binomial'

  • 'poisson'

  • 'gamma'

  • 'inverse gaussian'

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Если вы не поставляете Lambda, затем lassoglm оценивает наибольшее значение Lambda что дает nonnull модель. В этом случае 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 (a number), по умолчанию для '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' и положительная скалярная величина. Алгоритм заканчивается, когда последовательные оценки вектора коэффициента различаются в L2 норма на относительную сумму меньше RelTol.

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

Поле в FitInfoОписание
InterceptТочка пересечения термин β 0 для каждой линейной модели a 1-by- L вектор
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, как вычислено во время перекрестной валидации, a 1-by- L вектор
LambdaMinDevianceLambda значение с минимальным ожидаемым отклонением, рассчитанным перекрестной валидацией, скаляром
Lambda1SEСамые большие Lambda значение, такое что Deviance находится в пределах одной стандартной ошибки минимума, скаляра
IndexMinDevianceИндекс Lambda со значением LambdaMinDeviance, скаляр
Index1SEИндекс Lambda со значением Lambda1SE, скаляр

Подробнее о

свернуть все

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

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

f (<reservedrangesplaceholder2>) = <reservedrangesplaceholder1> <reservedrangesplaceholder0>.

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

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

Лассо

Для неотрицательного значения λ, lassoglm решает задачу

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

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

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

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

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

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

Задача lasso включает в себя L1 норма β, противопоставленная алгоритму упругой сети.

Упругая сеть

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

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

где

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

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

Ссылки

[1] Tibshirani, R. «Regression Shrinkage and Selection through the Lasso». Журнал Королевского статистического общества. Серия B, том 58, № 1, 1996, стр. 267-288.

[2] Zou, H., and T. Hastie. «Регуляризация и выбор переменных через эластичную сеть». Журнал Королевского статистического общества. Серия B, том 67, № 2, 2005, стр. 301-320.

[3] Фридман, Дж., Р. Тибширани и Т. Хасти. «Регуляризация Путей для обобщенных линейных моделей через спуск координат». Журнал статистического программного обеспечения. Том 33, № 1, 2010. https://www.jstatsoft.org/v33/i01

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

[5] Добсон, А. Дж. Введение в обобщенные линейные модели. 2-е издание. Нью-Йорк: Chapman & Hall/CRC Press, 2002.

[6] McCullagh, P., and J. A. Nelder. Обобщенные линейные модели. 2-е издание. Нью-Йорк: Chapman & Hall/CRC Press, 1989.

[7] Collett, D. Modelling Binary Data. 2-е издание. Нью-Йорк: Chapman & Hall/CRC Press, 2003.

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

Введенный в R2012a