Регуляризация лассо или эластичной сетки для линейных моделей
возвращает соответствующие коэффициенты регрессии методом наименьших квадратов для линейных моделей данных предиктора 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 идентифицирует и удаляет избыточные предикторы.
Создание образца данных с помощью переменной предиктора X и переменную ответа 2X +
rng('default') % For reproducibility X = rand(100,1); y = 2*X + randn(100,1)/10;
Укажите значение регуляризации и найдите коэффициент регрессионной модели без элемента пересечения.
lambda = 1e-03; B = lasso(X,y,'Lambda',lambda,'Intercept',false)
Warning: When the 'Intercept' value is false, the 'Standardize' value is set to false.
B = 1.9825
Постройте график действительных значений (точек) относительно прогнозируемых значений (линии).
scatter(X,y) hold on x = 0:0.1:1; plot(x,x*B) hold off

Создайте набор данных с избыточными предикторами и определите эти предикторы с помощью перекрестной проверки 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
{'x2'} {'x4'}
Отображение переменных в модели разрежения в пределах одной стандартной ошибки минимального MSE.
idxLambda1SE = FitInfo.Index1SE; sparseModelPredictors = FitInfo.PredictorNames(B(:,idxLambda1SE)~=0)
sparseModelPredictors = 1x2 cell
{'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-ой строке X.
Типы данных: single | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. 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 (по умолчанию) | положительный скалярВес оптимизации лассо (L1) по отношению к гребню (L2), определяемый как разделенная запятыми пара, состоящая из '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
'Intercept' - Флаг для установки модели с термином перехватаtrue (по умолчанию) | falseФлаг для установки модели с элементом перехвата, указанным как пара, разделенная запятыми, состоящая из 'Intercept' и либо true или false. Значение по умолчанию: true, что указывает на включение члена перехвата в модель. Если Intercept является false, то возвращенное значение перехвата равно 0.
Пример: 'Intercept',false
Типы данных: logical
'Lambda' - Коэффициенты регуляризацииКоэффициенты регуляризации, указанные как пара, разделенная запятыми, состоящая из 'Lambda' и вектор неотрицательных значений. Смотри Лассо.
Если вы не поставляете Lambda, то lasso вычисляет наибольшее значение Lambda это дает модель nonnull. В этом случае 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' - Возможность параллельной перекрестной проверки и указания случайных потоковПараметр для параллельной перекрестной проверки и указания случайных потоков, указанных как пара, разделенная запятыми, состоящая из 'Options' и структура. Для этого параметра требуется 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' и положительный скаляр. Алгоритм завершается, когда последовательные оценки вектора коэффициентов отличаются в L2 норме на относительную величину, меньшую, чем 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 влияет на то, применяется ли регуляризация к коэффициентам в стандартизированной шкале или к исходной шкале. Результаты всегда представлены в исходной шкале данных.
Если Intercept является falseзатем комплекты программного обеспечения Standardize кому false, независимо от Standardize значение, которое вы указываете.
X и y всегда центрированы, когда Intercept является true.
Пример: 'Standardize',false
Типы данных: logical
'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-по-L вектору |
Lambda | Лямбда-параметры в порядке возрастания, 1-по-L вектору |
Alpha | Значение Alpha параметр, скаляр |
DF | Количество ненулевых коэффициентов в B для каждого значения Lambda, a 1-по-L вектору |
MSE | Среднеквадратичная ошибка (MSE), a 1-по-L вектору |
PredictorNames | Значение PredictorNames параметр, хранящийся как массив ячеек символьных векторов |
Если установить CV аргумент пары имя-значение для перекрестной проверки, FitInfo содержит эти дополнительные поля.
Поле в FitInfo | Описание |
|---|---|
SE | Стандартная ошибка MSE для каждого Lambda, как вычислено во время перекрестной проверки, 1-по-L вектору |
LambdaMinMSE | Lambda значение с минимальным MSE, скаляр |
Lambda1SE | Самый большой Lambda значение, такое, что MSE находится в пределах одной стандартной ошибки минимального MSE, скаляр |
IndexMinMSE | Индекс Lambda со значением LambdaMinMSE, скаляр |
Index1SE | Индекс Lambda со значением Lambda1SE, скаляр |
Для заданного значения λ неотрицательный параметр, lasso решает проблему
2+λ∑j=1p'βj|).
N - количество наблюдений.
yi является ответом при наблюдении i.
xi - данные, вектор длины p при наблюдении i.
λ - неотрицательный параметр регуляризации, соответствующий одному значению Lambda.
Параметры β0 и β являются скаляром и вектором длины p соответственно.
По мере увеличения λ количество ненулевых компонентов β уменьшается.
Проблема лассо включает в себя L1 норму β, что контрастирует с алгоритмом упругой сетки.
Для α строго между 0 и 1 и неотрицательным λ упругая сетка решает проблему
+ λ Pα (β)),
где
2βj2 + α 'βj |).
Эластичная сетка такая же, как у лассо, когда α = 1. Для других значений α штрафной член Pα (β) интерполируется между L1 нормой β и квадратной L2 нормой β. Когда α сжимается к 0, эластичная сетка приближаетсяridge регрессия.
При работе с массивами высокого уровня lasso использует алгоритм, основанный на методе чередующегося направления множителей (ADMM) [5]. Используемое здесь обозначение является тем же, что и в справочном документе. Этот метод решает проблемы формы
Минимизация 1 (x) + g (z)
В зависимости от Ax + Bz = c
Используя эту нотацию, задача регрессии лассо
Минимизируйте 1 (x) + g (z)
Подчиняется x − z = 0
Поскольку функция =12‖Ax−b‖22 является квадратичной, итеративные обновления, выполняемые алгоритмом, равносильны решению линейной системы уравнений с одной матрицей коэффициентов, но с несколькими правыми сторонами. Обновления, выполняемые алгоритмом во время каждой итерации:
1 + uk) uk + 1 = uk + xk + 1 − zk + 1
A - это набор данных (высокий массив), x содержит коэффициенты, start- штрафной параметр (дополненный параметр Лагранжиана), b - ответ (высокий массив), а S - оператор мягкого порогования.
.
lasso решает линейную систему с помощью факторизации по Холескому, поскольку матрица коэффициентов αI симметрична и положительна. startне изменяется между итерациями, факторизация Чолеского кэшируется между итерациями.
Несмотря на то, что A и b являются массивами высокого уровня, они отображаются только в терминах и . Результаты этих двух матричных умножений достаточно малы для размещения в памяти, поэтому они предварительно вычисляются и итеративные обновления между итерациями выполняются полностью в памяти.
[1] Тибширани, Р. «Регрессионная усадка и отбор через Лассо». Журнал Королевского статистического общества. Серия B, т. 58, № 1, 1996, стр. 267-288.
[2] Цзоу, H. и Т. Хэсти. «Регуляризация и выбор переменных через эластичную сеть». Журнал Королевского статистического общества. Серия B, т. 67, № 2, 2005, стр. 301-320.
[3] Фридман, Дж., Р. Тибширани и Т. Хасти. «Пути регуляризации для обобщенных линейных моделей через спуск по координатам». Журнал статистического программного обеспечения. Том 33, № 1, 2010. https://www.jstatsoft.org/v33/i01
[4] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения. 2-е издание. Нью-Йорк: Спрингер, 2008.
[5] Бойд, С. «Распределенная оптимизация и статистическое обучение с помощью метода чередующегося направления множителей». Основы и тенденции машинного обучения. т. 3, № 1, 2010, стр. 1-122.
Эта функция поддерживает массивы tall для данных из памяти с некоторыми ограничениями.
С высокими массивами, 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. Значением по умолчанию является вектор нулей.
Дополнительные сведения см. в разделе Массивы Tall.
Для параллельного выполнения укажите 'Options' аргумент name-value в вызове этой функции и установка 'UseParallel' поле структуры опций для true использование statset.
Например: 'Options',statset('UseParallel',true)
Дополнительные сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
fitlm | fitrlinear | lassoglm | lassoPlot | ridge
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.