Ловите арканом или эластичная сетевая регуляризация для линейных моделей
B = lasso(X,y)
B = lasso(X,y,Name,Value)
[B,FitInfo]
= lasso(___)
возвращает адаптированные коэффициенты регрессии наименьших квадратов для линейных моделей данных о предикторе B
= lasso(X
,y
)X
и ответ y
. Каждый столбец B
соответствует конкретному коэффициенту регуляризации в Lambda
. По умолчанию lasso
выполняет регуляризацию лассо с помощью геометрической последовательности значений Lambda
.
подгонки упорядочили регрессии с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, B
= lasso(X
,y
,Name,Value
)'Alpha',0.5
ставит эластичную сеть как метод регуляризации с параметром Alpha
, равный 0,5.
Создайте набор данных с избыточными предикторами и идентифицируйте те предикторы при помощи lasso
.
Создайте матричный X
100 пятимерных нормальных переменных. Создайте вектор отклика y
всего из двух компонентов X
и добавьте небольшое количество шума.
rng default % For reproducibility X = randn(100,5); weights = [0;2;0;-3;0]; % Only two nonzero coefficients y = X*weights + randn(100,1)*0.1; % Small added noise
Создайте подгонку лассо по умолчанию.
B = lasso(X,y);
Найдите вектор коэффициентов для 25-го значения Lambda
в B
.
B(:,25)
ans = 5×1
0
1.6093
0
-2.5865
0
lasso
идентифицирует и удаляет избыточные предикторы.
Создайте набор данных с избыточными предикторами и идентифицируйте те предикторы при помощи перекрестного подтвержденного lasso
.
Создайте матричный X
100 пятимерных нормальных переменных. Создайте вектор отклика y
из двух компонентов X
и добавьте небольшое количество шума.
rng default % For reproducibility X = randn(100,5); weights = [0;2;0;-3;0]; % Only two nonzero coefficients y = X*weights + randn(100,1)*0.1; % Small added noise
Создайте подгонку лассо при помощи 10-кратной перекрестной проверки с маркированными переменными прогноза.
[B,FitInfo] = lasso(X,y,'CV',10,'PredictorNames',{'x1','x2','x3','x4','x5'});
Отобразите переменные в модели, которая соответствует минимуму перекрестная подтвержденная среднеквадратическая ошибка (MSE).
idxLambdaMinMSE = FitInfo.IndexMinMSE; minMSEModelPredictors = FitInfo.PredictorNames(B(:,idxLambdaMinMSE)~=0)
minMSEModelPredictors = 1x2 cell array
{'x2'} {'x4'}
Отобразите переменные в самой разреженной модели в одной стандартной погрешности минимального MSE.
idxLambda1SE = FitInfo.Index1SE; sparseModelPredictors = FitInfo.PredictorNames(B(:,idxLambda1SE)~=0)
sparseModelPredictors = 1x2 cell array
{'x2'} {'x4'}
В этом примере lasso
идентифицирует те же предикторы для этих двух моделей и удаляет избыточные предикторы.
Визуально исследуйте перекрестную подтвержденную ошибку различных уровней регуляризации.
Загрузите выборочные данные.
load acetylene
Создайте матрицу проекта со взаимодействиями и никаким постоянным термином.
X = [x1 x2 x3]; D = x2fx(X,'interaction'); D(:,1) = []; % No constant term
Создайте подгонку лассо использование 10-кратной перекрестной проверки. Включайте FitInfo
вывод, таким образом, можно построить результат.
rng default % For reproducibility [B,FitInfo] = lasso(D,y,'CV',10);
Постройте перекрестные подтвержденные подгонки.
lassoPlot(B,FitInfo,'PlotType','CV'); legend('show') % Show legend
Зеленая круговая и пунктирная линия определяет местоположение Lambda
с минимальной ошибкой перекрестной проверки. Синяя круговая и пунктирная линия определяет местоположение точки с минимальной ошибкой перекрестной проверки плюс одно стандартное отклонение.
Предскажите очки экзамена студентов с помощью lasso
и эластичного сетевого метода.
Загрузите набор данных examgrades
.
load examgrades
X = grades(:,1:4);
y = grades(:,5);
Разделите данные в наборы обучающих данных и наборы тестов.
n = length(y);
c = cvpartition(n,'HoldOut',0.3);
idxTrain = training(c,1);
idxTest = ~idxTrain;
XTrain = X(idxTrain,:);
yTrain = y(idxTrain);
XTest = X(idxTest,:);
yTest = y(idxTest);
Найдите коэффициенты упорядоченной модели линейной регрессии использованием 10-кратной перекрестной проверки и эластичного сетевого метода с Alpha
= 0.75. Используйте самое большое значение Lambda
, таким образом, что среднеквадратическая ошибка (MSE) в одной стандартной погрешности минимального MSE.
[B,FitInfo] = lasso(XTrain,yTrain,'Alpha',0.75,'CV',10); idxLambda1SE = FitInfo.Index1SE; coef = B(:,idxLambda1SE); coef0 = FitInfo.Intercept(idxLambda1SE);
Предскажите музыку экзамена к тестовым данным. Сравните ожидаемые значения с фактическими классами экзамена с помощью ссылочной строки.
yhat = XTest*coef + coef0; hold on scatter(yTest,yhat) plot(yTest,yTest) xlabel('Actual Exam Grades') ylabel('Predicted Exam Grades') hold off
X
Данные о предиктореДанные о предикторе, заданные как числовая матрица. Каждая строка представляет одно наблюдение, и каждый столбец представляет одну переменную прогноза.
Типы данных: single | double
y
Данные об ответеДанные об ответе, заданные как числовой вектор. y
имеет длину n, где n является количеством строк X
. Ответ y(i)
соответствует i th строка X
.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
lasso(X,y,'Alpha',0.75,'CV',10)
выполняет эластичную сетевую регуляризацию с 10-кратной перекрестной проверкой. Аргумент пары "имя-значение" 'Alpha',0.75
устанавливает параметр, используемый в эластичной сетевой оптимизации.'AbsTol'
Допуск абсолютной погрешности1e–4
(значение по умолчанию) | положительная скалярная величинаДопуск абсолютной погрешности раньше определял сходимость Алгоритма ADMM, заданного как пара, разделенная запятой, состоящая из 'AbsTol'
и положительной скалярной величины. Алгоритм сходится, когда последовательные оценки вектора коэффициентов отличаются суммой меньше, чем AbsTol
.
Эта опция применяется только, когда вы используете lasso
на длинных массивах. Смотрите Расширенные Возможности для получения дополнительной информации.
Пример: 'AbsTol',1e–3
Типы данных: single | double
\alpha
Вес лассо по сравнению с гребенчатой оптимизацией1
(значение по умолчанию) | положительная скалярная величинаВес лассо (L 1) по сравнению с гребнем (L 2) оптимизация, заданная как пара, разделенная запятой, состоящая из 'Alpha'
и значения положительной скалярной величины в интервале (0,1]
. Значение Alpha = 1
представляет регрессию лассо, Alpha
близко к 0
, приближается к гребенчатой регрессии, и другие значения представляют эластичную сетевую оптимизацию. Смотрите Эластичную Сеть.
Пример: 'Alpha',0.5
Типы данных: single | double
'B0'
— Начальные значения для x - коэффициенты в Алгоритме ADMMНачальные значения для x - коэффициенты в Алгоритме ADMM, заданном как пара, разделенная запятой, состоящая из 'B0'
и числового вектора.
Эта опция применяется только, когда вы используете lasso
на длинных массивах. Смотрите Расширенные Возможности для получения дополнительной информации.
Типы данных: single | double
'CV'
— Спецификация перекрестной проверки для оценки среднеквадратической ошибки'resubstitution'
(значение по умолчанию) | положительный целочисленный скаляр | объект cvpartition
Спецификация перекрестной проверки для оценки среднеквадратической ошибки (MSE), заданной как пара, разделенная запятой, состоящая из 'CV'
и одно из следующего:
'resubstitution'
— lasso
использует X
и y
, чтобы соответствовать модели и оценить MSE без перекрестной проверки.
Положительное скалярное целое число K
— lasso
использует K
- перекрестная проверка сгиба.
Объект cvpartition
cvp
— lasso
использует метод перекрестной проверки, выраженный в cvp
. Вы не можете использовать раздел 'leaveout'
с lasso
.
Пример: 'CV',3
'DFmax'
— Максимальное количество ненулевых коэффициентовInf
(значение по умолчанию) | положительный целочисленный скалярМаксимальное количество ненулевых коэффициентов в модели, заданной как пара, разделенная запятой, состоящая из 'DFmax'
и положительного целочисленного скаляра. lasso
возвращает результаты только для значений Lambda
, которые удовлетворяют этот критерий.
Пример: 'DFmax',5
Типы данных: single | double
\lambda
Коэффициенты регуляризацииКоэффициенты регуляризации, заданные как пара, разделенная запятой, состоящая из 'Lambda'
и вектор неотрицательных значений. Смотрите Лассо.
Если вы не предоставляете Lambda
, то lasso
вычисляет самое большое значение Lambda
, который дает непустую модель. В этом случае LambdaRatio
дает отношение самого маленького к самому большому значению последовательности, и NumLambda
дает длину вектора.
Если вы предоставляете Lambda
, то lasso
игнорирует LambdaRatio
и NumLambda
.
Если Standardize
является true
, то Lambda
является множеством значений, используемым, чтобы соответствовать моделям данными X
, стандартизированными, чтобы иметь нулевое среднее значение и отклонение одного.
Значением по умолчанию является геометрическая последовательность значений NumLambda
только с самым большим значением, которое в состоянии произвести B
= 0
.
Пример: 'Lambda',linspace(0,1)
Типы данных: single | double
'LambdaRatio'
— Отношение самых маленьких к самым большим значениям Lambda
1e–4
(значение по умолчанию) | положительная скалярная величинаОтношение самого маленького к самым большим значениям Lambda
, когда вы не предоставляете Lambda
, заданный как пара, разделенная запятой, состоящая из 'LambdaRatio'
и положительной скалярной величины.
Если вы устанавливаете LambdaRatio
= 0, то lasso
генерирует последовательность по умолчанию значений Lambda
и заменяет самое маленькое на 0
.
Пример: 'LambdaRatio',1e–2
Типы данных: single | double
'MaxIter'
— Максимальное количество итераций позволеноМаксимальное количество итераций, позволенных, заданных как пара, разделенная запятой, состоящая из 'MaxIter'
и положительного целочисленного скаляра.
Если алгоритм выполняет итерации MaxIter
прежде, чем достигнуть допуска сходимости RelTol
, то функция прекращает выполнять итерации и возвращает предупреждающее сообщение.
Функция может возвратить больше чем одно предупреждение, когда NumLambda
больше, чем 1
.
Значениями по умолчанию является 1e5
для стандартных данных и 1e4
для длинных массивов.
Пример: 'MaxIter',1e3
Типы данных: single | double
'MCReps'
— Количество повторений Монте-Карло для перекрестной проверки1
(значение по умолчанию) | положительный целочисленный скалярКоличество повторений Монте-Карло для перекрестной проверки, заданной как пара, разделенная запятой, состоящая из 'MCReps'
и положительного целочисленного скаляра.
Если CV
является 'resubstitution'
или cvpartition
типа 'resubstitution'
, то MCReps
должен быть 1
.
Если CV
является cvpartition
типа 'holdout'
, то MCReps
должен быть больше, чем 1
.
Пример: 'MCReps',5
Типы данных: single | double
'NumLambda'
— Количество значений Lambda
100
(значение по умолчанию) | положительный целочисленный скалярКоличество значений Lambda
, которые использует lasso
, когда вы не предоставляете Lambda
, заданный как пара, разделенная запятой, состоящая из 'NumLambda'
и положительного целочисленного скаляра. lasso
может возвратить меньше, чем подгонки NumLambda
, если остаточная ошибка подгонок опускается ниже пороговой части отклонения y
.
Пример: 'NumLambda',50
Типы данных: single | double
Опции
Опция, чтобы перекрестный подтвердить параллельно и задать случайные потокиОпция, чтобы перекрестный подтвердить параллельно и задать случайные потоки, заданные как пара, разделенная запятой, состоящая из 'Options'
и структуры. Эта опция требует Parallel Computing Toolbox™.
Создайте структуру Options
с statset
. Поля опции:
'UseParallel'
Установите на true
, чтобы вычислить параллельно. Значением по умолчанию является false
.
UseSubstreams
— Установите на true
, чтобы вычислить параллельно восстанавливаемым способом. Для воспроизводимости, набор Streams
к типу, позволяющему подпотоки: 'mlfg6331_64'
или 'mrg32k3a'
. Значением по умолчанию является false
.
Объектный массив Streams
— A RandStream
или массив ячеек, состоящий из одного такого объекта. Если вы не задаете Streams
, то lasso
использует поток по умолчанию.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
'PredictorNames'
— Имена переменных прогноза{}
(значение по умолчанию) | массив строк | массив ячеек из символьных векторовИмена переменных прогноза, в порядке, в котором они появляются в X
, заданном как пара, разделенная запятой, состоящая из 'PredictorNames'
и массива строк или массива ячеек из символьных векторов.
Пример: 'PredictorNames',{'x1','x2','x3','x4'}
Типы данных: string
| cell
'RelTol'
Порог сходимости для координатного алгоритма спуска1e–4
(значение по умолчанию) | положительная скалярная величинаПорог сходимости для координатного алгоритма спуска [3], заданный как пара, разделенная запятой, состоящая из 'RelTol'
и положительной скалярной величины. Алгоритм останавливается, когда последовательные оценки вектора коэффициентов отличаются по L 2 нормы относительной суммой меньше, чем RelTol
.
Пример: 'RelTol',5e–3
Типы данных: single | double
\rho
Увеличенный лагранжевый параметрУвеличенный лагранжевый параметр ρ для Алгоритма ADMM, заданного как пара, разделенная запятой, состоящая из 'Rho'
и положительной скалярной величины. Значением по умолчанию является автоматический выбор.
Эта опция применяется только, когда вы используете lasso
на длинных массивах. Смотрите Расширенные Возможности для получения дополнительной информации.
Пример: 'Rho',2
Типы данных: single | double
'Standardize'
— Отметьте для стандартизации данных о предикторе перед подходящими моделямиtrue
(значение по умолчанию) | false
Отметьте для стандартизации данных о предикторе X
прежде, чем соответствовать моделям, заданным как пара, разделенная запятой, состоящая из 'Standardize'
и или true
или false
. Если Standardize
является true
, то данные X
масштабируются, чтобы иметь нулевое среднее значение и отклонение одного. Standardize
влияет, применяется ли регуляризация к коэффициентам в стандартизированной шкале или исходной шкале. Результаты всегда представляются в исходной шкале данных.
X
и y
всегда сосредотачиваются.
Пример: 'Standardize',false
Типы данных: логический
'U0'
— Начальное значение масштабированной двойной переменнойНачальное значение масштабированной двойной переменной u в Алгоритме ADMM, заданном как пара, разделенная запятой, состоящая из 'U0'
и числового вектора.
Эта опция применяется только, когда вы используете lasso
на длинных массивах. Смотрите Расширенные Возможности для получения дополнительной информации.
Типы данных: single | double
'Weights'
— Веса наблюдения1/n*ones(n,1)
(значение по умолчанию) | неотрицательный векторВеса наблюдения, заданные как пара, разделенная запятой, состоящая из 'Weights'
и неотрицательного вектора. Weights
имеет длину n, где n является количеством строк X
. Функция lasso
масштабирует Weights
, чтобы суммировать к 1
.
Типы данных: 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 вектор |
MSE | Среднеквадратическая ошибка (MSE), 1 -by-L вектор |
PredictorNames | Значение параметра PredictorNames , сохраненного как массив ячеек из символьных векторов |
Если вы устанавливаете аргумент пары "имя-значение" CV
перекрестный подтверждать, структура FitInfo
содержит эти дополнительные поля.
Поле в FitInfo | Описание |
---|---|
SE | Стандартная погрешность MSE для каждого Lambda , как вычислено во время перекрестной проверки, 1 -by-L вектор |
LambdaMinMSE | Значение Lambda с минимальным MSE, скаляром |
Lambda1SE | Самый большой Lambda оценивает таким образом, что MSE в одной стандартной погрешности минимального MSE, скаляра |
IndexMinMSE | Индекс Lambda со значением LambdaMinMSE , скаляр |
Index1SE | Индекс Lambda со значением Lambda1SE , скаляр |
Для данного значения λ, неотрицательного параметра, lasso
решает проблему
N является количеством наблюдений.
yi является ответом при наблюдении i.
xi является данными, вектором длины p при наблюдении i.
λ является неотрицательным параметром регуляризации, соответствующим одному значению Lambda
.
Параметры β 0 и β являются скаляром и вектором длины p, соответственно.
Когда λ увеличивается, количество ненулевых компонентов уменьшений β.
Проблема лассо включает L 1 норма β, как контрастируется с эластичным сетевым алгоритмом.
Для α строго между 0 и 1, и неотрицательный λ, эластичная сеть решает проблему
где
Эластичная сеть совпадает с лассо когда α = 1. Для других значений α термин штрафа Pα (β) интерполирует между L 1 норму β и L в квадрате 2 нормы β. Когда α уменьшается к 0, эластичные сетевые подходы регрессия ridge
.
При работе с длинными массивами lasso
использует алгоритм на основе Переменного Метода Направления Множителей (ADMM) [5]. Обозначение, используемое здесь, эквивалентно в ссылочной газете. Этот метод решает проблемы формы
Минимизировать
Согласно
Используя это обозначение, проблема регрессии лассо
Минимизировать
Согласно
Поскольку функция потерь квадратично, итеративные обновления, выполняемые алгоритмом, составляют решение линейной системы уравнений с одной матрицей коэффициентов, но несколькими правыми сторонами. Обновления, выполняемые алгоритмом во время каждой итерации,
A является набором данных (длинный массив), x содержит коэффициенты, ρ является параметром штрафа (увеличенный лагранжевый параметр), b является ответом (длинный массив), и S является мягким оператором пороговой обработки.
lasso
решает линейную систему с помощью факторизации Холесского потому что матрица коэффициентов симметрично и положительный определенный. Поскольку не изменяется между итерациями, факторизация Холесского кэшируется между итерациями.
Даже при том, что A и b являются длинными массивами, они появляются только в терминах и . Результаты этих двух умножений матриц являются достаточно маленькими, чтобы уместиться в памяти, таким образом, они предварительно вычисляются, и итеративные обновления между итерациями выполняются полностью в памяти.
[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] Бойд, S. “Распределенная Оптимизация и Статистическое Изучение с помощью Переменного Метода Направления Множителей”. Основы и Тренды в Машинном обучении. Издание 3, № 1, 2010, стр 1–122.
Эта функция поддерживает длинные массивы для данных, которые не помещаются в память, с некоторыми ограничениями.
С длинными массивами lasso
использует алгоритм на основе ADMM (Чередующий Метод Направления Множителей).
Никакая эластичная сетевая поддержка. Параметр 'Alpha'
всегда равняется 1.
Никакая перекрестная проверка (параметр 'CV'
) поддержка, которая включает связанный параметр 'MCReps'
.
Вывод FitInfo
не содержит дополнительные поля 'SE'
, 'LambdaMinMSE'
, 'Lambda1SE'
, 'IndexMinMSE'
и 'Index1SE'
.
Параметр 'Options'
не поддержан, потому что он не содержит опции, которые применяются к алгоритму ADMM. Можно настроить аргументы пары "имя-значение" использования алгоритма ADMM.
Поддерживаемые аргументы пары "имя-значение":
'Lambda'
'LambdaRatio'
'NumLambda'
'Standardize'
'PredictorNames'
'RelTol'
'Weights'
Дополнительные аргументы пары "имя-значение", чтобы управлять алгоритмом ADMM:
\rho
Увеличенный лагранжевый параметр, ρ. Значение по умолчанию является автоматическим выбором.
'AbsTol'
Абсолютный допуск раньше определял сходимость. Значением по умолчанию является 1e–4
.
'MaxIter'
— Максимальное количество итераций. Значением по умолчанию является 1e4
.
'B0'
— Начальные значения для коэффициентов x. Значение по умолчанию является вектором нулей.
'U0'
— Начальные значения масштабированной двойной переменной u. Значение по умолчанию является вектором нулей.
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Чтобы запуститься параллельно, установите опцию 'UseParallel'
на true
.
Установите поле 'UseParallel'
структуры опций к true
с помощью statset
и задайте аргумент пары "имя-значение" 'Options'
в вызове этой функции.
Например: 'Options',statset('UseParallel',true)
Для получения дополнительной информации смотрите аргумент пары "имя-значение" 'Options'
.
Для более общей информации о параллельных вычислениях смотрите функции MATLAB Выполнения с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.