Ловите арканом или эластичная сетевая регуляризация для обобщенных линейных моделей
возвращается оштрафованный, наибольшее правдоподобие соответствовало коэффициентам для обобщенных линейных моделей данных о предикторе 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.
Чтобы запуститься параллельно, задайте 'Options'
аргумент значения имени в вызове этой функции и набора 'UseParallel'
поле структуры опций к true
использование statset
.
Например: 'Options',statset('UseParallel',true)
Для получения дополнительной информации о параллельных вычислениях, смотрите функции MATLAB Запуска с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.