lasso

Лассо или упругая сетевая регуляризация для линейных моделей

Описание

пример

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

Создайте подгонку lasso с помощью 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-кратной перекрестной валидацией. The '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 cvp объектаlasso использует метод перекрестной валидации, выраженный в 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' и структуру. Для этой опции требуется 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

Имена переменных предиктора, в том порядке, в котором они появляются 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 для каждой линейной модели a 1-by- L вектор
LambdaПараметры Лямбды в порядке возрастания, а 1-by- L вектор
AlphaЗначение Alpha параметр, скаляр
DFКоличество ненулевых коэффициентов в B для каждого значения Lambda, а 1-by- L вектор
MSEСредняя квадратичная невязка (MSE), a 1-by- L вектор
PredictorNamesЗначение PredictorNames параметр, сохраненный как массив ячеек из векторов символов

Если вы задаете CV аргумент пары "имя-значение" для перекрестной проверки, FitInfo структура содержит эти дополнительные поля.

Поле в FitInfoОписание
SEСтандартная ошибка MSE для каждого Lambda, как вычислено во время перекрестной валидации, a 1-by- L вектор
LambdaMinMSELambda значение с минимальным MSE, скаляром
Lambda1SEСамые большие Lambda значение такое, что MSE находится внутри одной стандартной ошибки минимального MSE, скаляра
IndexMinMSEИндекс Lambda со значением LambdaMinMSE, скаляр
Index1SEИндекс Lambda со значением Lambda1SE, скаляр

Подробнее о

свернуть все

Лассо

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

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

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

  • yi - это реакция на i наблюдения.

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

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

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

Когда λ увеличивается, количество ненулевых компонентов β уменьшается.

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

Упругая сеть

Для α строго между 0 и 1 и неотрицательной λ, упругая сеть решает задачу

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

где

Pα(β)=(1α)2β22+αβ1=j=1p((1α)2βj2+α|βj|).

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

Алгоритмы

свернуть все

Алгоритм ADMM

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

Минимизировать l(x)+g(z)

При условии Ax+Bz=c

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

Минимизировать l(x)+g(z)=12Axb22+λz1

При условии xz=0

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

xk+1=(ATA+ρI)1(ATb+ρ(zkuk))zk+1=Sλ/ρ(xk+1+uk)uk+1=uk+xk+1zk+1

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

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

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

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

Ссылки

[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] Boyd, S. «Распределенная оптимизация и статистическое обучение через метод множителей с переменным направлением». Основы и тренды машинного обучения. Том 3, № 1, 2010, стр. 1-122.

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

Введенный в R2011b