Ловите арканом или эластичная сетевая регуляризация для обобщенных линейных моделей
возвращается оштрафованный, наибольшее правдоподобие соответствовало коэффициентам для обобщенных линейных моделей данных о предикторе 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 идентифицирует и удаляет избыточные предикторы.
Создайте данные из модели 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.
X — Данные о предиктореДанные о предикторе в виде числовой матрицы. Каждая строка представляет одно наблюдение, и каждый столбец представляет один переменный предиктор.
Типы данных: single | double
y — Данные об ответеДанные об ответе в виде числового вектора, логического вектора, категориального массива или 2D столбца числовая матрица.
Когда distr не 'binomial'Y числовой векторный или категориальный массив длины n, где n является количеством строк в X. Ответ y(i) соответствует строке i в X.
Когда distr 'binomial'Y одно из следующего:
Числовой вектор из длины n, где каждая запись представляет успех (1) или отказ (0)
Логический вектор из длины n, где каждая запись представляет успешность или неуспешность
Категориальный массив длины n, где каждая запись представляет успешность или неуспешность
2D столбец числовая матрица, где первый столбец содержит количество успехов для каждого наблюдения и второго столбца, содержит общее количество испытаний
Типы данных: 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' — Вес лассо по сравнению с гребенчатой оптимизацией (значение по умолчанию) | положительная скалярная величинаВес лассо (L 1) по сравнению с гребнем (L 2) оптимизация в виде разделенной запятой пары, состоящей из '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 это дает непустую модель. В этом случае, 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' — Количество повторений Монте-Карло для перекрестной проверки (значение по умолчанию) | положительный целочисленный скалярКоличество повторений Монте-Карло для перекрестной проверки в виде разделенной запятой пары, состоящей из 'MCReps' и положительный целочисленный скаляр.
Если CV 'resubstitution' или cvpartition из типа 'resubstitution', затем MCReps должен быть 1.
Если CV cvpartition из типа 'holdout', затем MCReps должен быть больше 1.
Пример: 'MCReps',2
Типы данных: single | double
'NumLambda' — Количество Lambda значения (значение по умолчанию) | положительный целочисленный скалярКоличество 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' и положительная скалярная величина. Алгоритм останавливается, когда последовательные оценки вектора коэффициентов отличаются по L 2 нормы относительной суммой меньше, чем RelTol.
Пример: 'RelTol',2e–3
Типы данных: single | double
'Standardize' — Отметьте для стандартизации данных о предикторе прежде, чем подбирать моделиtrue (значение по умолчанию) | falseОтметьте для стандартизации данных о предикторе X прежде, чем подбирать модели в виде разделенной запятой пары, состоящей из 'Standardize' и любой true или false. Если Standardize true, затем X данные масштабируются, чтобы иметь нулевое среднее значение и отклонение одного. Standardize влияет, применяется ли регуляризация к коэффициентам по стандартизированной шкале или исходной шкале. Результаты всегда представляются по исходной шкале данных.
Пример: 'Standardize',false
Типы данных: логический
'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 | Параметры lambda в порядке возрастания, 1- L вектор |
Alpha | Значение Alpha параметр, скаляр |
DF | Количество ненулевых коэффициентов в B для каждого значения Lambda, 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 (μ) = X b.
Можно найти формулы для функций ссылки в Link описание аргумента пары "имя-значение". Эта таблица приводит функции ссылки, которые обычно используются для каждого распределения.
| Семейство распределений | Функция ссылки по умолчанию | Другие типичные функции ссылки |
|---|---|---|
'normal' | 'identity' | |
'binomial' | 'logit' | 'comploglog'loglog, 'probit' |
'poisson' | 'log' | |
'gamma' | 'reciprocal' | |
'inverse gaussian' | –2 |
Для неотрицательного значения λ, lassoglm решает задачу
Функциональное Отклонение в этом уравнении является отклонением подгонки модели к ответам с помощью прерывания β 0 и коэффициенты предиктора β. Формула для Отклонения зависит от distr параметр вы предоставляете к lassoglm. Минимизация λ - оштрафованное отклонение эквивалентна максимизации λ - оштрафованная логарифмическая правдоподобность.
N является количеством наблюдений.
λ является неотрицательным параметром регуляризации, соответствующим одному значению Lambda.
Параметры β 0 и β являются скаляром и вектором из длины p, соответственно.
Когда λ увеличивается, количество ненулевых компонентов уменьшений β.
Проблема лассо включает L 1 норма β, как контрастируется с эластичным сетевым алгоритмом.
Для α строго между 0 и 1, и неотрицательный λ, эластичная сеть решает задачу
где
Эластичная сеть совпадает с лассо когда α = 1. Для других значений α термин штрафа Pα (β) интерполирует между 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.
Чтобы запуститься параллельно, установите 'UseParallel' опция к true.
Установите 'UseParallel' поле структуры опций к true использование statset и задайте 'Options' аргумент пары "имя-значение" в вызове этой функции.
Например: 'Options',statset('UseParallel',true)
Для получения дополнительной информации смотрите 'Options' аргумент пары "имя-значение".
Для более общей информации о параллельных вычислениях смотрите функции MATLAB Запуска с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.