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

Создайте набор данных с избыточными предикторами и идентифицируйте те предикторы при помощи перекрестного подтвержденного 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

Входные параметры

свернуть все

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

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

Данные об ответе в виде числового вектора. y имеет длину n, где n является количеством строк X. Ответ y(i) соответствует i th строка 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

Вес лассо (L 1) по сравнению с гребнем (L 2) оптимизация в виде разделенной запятой пары, состоящей из '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

Типы данных: логический

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

  • Если вы не предоставляете Lambdaто lasso вычисляет самое большое значение Lambda это дает непустую модель. В этом случае, 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' и положительная скалярная величина. Алгоритм останавливается, когда последовательные оценки вектора коэффициентов отличаются по L 2 нормы относительной суммой меньше, чем 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

Типы данных: логический

Начальное значение масштабированной двойной переменной 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Параметры lambda в порядке возрастания, 1- L вектор
AlphaЗначение Alpha параметр, скаляр
DFКоличество ненулевых коэффициентов в B для каждого значения Lambda, 1- L вектор
MSEСреднеквадратическая ошибка (MSE), 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,β(12Ni=1N(yiβ0xiTβ)2+λj=1p|βj|).

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

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

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

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

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

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

Проблема лассо включает L 1 норма β, как контрастируется с эластичным сетевым алгоритмом.

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

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

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

где

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

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

Алгоритмы

свернуть все

Алгоритм ADMM

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

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

При ограничениях Ax+Bz=c

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

Минимизировать 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 является набором данных (длинный массив), x содержит коэффициенты, ρ является параметром штрафа (увеличенный лагранжевый параметр), b является ответом (длинный массив), и S является мягким оператором пороговой обработки.

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

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

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

Ссылки

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

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

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