exponenta event banner

лассо

Регуляризация лассо или эластичной сетки для линейных моделей

Описание

пример

B = lasso(X,y) возвращает соответствующие коэффициенты регрессии методом наименьших квадратов для линейных моделей данных предиктора X и ответ y. Каждый столбец B соответствует конкретному коэффициенту регуляризации в Lambda. По умолчанию lasso выполняет регуляризацию лассо с использованием геометрической последовательности Lambda значения.

пример

B = lasso(X,y,Name,Value) соответствует регуляризованным регрессиям дополнительными опциями, заданными одним или несколькими аргументами пары имя-значение. Например, 'Alpha',0.5 устанавливает эластичную сетку в качестве метода регуляризации с параметром Alpha равно 0,5.

пример

[B,FitInfo] = lasso(___) также возвращает структуру FitInfo, который содержит информацию о соответствии моделей, используя любой из входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Создайте набор данных с избыточными предикторами и определите эти предикторы с помощью 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 и переменную ответа y = 0 + 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

Figure contains an axes. The axes contains 2 objects of type scatter, line.

Создайте набор данных с избыточными предикторами и определите эти предикторы с помощью перекрестной проверки 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

Figure contains an axes. The axes with title Cross-Validated MSE of Lasso Fit contains 5 objects of type errorbar, line. These objects represent MSE with Error Bars, LambdaMinMSE, Lambda1SE.

Зеленый круг и пунктирная линия расположены 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

Figure contains an axes. The axes contains 2 objects of type scatter, line.

Входные аргументы

свернуть все

Данные предиктора, заданные как числовая матрица. Каждая строка представляет одно наблюдение, а каждый столбец представляет одну предикторную переменную.

Типы данных: single | double

Данные ответа, указанные как числовой вектор. 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 аргумент пары имя-значение задает параметр, используемый при оптимизации упругой цепи.

Абсолютный допуск ошибки, используемый для определения сходимости алгоритма ADMM, заданного как разделенная запятыми пара, состоящая из 'AbsTol' и положительный скаляр. Алгоритм сходится, когда последовательные оценки вектора коэффициентов различаются на величину, меньшую, чем AbsTol.

Примечание

Этот параметр применяется только при использовании lasso на высоких массивах. Дополнительные сведения см. в разделе Расширенные возможности.

Пример: 'AbsTol',1e–3

Типы данных: single | double

Вес оптимизации лассо (L1) по отношению к гребню (L2), определяемый как разделенная запятыми пара, состоящая из 'Alpha' и положительное скалярное значение в интервале (0,1]. Стоимость Alpha = 1 представляет регрессию лассо, Alpha близко к 0 приближается к регрессии гребня, а другие значения представляют собой оптимизацию упругой сетки. См. Эластичная сетка.

Пример: 'Alpha',0.5

Типы данных: single | double

Начальные значения коэффициентов x в алгоритме ADMM, определяемые как разделенная запятыми пара, состоящая из 'B0' и числовой вектор.

Примечание

Этот параметр применяется только при использовании lasso на высоких массивах. Дополнительные сведения см. в разделе Расширенные возможности.

Типы данных: single | double

Спецификация перекрестной проверки для оценки среднеквадратической ошибки (MSE), указанной как пара, разделенная запятыми, состоящая из 'CV' и одно из следующих:

  • 'resubstitution'lasso использование X и y чтобы соответствовать модели и оценить MSE без перекрестной проверки.

  • Положительное скалярное целое число Klasso использование K-текстовая перекрестная проверка.

  • cvpartition объект cvplasso использует метод перекрестной проверки, выраженный в cvp. Нельзя использовать 'leaveout' раздел с lasso.

Пример: 'CV',3

Максимальное количество ненулевых коэффициентов в модели, указанное как разделенная запятыми пара, состоящая из 'DFmax' и положительный целочисленный скаляр. lasso возвращает результаты только для Lambda значения, удовлетворяющие этому критерию.

Пример: 'DFmax',5

Типы данных: single | double

Флаг для установки модели с элементом перехвата, указанным как пара, разделенная запятыми, состоящая из 'Intercept' и либо true или false. Значение по умолчанию: true, что указывает на включение члена перехвата в модель. Если Intercept является false, то возвращенное значение перехвата равно 0.

Пример: 'Intercept',false

Типы данных: logical

Коэффициенты регуляризации, указанные как пара, разделенная запятыми, состоящая из 'Lambda' и вектор неотрицательных значений. Смотри Лассо.

  • Если вы не поставляете Lambda, то lasso вычисляет наибольшее значение Lambda это дает модель nonnull. В этом случае LambdaRatio дает отношение наименьшего к наибольшему значению последовательности, и NumLambda задает длину вектора.

  • Если вы поставляете Lambda, то lasso игнорирует LambdaRatio и NumLambda.

  • Если Standardize является true, то Lambda - набор значений, используемых для соответствия моделей X данные стандартизированы, чтобы иметь нулевое среднее и дисперсию единицы.

