Ловите арканом или эластичная сетевая регуляризация для линейных моделей
возвращает адаптированные коэффициенты регрессии наименьших квадратов для линейных моделей данных о предикторе 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
и переменная отклика .
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 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
аргумент пары "имя-значение" устанавливает параметр, используемый в эластичной сетевой оптимизации.'AbsTol'
— Допуск абсолютной погрешности1e–4
(значение по умолчанию) | положительная скалярная величинаДопуск абсолютной погрешности раньше определял сходимость Алгоритма ADMM в виде разделенной запятой пары, состоящей из 'AbsTol'
и положительная скалярная величина. Алгоритм сходится, когда последовательные оценки вектора коэффициентов отличаются суммой меньше, чем AbsTol
.
Примечание
Эта опция применяется только, когда вы используете lasso
на длинных массивах. Смотрите Расширенные Возможности для получения дополнительной информации.
Пример: 'AbsTol',1e–3
Типы данных: single
| double
'Alpha'
— Вес лассо по сравнению с гребенчатой оптимизацией
(значение по умолчанию) | положительная скалярная величинаВес лассо (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
'Intercept'
— Отметьте для того, чтобы подбирать модель с термином точки пересеченияtrue
(значение по умолчанию) | false
Отметьте для того, чтобы подбирать модель с термином точки пересечения в виде разделенной запятой пары, состоящей из 'Intercept'
и любой true
или false
. Значением по умолчанию является true
, который указывает, чтобы включать член в модели точки пересечения. Если Intercept
false
, затем возвращенное значение точки пересечения 0.
Пример: 'Intercept',false
Типы данных: логический
'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'
— Отношение самых маленьких к самому большому 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'
— Количество повторений Монте-Карло для перекрестной проверки
(значение по умолчанию) | положительный целочисленный скалярКоличество повторений Монте-Карло для перекрестной проверки в виде разделенной запятой пары, состоящей из 'MCReps'
и положительный целочисленный скаляр.
Если CV
'resubstitution'
или cvpartition
из типа 'resubstitution'
, затем MCReps
должен быть 1
.
Если CV
cvpartition
из типа 'holdout'
, затем MCReps
должен быть больше 1
.
Пример: 'MCReps',5
Типы данных: single
| double
'NumLambda'
— Количество Lambda
значения
(значение по умолчанию) | положительный целочисленный скалярКоличество Lambda
значения lasso
использование, когда вы не предоставляете Lambda
В виде разделенной запятой пары, состоящей из 'NumLambda'
и положительный целочисленный скаляр. lasso
может возвратить меньше, чем NumLambda
подгонки, если остаточная ошибка подгонок опускается ниже пороговой части отклонения y
.
Пример: 'NumLambda',50
Типы данных: single
| double
'Options'
— Опция, чтобы перекрестный подтвердить параллельно и задать случайные потокиОпция, чтобы перекрестный подтвердить параллельно и задать случайные потоки в виде разделенной запятой пары, состоящей из '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
влияет, применяется ли регуляризация к коэффициентам по стандартизированной шкале или исходной шкале. Результаты всегда представляются по исходной шкале данных.
Если Intercept
false
, затем программное обеспечение устанавливает Standardize
к false
, независимо от Standardize
значение вы задаете.
X
и y
всегда сосредотачиваются когда Intercept
true
.
Пример: '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 - 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 вектор |
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. Значением по умолчанию является нулевой вектор.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Чтобы запуститься параллельно, задайте 'Options'
аргумент значения имени в вызове этой функции и набора 'UseParallel'
поле структуры опций к true
использование statset
.
Например: 'Options',statset('UseParallel',true)
Для получения дополнительной информации о параллельных вычислениях, смотрите функции MATLAB Запуска с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).
fitlm
| fitrlinear
| lassoglm
| lassoPlot
| ridge
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.