lasso
선형 모델에 대한 Lasso 또는 신축망(elastic net) 정규화
설명
는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용하여 정규화된 회귀를 피팅합니다. 예를 들어, B
= lasso(X
,y
,Name,Value
)'Alpha',0.5
는 모수 Alpha
를 0.5로 사용하여 신축망을 정규화 방법으로 설정합니다.
예제
Lasso 정규화를 사용하여 중복된 예측 변수 제거하기
중복된 예측 변수가 포함된 데이터 세트를 생성하고 lasso
를 사용하여 이러한 예측 변수를 식별합니다.
100개의 5차원 정규 변수로 구성된 행렬 X
를 생성합니다. X
의 성분 두 개에서 응답 변수 벡터 y
를 생성하고 소량의 잡음을 추가합니다.
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
디폴트 Lasso 피팅을 생성합니다.
B = lasso(X,y);
B
의 25번째 Lambda
값에 대한 계수 벡터를 구합니다.
B(:,25)
ans = 5×1
0
1.6093
0
-2.5865
0
lasso
가 중복된 예측 변수를 식별하고 제거합니다.
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
를 사용하여 이러한 예측 변수를 식별합니다.
100개의 5차원 정규 변수로 구성된 행렬 X
를 생성합니다. X
의 성분 두 개에서 응답 변수 벡터 y
를 생성하고 소량의 잡음을 추가합니다.
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겹 교차 검증을 사용하여 Lasso 피팅을 생성합니다.
[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의 1 표준 오차 내에서 희소성이 가장 큰 모델의 변수를 표시합니다.
idxLambda1SE = FitInfo.Index1SE; sparseModelPredictors = FitInfo.PredictorNames(B(:,idxLambda1SE)~=0)
sparseModelPredictors = 1x2 cell
{'x2'} {'x4'}
이 예제에서, lasso
는 두 모델에서 동일한 예측 변수를 식별하여 중복된 예측 변수를 제거합니다.
교차 검증된 피팅을 사용한 Lasso 플롯
다양한 정규화 수준에 대해 교차 검증된 오차를 시각적으로 검토합니다.
표본 데이터를 불러옵니다.
load acetylene
상호 작용이 포함되고 상수항이 없는 설계 행렬을 생성합니다.
X = [x1 x2 x3]; D = x2fx(X,'interaction'); D(:,1) = []; % No constant term
10겹 교차 검증을 사용하여 Lasso 피팅을 생성합니다. 결과를 플로팅할 수 있도록 FitInfo
출력값을 포함시킵니다.
rng default % For reproducibility [B,FitInfo] = lasso(D,y,'CV',10);
교차 검증된 피팅을 플로팅합니다.
lassoPlot(B,FitInfo,'PlotType','CV'); legend('show') % Show legend
녹색 원과 점선은 최소 교차 검증 오차를 갖는 Lambda
를 표시합니다. 파란색 원과 점선은 최소 교차 검증 오차에 1 표준 오차를 더한 지점을 표시합니다.
신축망 정규화를 사용하여 값 예측하기
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). 평균 제곱 오차(MSE)가 최소 MSE의 1 표준 오차 내에 있다는 조건을 충족하는 최대 Lambda
값을 사용합니다.
[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
Lasso 피팅을 위해 상관 행렬 사용하기
N
개의 p
차원 정규 변수로 구성된 행렬 X
를 생성합니다. 여기서 N
은 큰 값이며 p
= 1000입니다. 모델 y = beta0 + X*p
에서 응답 변수 벡터 y
를 생성합니다. 여기서 beta0
은 가산성 잡음이 있는 상수입니다.
rng default % For reproducibility N = 1e4; % Number of samples p = 1e3; % Number of features X = randn(N,p); beta = randn(p,1); % Multiplicative coefficients beta0 = randn; % Additive term y = beta0 + X*beta + randn(N,1); % Last term is noise
디폴트 Lasso 피팅을 생성합니다. 생성 시간을 측정합니다.
B = lasso(X,y,"UseCovariance",false); % Warm up lasso for reliable timing data tic B = lasso(X,y,"UseCovariance",false); timefalse = toc
timefalse = 8.7492
공분산 행렬을 사용하여 Lasso 피팅을 생성합니다. 생성 시간을 측정합니다.
B2 = lasso(X,y,"UseCovariance",true); % Warm up lasso for reliable timing data tic B2 = lasso(X,y,"UseCovariance",true); timetrue = toc
timetrue = 0.6485
공분산 행렬을 사용할 때의 피팅 시간이 공분산 행렬을 사용하지 않을 때의 시간보다 훨씬 적습니다. 공분산 행렬 사용으로 제공되는 속도 향상 인자를 확인합니다.
speedup = timefalse/timetrue
speedup = 13.4910
반환된 계수 B
및 B2
가 유사한지 확인합니다.
norm(B-B2)/norm(B)
ans = 2.7471e-15
결과가 거의 동일합니다.
입력 인수
X
— 예측 변수 데이터
숫자형 행렬
예측 변수 데이터로, 숫자형 행렬로 지정됩니다. 각 행은 하나의 관측값을 나타내고, 각 열은 하나의 예측 변수를 나타냅니다.
데이터형: single
| double
y
— 응답 변수 데이터
숫자형 벡터
응답 변수 데이터로, 숫자형 벡터로 지정됩니다. y
의 길이는 n이고, 여기서 n은 X
의 행 개수입니다. 응답 변수 y(i)
는 X
의 i번째 행에 대응합니다.
데이터형: single
| double
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: lasso(X,y,'Alpha',0.75,'CV',10)
은 신축망 정규화를 10겹 교차 검증을 사용하여 수행합니다. 'Alpha',0.75
이름-값 쌍의 인수는 신축망 최적화에 사용되는 모수를 설정합니다.
Alpha
— 능형 최적화(ridge optimization)에 대한 Lasso 가중치
1
(디폴트 값) | 양의 스칼라
능형(L2) 최적화에 대한 Lasso(L1) 가중치로, 'Alpha'
와 함께 구간 (0,1]
의 양의 스칼라 값이 쉼표로 구분되어 지정됩니다. 값 Alpha = 1
은 Lasso 회귀를 나타내고, Alpha
가 0
에 가까우면 능형 회귀에 가까워지며, 다른 값은 신축망 최적화를 나타냅니다. 신축망(Elastic Net) 항목을 참조하십시오.
예: 'Alpha',0.5
데이터형: single
| double
CacheSize
— 메가바이트 단위의 공분산 행렬 크기
1000
(디폴트 값) | 양의 스칼라 | 'maximal'
메가바이트 단위의 공분산 행렬 크기로, 양의 스칼라 또는 'maximal'
로 지정됩니다. lasso
함수는 UseCovariance
인수가 true
또는 'auto'
인 경우 피팅에 공분산 행렬을 사용할 수 있습니다.
UseCovariance
가 true
또는 'auto'
이고 CacheSize
가 'maximal'
인 경우 lasso
는 사용 가능한 메모리를 초과하는 공분산 행렬을 할당하려고 시도할 수 있습니다. 이 경우, MATLAB®에서 오류를 발생시킵니다.
예: 'CacheSize','maximal'
데이터형: double
| char
| string
CV
— 평균 제곱 오차를 추정하기 위한 교차 검증 사양
'resubstitution'
(디폴트 값) | 양의 정수 스칼라 | cvpartition
객체
평균 제곱 오차(MSE)를 추정하기 위한 교차 검증 사양으로, 'CV'
와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
'resubstitution'
—lasso
가X
와y
를 사용하여 모델을 피팅하고 MSE를 추정하며 교차 검증은 수행하지 않습니다.양의 정수 스칼라
K
—lasso
가K
겹 교차 검증을 사용합니다.cvpartition
객체cvp
—lasso
가cvp
로 나타낸 교차 검증 방법을 사용합니다.lasso
에는'leaveout'
분할을 사용할 수 없습니다.
예: 'CV',3
DFmax
— 0이 아닌 계수의 최대 개수
Inf
(디폴트 값) | 양의 정수 스칼라
모델에 포함된 0이 아닌 계수의 최대 개수로, 'DFmax'
와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. lasso
는 이 기준을 충족하는 Lambda
값에 대해서만 결과를 반환합니다.
예: 'DFmax',5
데이터형: single
| double
Intercept
— 절편 항이 있는 모델을 피팅하기 위한 플래그
true
(디폴트 값) | false
절편 항이 있는 모델을 피팅하기 위한 플래그로, 'Intercept'
와 함께 true
또는 false
가 쉼표로 구분되어 지정됩니다. 디폴트 값은 true
이며, 이는 모델에 절편 항이 있음을 나타냅니다. Intercept
가 false
인 경우 반환되는 절편 값은 0입니다.
예: 'Intercept',false
데이터형: logical
Lambda
— 정규화 계수
음이 아닌 벡터
정규화 계수로, 'Lambda'
와 함께 음이 아닌 값으로 구성된 벡터가 쉼표로 구분되어 지정됩니다. Lasso 항목을 참조하십시오.
Lambda
를 제공하지 않을 경우,lasso
는 null이 아닌 모델을 제공하는Lambda
의 최댓값을 계산합니다. 이 경우,LambdaRatio
는 수열의 최댓값에 대한 최솟값의 비율을 제공하고NumLambda
는 벡터의 길이를 제공합니다.Lambda
를 제공할 경우,lasso
는LambdaRatio
및NumLambda
를 무시합니다.Standardize
가true
인 경우,Lambda
는 평균이 0이고 분산이 1이 되도록 정규화된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
— 허용되는 최대 반복 횟수
양의 정수 스칼라
MCReps
— 교차 검증에 사용할 몬테카를로 반복 횟수
1
(디폴트 값) | 양의 정수 스칼라
교차 검증에 사용할 몬테카를로(Monte Carlo) 반복 횟수로, 'MCReps'
와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.
CV
가'resubstitution'
이거나'resubstitution'
유형의cvpartition
인 경우,MCReps
가1
이어야 합니다.CV
가'holdout'
유형의cvpartition
인 경우,MCReps
가1
보다 커야 합니다.
예: 'MCReps',5
데이터형: single
| double
Options
— 병렬로 교차 검증할지와 난수 스트림을 지정하는 옵션
구조체
병렬로 교차 검증할지와 난수 스트림을 지정하는 옵션으로, 'Options'
와 함께 구조체가 쉼표로 구분되어 지정됩니다. 병렬 연산을 사용하려면 Parallel Computing Toolbox™가 필요합니다.
statset
을 사용하여 Options
구조체를 생성합니다. 옵션 필드는 다음과 같습니다.
UseParallel
— 병렬로 계산하려면true
로 설정하십시오. 디폴트 값은false
입니다.UseSubstreams
— 재현 가능한 방식으로 병렬로 계산하려면true
로 설정하십시오. 재현이 가능하도록 하려면Streams
를 서브스트림을 허용하는 유형인'mlfg6331_64'
또는'mrg32k3a'
로 설정하십시오. 디폴트 값은false
입니다.Streams
—RandStream
객체 또는 이러한 객체 하나로 구성된 셀형 배열입니다.Streams
를 지정하지 않을 경우lasso
가 디폴트 스트림을 사용합니다.
예: 'Options',statset('UseParallel',true)
데이터형: struct
PredictorNames
— 예측 변수의 이름
{}
(디폴트 값) | string형 배열 | 문자형 벡터로 구성된 셀형 배열
예측 변수의 이름으로, X
에 나타나는 순서대로 'PredictorNames'
와 함께 string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.
예: 'PredictorNames',{'x1','x2','x3','x4'}
데이터형: string
| cell
RelTol
— 좌표 하강 알고리즘에 대한 수렴 분계점
1e–4
(디폴트 값) | 양의 스칼라
좌표 하강 알고리즘[3]에 대한 수렴 분계점으로, 'RelTol'
과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 이 알고리즘은 L2 노름에서 계수 벡터의 연속된 추정값이 RelTol
보다 작은 상대적인 양만큼 차이가 나는 경우 종료됩니다.
예: 'RelTol',5e–3
데이터형: single
| double
Standardize
— 모델을 피팅하기 전에 예측 변수 데이터를 표준화하는 것을 나타내는 플래그
true
(디폴트 값) | false
모델을 피팅하기 전에 예측 변수 데이터 X
를 표준화하는 것을 나타내는 플래그로, 'Standardize'
와 함께 true
또는 false
가 쉼표로 구분되어 지정됩니다. Standardize
가 true
인 경우, X
데이터가 평균이 0이고 분산이 1이 되도록 스케일링됩니다. Standardize
는 정규화가 표준화된 스케일의 계수에 적용되는지, 아니면 원래 스케일의 계수에 적용되는지에 영향을 미칩니다. 결과는 항상 원래 데이터 스케일을 기반으로 표시됩니다.
Intercept
가 false
인 경우 사용자가 지정하는 Standardize
값에 상관없이 Standardize
가 false
로 설정됩니다.
Intercept
가 true
인 경우 X
와 y
는 항상 중심화됩니다.
예: 'Standardize',false
데이터형: logical
UseCovariance
— 피팅에 공분산 행렬을 사용하는지 여부를 나타내는 표시
'auto'
(디폴트 값) | 논리형 스칼라
피팅에 공분산 행렬을 사용하는지 여부를 나타내는 표시로, 'auto'
또는 논리형 스칼라로 지정됩니다.
'auto'
로 지정되면 관측값 개수가 문제 변수 개수보다 클 경우lasso
가 피팅에 공분산 행렬을 사용하려고 시도합니다. 이러한 시도는 메모리가 부족할 경우 실패할 수 있습니다.lasso
가 피팅에 공분산 행렬을 사용했는지 여부를 알아보려면FitInfo
출력값의UseCovariance
필드를 검토하십시오.true
로 지정된 경우 필요한 크기가CacheSize
를 초과하지만 않는다면lasso
가 피팅에 공분산 행렬을 사용합니다. 필요한 공분산 행렬 크기가CacheSize
를 초과할 경우lasso
는 경고를 발생시키고 피팅에 공분산 행렬을 사용하지 않습니다.false
로 지정된 경우lasso
가 피팅에 공분산 행렬을 사용하지 않습니다.
피팅에 공분산 행렬을 사용하면 공분산 행렬을 사용하지 않을 때보다 더 빠를 수 있지만 더 많은 메모리가 필요할 수 있습니다. Lasso 피팅을 위해 상관 행렬 사용하기 항목을 참조하십시오. 속도 향상은 수치적 안정성에 부정적인 영향을 줄 수 있습니다. 자세한 내용은 좌표 하강 알고리즘 항목을 참조하십시오.
예: 'UseCovariance',true
데이터형: logical
| char
| string
Weights
— 관측값 가중치
1/n*ones(n,1)
(디폴트 값) | 음이 아닌 벡터
관측값 가중치로, 'Weights'
와 함께 음이 아닌 벡터가 쉼표로 구분되어 지정됩니다. Weights
의 길이는 n이고, 여기서 n은 X
의 행 개수입니다. lasso
함수는 합이 1
이 되도록 Weights
를 스케일링합니다.
데이터형: single
| double
출력 인수
FitInfo
— 모델의 피팅 정보
구조체
선형 모델의 피팅 정보로, 다음 표에 설명되어 있는 필드를 가진 구조체로 반환됩니다.
FitInfo 의 필드 | 설명 |
---|---|
Intercept | 각 선형 모델에 대한 절편 항 β0으로, 1 ×L 벡터임 |
Lambda | 오름차순으로 정렬된 람다 모수로, 1 ×L 벡터임 |
Alpha | Alpha 모수의 값으로, 스칼라임 |
DF | Lambda 의 각 값에 대해 B 에 포함된 0이 아닌 계수의 개수로, 1 ×L 벡터임 |
MSE | 평균 제곱 오차(MSE)로, 1 ×L 벡터임 |
PredictorNames | PredictorNames 모수의 값으로, 문자형 벡터로 구성된 셀형 배열로 저장됨 |
UseCovariance | 공분산 행렬이 피팅에 사용되었는지 여부를 나타내는 논리값임. 공분산이 계산되고 사용된 경우 이 필드의 값은 true 입니다. 그렇지 않은 경우 이 필드의 값은 false 입니다. |
교차 검증할 CV
이름-값 쌍의 인수를 설정하는 경우 FitInfo
구조체는 다음과 같은 추가 필드를 포함합니다.
FitInfo 의 필드 | 설명 |
---|---|
SE | 각 Lambda 에 대한 MSE의 표준 오차로, 교차 검증을 수행하는 동안 계산되며 1 ×L 벡터임 |
LambdaMinMSE | 최소 MSE를 갖는 Lambda 값으로, 스칼라임 |
Lambda1SE | MSE가 최소 MSE의 1 표준 오차 내에 있다는 조건을 충족하는 최대 Lambda 값으로, 스칼라임 |
IndexMinMSE | LambdaMinMSE 값을 갖는 Lambda 의 인덱스로, 스칼라임 |
Index1SE | Lambda1SE 값을 갖는 Lambda 의 인덱스로, 스칼라임 |
세부 정보
Lasso
음이 아닌 주어진 모수 값 λ에 대해 lasso
는 다음과 같은 문제를 풉니다.
N은 관측값 개수입니다.
yi는 관측값 i에서의 응답 변수입니다.
xi는 데이터로, 관측값 i에서 길이가 p인 벡터입니다.
λ는
Lambda
값 하나에 대응되는 음이 아닌 정규화 모수입니다.모수 β0과 β는 각각 스칼라 및 길이가 p인 벡터입니다.
λ가 증가할수록 β의 0이 아닌 성분의 개수가 줄어듭니다.
Lasso 문제는 신축망 알고리즘과 달리 β의 L1 노름을 포함합니다.
신축망(Elastic Net)
엄밀히 0에서 1 사이에 있는 α와 음이 아닌 λ에 대해 신축망 알고리즘은 다음과 같은 문제를 풉니다.
여기서
α = 1인 경우 신축망과 Lasso가 같습니다. α의 다른 값에 대해서는 벌점 항 Pα(β)가 β의 L1 노름과 β의 L2 노름 제곱 사이를 보간합니다. α가 0쪽으로 줄어들수록 신축망 알고리즘은 ridge
회귀로 접근합니다.
알고리즘
좌표 하강 알고리즘
lasso
는 Friedman, Tibshirani, Hastie [3]에 근거하여, 좌표 하강이라는 효율적 과정을 통해 λ의 많은 값을 동시에 피팅합니다. 이 과정은 피팅에 공분산 행렬이 사용되는지 여부에 따라 두 개의 주요 코드를 가집니다. UseCovariance
이름-값 인수를 사용하여 이 선택에 영향을 미칠 수 있습니다.
lasso
가 공분산 행렬을 사용하여 N
개 데이터 점과 D
개 예측 변수를 피팅하는 경우 피팅은 대략적으로 D*D
의 계산적 복잡도를 가집니다. 공분산 행렬을 사용하지 않는 경우 계산적 복잡도는 대략적으로 N*D
입니다. 따라서 일반적으로 N > D
인 경우 공분산 행렬을 사용하는 것이 더 빠를 수 있으며, UseCovariance
인수의 디폴트 'auto'
설정에서는 이 방법이 선택됩니다. 공분산 행렬을 사용하면 그렇지 않을 때보다 lasso
가 더 큰 숫자를 빼기 때문에 수치적 안정성이 떨어질 수 있습니다. 알고리즘 차이에 대한 자세한 내용은 [3] 항목을 참조하십시오. 타이밍 차이와 정확도 차이에 대한 비교는 Lasso 피팅을 위해 상관 행렬 사용하기 항목을 참조하십시오.
ADMM 알고리즘
tall형 배열에 대한 연산을 수행할 때 lasso
는 승수의 교번 방향 방법(ADMM: Alternating Direction Method of Multipliers) [5]을 기반으로 하는 알고리즘을 사용합니다. 여기에 사용되는 표기법은 참고 문헌에 사용된 것과 동일합니다. 이 방법은 다음 형식의 문제를 풉니다.
최소화:
적용되는 조건:
이 표기법을 사용한 Lasso 회귀 문제는 다음과 같습니다.
최소화:
적용되는 조건:
손실 함수 이 2차이므로, 알고리즘에서 수행되는 반복 업데이트는 선형 연립방정식을 단일 계수 행렬과 여러 개의 우변을 사용하여 푸는 것과 같습니다. 각 반복 중에 알고리즘에서 수행되는 업데이트는 다음과 같습니다.
A는 데이터셋(tall형 배열)이고, x는 계수를 포함하고, ρ는 벌점 모수(확장 라그랑주 모수)이고, b는 응답 변수(tall형 배열)이며, S는 소프트 분계 연산자(soft thresholding operator)입니다.
계수 행렬 가 양의 정부호 대칭 행렬이므로 lasso
는 촐레스키 분해를 사용하여 선형 시스템을 풉니다. 는 반복 간에 변경되지 않으므로, 촐레스키 분해가 반복 간에 캐시됩니다.
A 및 b는 tall형 배열이더라도 항 및 에만 나타납니다. 이 두 행렬 곱들의 결과값은 메모리에 담을 수 있을 정도로 작으므로, 이들이 미리 계산되고 각 반복 간에 수행되는 반복적 업데이트 작업이 전부 메모리 내에서 수행됩니다.
참고 문헌
[1] Tibshirani, R. “Regression Shrinkage and Selection via the Lasso.” Journal of the Royal Statistical Society. Series B, Vol. 58, No. 1, 1996, pp. 267–288.
[2] Zou, H., and T. Hastie. “Regularization and Variable Selection via the Elastic Net.” Journal of the Royal Statistical Society. Series B, Vol. 67, No. 2, 2005, pp. 301–320.
[3] Friedman, J., R. Tibshirani, and T. Hastie. “Regularization Paths for Generalized Linear Models via Coordinate Descent.” Journal of Statistical Software. Vol. 33, No. 1, 2010. https://www.jstatsoft.org/v33/i01
[4] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning. 2nd edition. New York: Springer, 2008.
[5] Boyd, S. “Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers.” Foundations and Trends in Machine Learning. Vol. 3, No. 1, 2010, pp. 1–122.
확장 기능
tall형 배열
메모리에 담을 수 없을 정도로 많은 행을 가진 배열을 계산할 수 있습니다.
이 함수는 메모리에 담을 수 없는 데이터에 대한 tall형 배열을 지원하지만 다음과 같은 몇 가지 제한 사항이 있습니다.
tall형 배열에서는
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에 대한 초기값입니다. 디폴트 값은 0으로 구성된 벡터입니다.'U0'
— 스케일링된 쌍대 변수(Dual Variable) u의 초기값입니다. 디폴트 값은 0으로 구성된 벡터입니다.
자세한 내용은 tall형 배열 항목을 참조하십시오.
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
병렬로 실행하려면 이 함수에 대한 호출에 Options
이름-값 인수를 지정하고 statset
을 사용하여 options 구조체의 UseParallel
필드를 true
로 설정하십시오.
"Options",statset("UseParallel",true)
병렬 연산에 대한 자세한 내용은 자동 병렬 연산을 지원하는 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2011b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)