По умолчанию используется геометрическая последовательность NumLambda значения, с только наибольшим значением, способным производить B = 0.

Пример: 'Lambda',linspace(0,1)

Типы данных: single | double

Отношение наименьшего к наибольшему Lambda значения, когда вы не поставляете Lambda, указанная как пара, разделенная запятыми, состоящая из 'LambdaRatio' и положительный скаляр.

Если установить LambdaRatio = 0, затем lasso генерирует последовательность по умолчанию Lambda значения и заменяет наименьшее на 0.

Пример: 'LambdaRatio',1e–2

Типы данных: single | double

Максимальное допустимое количество итераций, указанное как пара, разделенная запятыми, состоящая из 'MaxIter' и положительный целочисленный скаляр.

Если алгоритм выполняется MaxIter итерации до достижения допуска сходимости RelTolзатем функция прекращает итерацию и возвращает предупреждающее сообщение.

Функция может возвращать более одного предупреждения, когда NumLambda больше, чем 1.

Значения по умолчанию: 1e5 для стандартных данных и 1e4 для больших массивов.

Пример: 'MaxIter',1e3

Типы данных: single | double

Количество повторений Монте-Карло для перекрестной проверки, указанное как пара, разделенная запятыми, состоящая из 'MCReps' и положительный целочисленный скаляр.

  • Если CV является 'resubstitution' или cvpartition типа 'resubstitution', то MCReps должно быть 1.

  • Если CV является cvpartition типа 'holdout', то MCReps должно быть больше, чем 1.

Пример: 'MCReps',5

Типы данных: single | double

Количество Lambda ценности lasso использует, когда вы не поставляете Lambda, указанная как пара, разделенная запятыми, состоящая из 'NumLambda' и положительный целочисленный скаляр. lasso может вернуть меньше, чем NumLambda подходит, если остаточная ошибка посадок падает ниже пороговой доли дисперсии y.

Пример: 'NumLambda',50

Типы данных: single | double

Параметр для параллельной перекрестной проверки и указания случайных потоков, указанных как пара, разделенная запятыми, состоящая из 'Options' и структура. Для этого параметра требуется Toolbox™ параллельных вычислений.

Создать Options структура с statset. Поля опций:

  • UseParallel - Установить на true для параллельного вычисления. Значение по умолчанию: false.

  • UseSubstreams - Установить на true вычислять параллельно воспроизводимым образом. Для воспроизводимости, установка Streams к типу, допускающему субпотоки: 'mlfg6331_64' или 'mrg32k3a'. Значение по умолчанию: false.

  • Streams - A RandStream объект или массив ячеек, состоящий из одного такого объекта. Если не указать Streams, то lasso использует поток по умолчанию.

Пример: 'Options',statset('UseParallel',true)

Типы данных: struct

Имена переменных предиктора в порядке их появления в X, указанная как пара, разделенная запятыми, состоящая из 'PredictorNames' и строковый массив или массив ячеек символьных векторов.

Пример: 'PredictorNames',{'x1','x2','x3','x4'}

Типы данных: string | cell

Порог сходимости для алгоритма снижения координат [3], определяемый как разделенная запятыми пара, состоящая из 'RelTol' и положительный скаляр. Алгоритм завершается, когда последовательные оценки вектора коэффициентов отличаются в L2 норме на относительную величину, меньшую, чем RelTol.

Пример: 'RelTol',5e–3

Типы данных: single | double

Дополненный лагранжиан для алгоритма ADMM, заданный как разделенная запятыми пара, состоящая из 'Rho' и положительный скаляр. По умолчанию используется автоматический выбор.

Примечание

Этот параметр применяется только при использовании lasso на высоких массивах. Дополнительные сведения см. в разделе Расширенные возможности.

Пример: 'Rho',2

Типы данных: single | double

Флаг для стандартизации данных предиктора X перед подгонкой моделей, указанных как пара, разделенная запятыми, состоящая из 'Standardize' и либо true или false. Если Standardize является true, то X данные масштабируются так, чтобы иметь нулевое среднее значение и дисперсию, равную единице. Standardize влияет на то, применяется ли регуляризация к коэффициентам в стандартизированной шкале или к исходной шкале. Результаты всегда представлены в исходной шкале данных.

Если Intercept является falseзатем комплекты программного обеспечения Standardize кому false, независимо от Standardize значение, которое вы указываете.

