Лассо или упругая сетевая регуляризация для обобщенных линейных моделей
возвращает исправленные, подгоняемые с максимальной вероятностью коэффициенты для обобщенных линейных моделей данных предиктора 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);
Выполните регуляризацию лассо для обобщенной линейной регрессии модели с 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.
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) выполняет упругую сетевую регуляризацию, принимая, что значения отклика распределены по Пуассону. The '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' | журнал (-журнал ((1 - µ))) = Xb |
| µ = Xb |
| журнал (µ) = Xb |
| журнал (µ/( 1 - µ)) = Xb |
| журнал (-журнал (µ)) = Xb |
'probit' | Φ–1(µ) = Xb, где И является нормальной (Гауссовой) совокупной функцией распределения |
'reciprocal', по умолчанию для распределительного 'gamma' | µ–1 = Xb |
| µp = 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' и структуру. Для этой опции требуется 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
'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 для каждой линейной модели a 1-by- L вектор |
Lambda | Параметры Лямбды в порядке возрастания, а 1-by- L вектор |
Alpha | Значение Alpha параметр, скаляр |
DF | Количество ненулевых коэффициентов в B для каждого значения Lambda, а 1-by- L вектор |
Deviance | Отклонение подобранной модели для каждого значения Если модель является перекрестной, то значения для |
PredictorNames | Значение PredictorNames параметр, сохраненный как массив ячеек из векторов символов |
Если вы задаете CV аргумент пары "имя-значение" для перекрестной проверки, FitInfo структура содержит эти дополнительные поля.
Поле в FitInfo | Описание |
|---|---|
SE | Стандартная ошибка Deviance для каждого Lambda, как вычислено во время перекрестной валидации, a 1-by- L вектор |
LambdaMinDeviance | Lambda значение с минимальным ожидаемым отклонением, рассчитанным перекрестной валидацией, скаляром |
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 решает задачу
Функция Deviance в этом уравнении является отклонением модели к откликам с помощью β перехвата 0 и коэффициентов предиктора β. Формула для Deviance зависит от distr параметр, который вы поставляете в lassoglm. Минимизация λ -пенализованного отклонения эквивалентна максимизации λ -пенализованной логарифмической правдоподобности.
N - количество наблюдений.
λ является неотрицательным параметром регуляризации, соответствующим одному значению Lambda.
Параметрами β 0 и β являются скаляр и вектор длины p, соответственно.
Когда λ увеличивается, количество ненулевых компонентов β уменьшается.
Задача lasso включает в себя L1 норма β, противопоставленная алгоритму упругой сети.
Для α строго между 0 и 1 и неотрицательной λ, упругая сеть решает задачу
где
Эластичная сеть такая же, как и лассо, когда α = 1. Для других значений α срок штрафа Pα (β) интерполируется между 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.
Чтобы выполнять параллельно, задайте 'Options' аргумент имя-значение в вызове этой функции и установите 'UseParallel' поле структуры опций для true использование statset.
Для примера: 'Options',statset('UseParallel',true)
Для получения дополнительной информации о параллельных вычислениях смотрите Запуск функций MATLAB с автоматической поддержкой параллельных вычислений (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.