Лассо или эластичная регуляризация сетки для обобщенных линейных моделей
возвращает пенализованные коэффициенты с максимальным правдоподобием для обобщенных линейных моделей данных предиктора B = lassoglm(X,y)X и ответ y, где значения в y предполагается, что они имеют нормальное распределение вероятности. Каждый столбец B соответствует конкретному коэффициенту регуляризации в Lambda. По умолчанию lassoglm выполняет регуляризацию лассо с использованием геометрической последовательности Lambda значения.
соответствует регуляризованным обобщенным линейным регрессиям с дополнительными опциями, заданными одним или несколькими аргументами пары имя-значение. Например, B = lassoglm(X,y,distr,Name,Value)'Alpha',0.5 устанавливает эластичную сетку в качестве метода регуляризации с параметром Alpha равно 0,5.
Создайте набор данных с избыточными предикторами и определите эти предикторы с помощью 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

Зеленый круг и пунктирная линия расположены 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);
Выполните регуляризацию лассо для обобщенной регрессии линейной модели с трехкратной перекрестной проверкой данных обучения. Предположим значения в 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.
X - Данные предиктораДанные предиктора, заданные как числовая матрица. Каждая строка представляет одно наблюдение, а каждый столбец представляет одну предикторную переменную.
Типы данных: single | double
y - Данные ответаДанные ответа, указанные как числовой вектор, логический вектор, категориальный массив или числовая матрица из двух столбцов.
Когда distr не является 'binomial', y - числовой вектор или категориальный массив длиной n, где n - количество строк в X. Ответ y(i) соответствует строке i в X.
Когда distr является 'binomial', y является одним из следующих:
Числовой вектор длиной n, где каждая запись представляет успех (1) или отказ (0)
Логический вектор длиной n, где каждая запись представляет успех или сбой
Категориальный массив длиной n, где каждая запись представляет успех или сбой
Числовая матрица из двух столбцов, где первый столбец содержит количество успешных результатов для каждого наблюдения, а второй столбец содержит общее количество испытаний
Типы данных: single | double | logical | categorical
distr - Распределение данных ответов'normal' | 'binomial' | 'poisson' | 'gamma' | 'inverse gaussian'Распределение данных ответа, указанных как одно из следующих:
'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) выполняет эластичную регуляризацию сетки, предполагая, что значения отклика распределены Пуассоном. 'Alpha',0.5 аргумент пары имя-значение задает параметр, используемый при оптимизации упругой цепи.'Alpha' - Вес лассо по сравнению с оптимизацией гребня1 (по умолчанию) | положительный скалярВес оптимизации лассо (L1) по отношению к гребню (L2), определяемый как разделенная запятыми пара, состоящая из 'Alpha' и положительное скалярное значение в интервале (0,1]. Стоимость Alpha = 1 представляет регрессию лассо, Alpha близко к 0 приближается к регрессии гребня, а другие значения представляют собой оптимизацию упругой сетки. См. Эластичная сетка.
Пример: 'Alpha',0.75
Типы данных: single | double
'CV' - Спецификация перекрестной проверки для оценки отклонения'resubstitution' (по умолчанию) | положительный целочисленный скаляр | cvpartition объектСпецификация перекрестной проверки для оценки отклонения, указанная как пара, разделенная запятыми, состоящая из 'CV' и одно из следующих:
'resubstitution' — lassoglm использование X и y чтобы соответствовать модели и оценить отклонение без перекрестной проверки.
Положительное скалярное целое число K — lassoglm использование K-текстовая перекрестная проверка.
cvpartition объект cvp — lassoglm использует метод перекрестной проверки, выраженный в cvp. Нельзя использовать 'leaveout' раздел с lassoglm.
Пример: 'CV',10
'DFmax' - Максимальное количество ненулевых коэффициентовInf (по умолчанию) | целочисленный скалярМаксимальное количество ненулевых коэффициентов в модели, указанное как разделенная запятыми пара, состоящая из 'DFmax' и положительный целочисленный скаляр. lassoglm возвращает результаты только для Lambda значения, удовлетворяющие этому критерию.
Пример: 'DFmax',25
Типы данных: single | double
'Lambda' - Коэффициенты регуляризацииКоэффициенты регуляризации, указанные как пара, разделенная запятыми, состоящая из 'Lambda' и вектор неотрицательных значений. Смотри Лассо.
Если вы не поставляете Lambda, то lassoglm оценивает наибольшее значение Lambda это дает модель nonnull. В этом случае LambdaRatio дает отношение наименьшего к наибольшему значению последовательности, и NumLambda задает длину вектора.
Если вы поставляете Lambda, то lassoglm игнорирует LambdaRatio и NumLambda.
Если Standardize является true, то Lambda - набор значений, используемых для соответствия моделей X данные стандартизированы, чтобы иметь нулевое среднее и дисперсию единицы.
По умолчанию используется геометрическая последовательность NumLambda значения, с только наибольшим значением, способным производить B = 0.
Типы данных: single | double
'LambdaRatio' - Отношение наименьшего к наибольшему Lambda ценности1e–4 (по умолчанию) | положительный скалярОтношение наименьшего к наибольшему Lambda значения, когда вы не поставляете Lambda, указанная как пара, разделенная запятыми, состоящая из 'LambdaRatio' и положительный скаляр.
Если установить LambdaRatio = 0, затем lassoglm генерирует последовательность по умолчанию Lambda значения и заменяет наименьшее на 0.
Пример: 'LambdaRatio',1e–2
Типы данных: single | double
'Link' - Отображение между средним значением ответа и линейным предиктором'comploglog' | 'identity' | 'log' | 'logit' | 'loglog' | ...Отображение между средним λ ответа и линейным предиктором Xb, указанным как пара, разделенная запятыми, состоящая из 'Link' и одно из значений в этой таблице.
| Стоимость | Описание |
|---|---|
'comploglog' | log (-log ((1 - |
| start= Xb |
| log (λ) = Xb |
| log (в/( 1 - в/)) = Xb |
| log (-log (start)) = Xb |
'probit' | Φ-1 (start) = Xb, где Λ - нормальная (гауссова) кумулятивная функция распределения |
'reciprocal', по умолчанию для распределения 'gamma' | start-1 = Xb |
| мкр = Xb |
Массив ячеек формы | Пользовательская функция связи (см. Пользовательская функция связи) |
Пример: 'Link','probit'
Типы данных: char | string | single | double | cell
'MaxIter' - Максимально допустимое число итераций1e4 (по умолчанию) | целочисленный скалярМаксимальное допустимое количество итераций, указанное как пара, разделенная запятыми, состоящая из 'MaxIter' и положительный целочисленный скаляр.
Если алгоритм выполняется MaxIter итерации до достижения допуска сходимости RelTolзатем функция прекращает итерацию и возвращает предупреждающее сообщение.
Функция может возвращать более одного предупреждения, когда NumLambda больше, чем 1.
Пример: 'MaxIter',1e3
Типы данных: single | double
'MCReps' - Количество повторений Монте-Карло для перекрестной проверки1 (по умолчанию) | целочисленный скалярКоличество повторений Монте-Карло для перекрестной проверки, указанное как пара, разделенная запятыми, состоящая из 'MCReps' и положительный целочисленный скаляр.
Если CV является 'resubstitution' или cvpartition типа 'resubstitution', то MCReps должно быть 1.
Если CV является cvpartition типа 'holdout', то MCReps должно быть больше, чем 1.
Пример: 'MCReps',2
Типы данных: single | double
'NumLambda' - Количество Lambda ценности100 (по умолчанию) | целочисленный скалярКоличество Lambda ценности lassoglm использует, когда вы не поставляете Lambda, указанная как пара, разделенная запятыми, состоящая из 'NumLambda' и положительный целочисленный скаляр. lassoglm может вернуть меньше, чем NumLambda подходит, если отклонение посадок падает ниже пороговой доли нулевого отклонения (отклонение посадок без каких-либо предикторов X).
Пример: 'NumLambda',150
Типы данных: single | double
'Offset' - Дополнительная предикторная переменнаяДополнительная предикторная переменная, указанная как пара, разделенная запятыми, состоящая из 'Offset' и числовой вектор с тем же количеством строк, что и X. lassoglm функция сохраняет значение коэффициента Offset фиксируется при 1.0.
Типы данных: single | double
'Options' - Возможность параллельной перекрестной проверки и указания случайных потоковПараметр для параллельной перекрестной проверки и указания случайных потоков, указанных как пара, разделенная запятыми, состоящая из 'Options' и структура. Для этого параметра требуется Toolbox™ параллельных вычислений.
Создать Options структура с statset. Поля опций:
UseParallel - Установить на true для параллельного вычисления. Значение по умолчанию: false.
UseSubstreams - Установить на true вычислять параллельно воспроизводимым образом. Для воспроизводимости, установка Streams к типу, допускающему субпотоки: 'mlfg6331_64' или 'mrg32k3a'. Значение по умолчанию: false.
Streams - A RandStream объект или массив ячеек, состоящий из одного такого объекта. Если не указать Streams, то lassoglm использует поток по умолчанию.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
'PredictorNames' - Имена переменных предиктора{} (по умолчанию) | строковый массив | массив ячеек символьных векторовИмена переменных предиктора в порядке их появления в X, указанная как пара, разделенная запятыми, состоящая из 'PredictorNames' и строковый массив или массив ячеек символьных векторов.
Пример: 'PredictorNames',{'Height','Weight','Age'}
Типы данных: string | cell
'RelTol' - Порог сходимости для алгоритма снижения координат1e–4 (по умолчанию) | положительный скалярПорог сходимости для алгоритма снижения координат [3], определяемый как разделенная запятыми пара, состоящая из 'RelTol' и положительный скаляр. Алгоритм завершается, когда последовательные оценки вектора коэффициентов отличаются в L2 норме на относительную величину, меньшую, чем RelTol.
Пример: 'RelTol',2e–3
Типы данных: single | double
'Standardize' - Флаг для стандартизации данных предиктора перед подгонкой моделейtrue (по умолчанию) | falseФлаг для стандартизации данных предиктора X перед подгонкой моделей, указанных как пара, разделенная запятыми, состоящая из 'Standardize' и либо true или false. Если Standardize является true, то X данные масштабируются так, чтобы иметь нулевое среднее значение и дисперсию, равную единице. Standardize влияет на то, применяется ли регуляризация к коэффициентам в стандартизированной шкале или к исходной шкале. Результаты всегда представлены в исходной шкале данных.
Пример: 'Standardize',false
Типы данных: logical
'Weights' - Наблюдательные веса1/n*ones(n,1) (по умолчанию) | неотрицательный векторВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и неотрицательный вектор. Weights имеет длину n, где n - количество строк X. По крайней мере два значения должны быть положительными.
Типы данных: single | double
B - Установленные коэффициентыПодгоняемые коэффициенты, возвращаемые в виде числовой матрицы. B - матрица p-by-L, где p - количество предикторов (столбцов) в X, и L - число Lambda значения. Можно указать количество Lambda значения с использованием NumLambda аргумент пары имя-значение.
Коэффициент, соответствующий члену перехвата, является полем в FitInfo.
Типы данных: single | double
FitInfo - Информация о соответствии моделейИнформация о соответствии обобщенных линейных моделей, возвращенная в виде структуры с полями, описанными в этой таблице.
Поле в FitInfo | Описание |
|---|---|
Intercept | Пересечение члена β0 для каждой линейной модели, 1-по-L вектору |
Lambda | Лямбда-параметры в порядке возрастания, 1-по-L вектору |
Alpha | Значение Alpha параметр, скаляр |
DF | Количество ненулевых коэффициентов в B для каждого значения Lambda, a 1-по-L вектору |
Deviance | Отклонение установленной модели для каждого значения Если модель проходит перекрестную проверку, то значения для |
PredictorNames | Значение PredictorNames параметр, хранящийся как массив ячеек символьных векторов |
Если установить CV аргумент пары имя-значение для перекрестной проверки, FitInfo содержит эти дополнительные поля.
Поле в FitInfo | Описание |
|---|---|
SE | Стандартная ошибка Deviance для каждого Lambda, как вычислено во время перекрестной проверки, 1-по-L вектору |
LambdaMinDeviance | Lambda значение с минимальным ожидаемым отклонением, рассчитанное путем перекрестной проверки, скаляр |
Lambda1SE | Самый большой Lambda значение такое, что Deviance находится в пределах одной стандартной ошибки минимума, скаляра |
IndexMinDeviance | Индекс Lambda со значением LambdaMinDeviance, скаляр |
Index1SE | Индекс Lambda со значением Lambda1SE, скаляр |
Функция связи f (λ) отображает распределение со средним λ на линейную модель с данными X и вектором коэффициентов b, используя формулу
f (λ) = Xb.
Формулы для функций связи можно найти в Link описание аргумента пары имя-значение. В этой таблице перечислены функции связи, которые обычно используются для каждого распределения.
| Семейство дистрибуторов | Функция связи по умолчанию | Другие типовые функции связи |
|---|---|---|
'normal' | 'identity' | |
'binomial' | 'logit' | 'comploglog', 'loglog', 'probit' |
'poisson' | 'log' | |
'gamma' | 'reciprocal' | |
'inverse gaussian' | –2 |
Для неотрицательного значения λ, lassoglm решает проблему
+λ∑j=1p'βj|).
Функция Deviance в этом уравнении является отклонением модели, подгоняемой под отклики с использованием перехвата β0 и коэффициентов предиктора β. Формула отклонения зависит от distr параметр, который вы предоставляете lassoglm. Минимизация λ-пенализованного отклонения эквивалентна максимизации λ-пенализованного логарифма.
N - количество наблюдений.
λ - неотрицательный параметр регуляризации, соответствующий одному значению Lambda.
Параметры β0 и β являются скаляром и вектором длины p соответственно.
По мере увеличения λ количество ненулевых компонентов β уменьшается.
Проблема лассо включает в себя L1 норму β, что контрастирует с алгоритмом упругой сетки.
Для α строго между 0 и 1 и неотрицательным λ упругая сетка решает проблему
λ Pα (β)),
где
2βj2 + α 'βj |).
Эластичная сетка такая же, как у лассо, когда α = 1. Для других значений α штрафной член Pα (β) интерполируется между L1 нормой β и квадратной L2 нормой β. Когда α сжимается к 0, эластичная сетка приближаетсяridge регрессия.
[1] Тибширани, Р. «Регрессионная усадка и отбор через Лассо». Журнал Королевского статистического общества. Серия B, т. 58, № 1, 1996, стр. 267-288.
[2] Цзоу, H. и Т. Хэсти. «Регуляризация и выбор переменных через эластичную сеть». Журнал Королевского статистического общества. Серия 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] Маккалла, П. и Дж. А. Нелдер. Обобщенные линейные модели. 2-е издание. Нью-Йорк: Chapman & Hall/CRC Press, 1989.
[7] Коллетт, D. Моделирование двоичных данных. 2-е издание. Нью-Йорк: Chapman & Hall/CRC Press, 2003.
Для параллельного выполнения укажите 'Options' аргумент name-value в вызове этой функции и установка 'UseParallel' поле структуры опций для true использование statset.
Например: 'Options',statset('UseParallel',true)
Дополнительные сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.