Ловите арканом или эластичная сетевая регуляризация для обобщенных линейных моделей
B = lassoglm(X,y)
B = lassoglm(X,y,distr)
B = lassoglm(X,y,distr,Name,Value)
[B,FitInfo]
= lassoglm(___)
возвращается оштрафованный, наибольшее правдоподобие соответствовало коэффициентам для обобщенных линейных моделей данных о предикторе 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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
lassoglm(X,y,'poisson','Alpha',0.5)
выполняет эластичную сетевую регуляризацию, принимающую, что значениями ответа является распределенный Пуассон. Аргумент пары "имя-значение" 'Alpha',0.5
устанавливает параметр, используемый в эластичной сетевой оптимизации.\alpha
Вес лассо по сравнению с гребенчатой оптимизацией1
(значение по умолчанию) | положительная скалярная величинаВес лассо (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'
— Количество повторений Монте-Карло для перекрестной проверки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'
и структуры. Эта опция требует 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 -by-L вектор |
Lambda | Параметры lambda в порядке возрастания, 1 -by-L вектор |
Alpha | Значение параметра Alpha , скаляра |
DF | Количество ненулевых коэффициентов в B для каждого значения Lambda , 1 -by-L вектор |
Deviance | Отклонение подобранной модели для каждого значения Если модель перекрестный подтверждена, то значения для |
PredictorNames | Значение параметра PredictorNames , сохраненного как массив ячеек из символьных векторов |
Если вы устанавливаете аргумент пары "имя-значение" CV
перекрестный подтверждать, структура FitInfo
содержит эти дополнительные поля.
Поле в FitInfo | Описание |
---|---|
SE | Стандартная погрешность Deviance для каждого Lambda , как вычислено во время перекрестной проверки, 1 -by-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
. При минимизации λ - оштрафованное отклонение эквивалентно максимизации λ - оштрафовал loglikelihood.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.