Лассо или упругая сетевая регуляризация для обобщенных линейных моделей
возвращает исправленные, подгоняемые с максимальной вероятностью коэффициенты для обобщенных линейных моделей данных предиктора 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.