Ловите арканом или эластичная сетевая регуляризация для линейных моделей
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' — Отношение самых маленьких к самым большим значениям Lambda1e–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' — Количество значений Lambda100 (значение по умолчанию) | положительный целочисленный скалярКоличество значений 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.