Лассо или упругая сетевая регуляризация для линейных моделей
возвращает установленные коэффициенты регрессии методом наименьших квадратов для линейных моделей данных предиктора 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
Создайте подгонку lasso с помощью 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-кратной перекрестной валидацией. The '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'
и структуру. Для этой опции требуется 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'
и положительная скалярная величина. Алгоритм заканчивается, когда последовательные оценки вектора коэффициента различаются в 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 для каждой линейной модели 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 вектор |
LambdaMinMSE | Lambda значение с минимальным MSE, скаляром |
Lambda1SE | Самые большие Lambda значение такое, что MSE находится внутри одной стандартной ошибки минимального MSE, скаляра |
IndexMinMSE | Индекс Lambda со значением LambdaMinMSE , скаляр |
Index1SE | Индекс Lambda со значением Lambda1SE , скаляр |
Для заданного значения λ, неотрицательного параметра, lasso
решает задачу
N - количество наблюдений.
yi - это реакция на i наблюдения.
xi является данными, вектором длины p при i наблюдения.
λ является неотрицательным параметром регуляризации, соответствующим одному значению Lambda
.
Параметрами β 0 и β являются скаляр и вектор длины p, соответственно.
Когда λ увеличивается, количество ненулевых компонентов β уменьшается.
Задача lasso включает в себя L1 норма β, противопоставленная алгоритму упругой сети.
Для α строго между 0 и 1 и неотрицательной λ, упругая сеть решает задачу
где
Эластичная сеть такая же, как и лассо, когда α = 1. Для других значений α срок штрафа Pα (β) интерполируется между L1 норма β и квадратов L2 норма β. Когда α сжимается к 0, эластичная сеть приближается ridge
регрессия.
При работе с длинные массивы, lasso
использует алгоритм, основанный на Альтернативном Направлении Метода Умножителей (ADMM) [5]. Используемое здесь обозначение то же, что и в ссылку бумаге. Этот метод решает задачи вида
Минимизировать
При условии
Используя это обозначение, задача регрессии lasso является
Минимизировать
При условии
Потому что функция потерь является квадратичным, итерационные обновления, выполненные алгоритмом, равны решению линейной системы уравнений с одной матрицей коэффициентов, но с несколькими правыми сторонами. Обновления, выполненные алгоритмом во время каждой итерации,
A - набор данных (a длинного массива), x содержит коэффициенты, ρ - параметр штрафа (дополненный параметр Лагранжа), b - ответ (a длинного массива), и S - оператор мягкого порога.
lasso
решает линейную систему, используя факторизацию Холесского, потому что матрица коэффициентов симметричен и положительно определен. Поскольку не меняется между итерациями, факторизация Холесского кэшируется между итерациями.
Несмотря на то, что A и b являются длинные массивы, они появляются только в терминах и . Результаты этих двух матричных умножений достаточно малы, чтобы помещаться в памяти, поэтому они предварительно сжимаются, и итерационные обновления между итерациями выполняются полностью в памяти.
[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.
Эта функция поддерживает длинные массивы для данной , которой не помещаютси в память, с некоторыми ограничениями.
С длинные массивы, lasso
использует алгоритм, основанный на ADMM (Метод Переменного Направления Умножителей).
Нет упругой сетки поддержки. The 'Alpha'
параметр всегда равен 1.
Перекрестная валидация отсутствует ('CV'
параметр) поддержка, которая включает связанный параметр 'MCReps'
.
Область выхода FitInfo
не содержит дополнительных полей 'SE'
, 'LambdaMinMSE'
, 'Lambda1SE'
, 'IndexMinMSE'
, и 'Index1SE'
.
The '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.