X и y всегда центрированы, когда Intercept является true.

Пример: 'Standardize',false

Типы данных: logical

Начальное значение масштабированной двойной переменной u в алгоритме ADMM, указанной как разделенная запятыми пара, состоящая из 'U0' и числовой вектор.

Примечание

Этот параметр применяется только при использовании lasso на высоких массивах. Дополнительные сведения см. в разделе Расширенные возможности.

Типы данных: single | double

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и неотрицательный вектор. Weights имеет длину n, где n - количество строк X. lasso шкалы функций Weights для суммирования 1.

Типы данных: single | double

Выходные аргументы

свернуть все

Подгоняемые коэффициенты, возвращаемые в виде числовой матрицы. B - матрица p-by-L, где p - количество предикторов (столбцов) в X, и L - число Lambda значения. Можно указать количество Lambda значения с использованием NumLambda аргумент пары имя-значение.

Коэффициент, соответствующий члену перехвата, является полем в FitInfo.

Типы данных: single | double

Информация о соответствии линейных моделей, возвращаемая в виде структуры с полями, описанными в этой таблице.

Поле в 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 вектору
LambdaMinMSELambda значение с минимальным MSE, скаляр
Lambda1SEСамый большой Lambda значение, такое, что MSE находится в пределах одной стандартной ошибки минимального MSE, скаляр
IndexMinMSEИндекс Lambda со значением LambdaMinMSE, скаляр
Index1SEИндекс Lambda со значением Lambda1SE, скаляр

Подробнее

свернуть все

Лассо

Для заданного значения λ неотрицательный параметр, lasso решает проблему

minβ0, β (12N∑i=1N (yi β0 xiTβ) 2+λ∑j=1p'βj|).

  • N - количество наблюдений.

  • yi является ответом при наблюдении i.

  • xi - данные, вектор длины p при наблюдении i.

  • λ - неотрицательный параметр регуляризации, соответствующий одному значению Lambda.

  • Параметры β0 и β являются скаляром и вектором длины p соответственно.

По мере увеличения λ количество ненулевых компонентов β уменьшается.

Проблема лассо включает в себя L1 норму β, что контрастирует с алгоритмом упругой сетки.

Эластичная сетка

Для α строго между 0 и 1 и неотрицательным λ упругая сетка решает проблему

minβ0, β (12N∑i=1N (yi β0 xiTβ) 2 + λ Pα (β)),

где

(β) = (1 α) 2‖β‖22+α‖β‖1=∑j=1p ((1 α) 2βj2 + α 'βj |).

Эластичная сетка такая же, как у лассо, когда α = 1. Для других значений α штрафной член (β) интерполируется между L1 нормой β и квадратной L2 нормой β. Когда α сжимается к 0, эластичная сетка приближаетсяridge регрессия.

Алгоритмы

свернуть все

Алгоритм ADMM

При работе с массивами высокого уровня lasso использует алгоритм, основанный на методе чередующегося направления множителей (ADMM) [5]. Используемое здесь обозначение является тем же, что и в справочном документе. Этот метод решает проблемы формы

Минимизация 1 (x) + g (z)

В зависимости от Ax + Bz = c

Используя эту нотацию, задача регрессии лассо

Минимизируйте 1 (x) + g (z) =12‖Ax−b‖22+λ‖z‖1

Подчиняется x − z = 0

Поскольку функция потерь l (x) =12‖Ax−b‖22 является квадратичной, итеративные обновления, выполняемые алгоритмом, равносильны решению линейной системы уравнений с одной матрицей коэффициентов, но с несколькими правыми сторонами. Обновления, выполняемые алгоритмом во время каждой итерации:

xk + 1 = (ATA + αI) 1 (ATb + (zk uk)) zk + 1 = Sλ/( xk + 1 + uk) uk + 1 = uk + xk + 1 − zk + 1

A - это набор данных (высокий массив), x содержит коэффициенты, start- штрафной параметр (дополненный параметр Лагранжиана), b - ответ (высокий массив), а S - оператор мягкого порогования.

(a) = {a−κ, a> κ0, |a | κ , <κ.

lasso решает линейную систему с помощью факторизации по Холескому, поскольку матрица коэффициентов ATA + αI симметрична и положительна. Так как startне изменяется между итерациями, факторизация Чолеского кэшируется между итерациями.

Несмотря на то, что A и b являются массивами высокого уровня, они отображаются только в терминах ATA и ATb. Результаты этих двух матричных умножений достаточно малы для размещения в памяти, поэтому они предварительно вычисляются и итеративные обновления между итерациями выполняются полностью в памяти.

Ссылки

[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.

Расширенные возможности

Представлен в R2011b