Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

lasso

선형 모델에 대한 Lasso 또는 신축망(elastic net) 정규화

설명

예제

B = lasso(X,y)는 예측 변수 데이터 X와 응답 변수 y의 선형 모델에 대해 피팅된 최소제곱 회귀 계수를 반환합니다. B의 각 열은 Lambda의 특정 정규화 계수에 대응합니다. 기본적으로, lassoLambda 값으로 구성된 등비 수열을 사용하여 Lasso 정규화를 수행합니다.

예제

B = lasso(X,y,Name,Value)는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용하여 정규화된 회귀를 피팅합니다. 예를 들어, 'Alpha',0.5는 모수 Alpha를 0.5로 사용하여 신축망을 정규화 방법으로 설정합니다.

예제

[B,FitInfo] = lasso(___)는 위에 열거된 구문의 입력 인수를 사용하여 모델 피팅에 대한 정보를 포함하는 구조체 FitInfo도 반환합니다.

예제

모두 축소

중복된 예측 변수가 포함된 데이터 세트를 생성하고 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가 중복된 예측 변수를 식별하고 제거합니다.

예측 변수 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 object. The axes object contains 2 objects of type scatter, line.

중복된 예측 변수가 포함된 데이터 세트를 생성하고 교차 검증된 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는 두 모델에서 동일한 예측 변수를 식별하여 중복된 예측 변수를 제거합니다.

다양한 정규화 수준에 대해 교차 검증된 오차를 시각적으로 검토합니다.

표본 데이터를 불러옵니다.

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);

교차 검증된 피팅을 플로팅합니다. 녹색 원과 점선은 최소 교차 검증 오차를 갖는 Lambda를 표시합니다. 파란색 원과 점선은 최소 교차 검증 오차에 1 표준 오차를 더한 지점을 표시합니다.

lassoPlot(B,FitInfo,PlotType="CV");
legend("show")

Figure contains an axes object. The axes object with title Cross-Validated MSE of Lasso Fit, xlabel Lambda, ylabel MSE contains 5 objects of type errorbar, line. One or more of the lines displays its values using only markers These objects represent MSE with Error Bars, LambdaMinMSE, Lambda1SE.

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

Figure contains an axes object. The axes object with xlabel Actual Exam Grades, ylabel Predicted Exam Grades contains 2 objects of type scatter, line.

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

공분산 행렬을 사용하여 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.9569

공분산 행렬을 사용할 때의 피팅 시간이 공분산 행렬을 사용하지 않을 때의 시간보다 훨씬 적습니다. 공분산 행렬 사용으로 제공되는 속도 향상 인자를 확인합니다.

speedup = timefalse/timetrue
speedup = 9.3753

반환된 계수 BB2가 유사한지 확인합니다.

norm(B-B2)/norm(B)
ans = 2.6821e-15

결과가 거의 동일합니다.

입력 인수

모두 축소

예측 변수 데이터로, 숫자형 행렬로 지정됩니다. 각 행은 하나의 관측값을 나타내고, 각 열은 하나의 예측 변수를 나타냅니다.

데이터형: single | double

응답 변수 데이터로, 숫자형 벡터로 지정됩니다. 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 이름-값 쌍의 인수는 신축망 최적화에 사용되는 모수를 설정합니다.

ADMM 알고리즘의 수렴 여부를 결정하는 데 사용되는 절대 허용오차로, 'AbsTol'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 이 알고리즘은 계수 벡터의 연속된 추정값이 AbsTol보다 작은 양만큼 차이가 나는 경우 수렴됩니다.

참고

이 옵션은 tall형 배열에 lasso를 사용하는 경우에만 적용됩니다. 자세한 내용은 확장 기능 항목을 참조하십시오.

예: 'AbsTol',1e–3

데이터형: single | double

능형(L2) 최적화에 대한 Lasso(L1) 가중치로, 'Alpha'와 함께 구간 (0,1]의 양의 스칼라 값이 쉼표로 구분되어 지정됩니다. 값 Alpha = 1은 Lasso 회귀를 나타내고, Alpha0에 가까우면 능형 회귀에 가까워지며, 다른 값은 신축망 최적화를 나타냅니다. 신축망(Elastic Net) 항목을 참조하십시오.

예: 'Alpha',0.5

데이터형: single | double

ADMM 알고리즘에서 x 계수의 초기값으로, 'B0'과 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다.

참고

이 옵션은 tall형 배열에 lasso를 사용하는 경우에만 적용됩니다. 자세한 내용은 확장 기능 항목을 참조하십시오.

데이터형: single | double

메가바이트 단위의 공분산 행렬 크기로, 양의 스칼라 또는 'maximal'로 지정됩니다. lasso 함수는 UseCovariance 인수가 true 또는 'auto'인 경우 피팅에 공분산 행렬을 사용할 수 있습니다.

UseCovariancetrue 또는 'auto'이고 CacheSize'maximal'인 경우 lasso는 사용 가능한 메모리를 초과하는 공분산 행렬을 할당하려고 시도할 수 있습니다. 이 경우, MATLAB®에서 오류를 발생시킵니다.

예: 'CacheSize','maximal'

데이터형: double | char | string

평균 제곱 오차(MSE)를 추정하기 위한 교차 검증 사양으로, 'CV'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'resubstitution'lassoXy를 사용하여 모델을 피팅하고 MSE를 추정하며 교차 검증은 수행하지 않습니다.

  • 양의 정수 스칼라 KlassoK겹 교차 검증을 사용합니다.

  • cvpartition 객체 cvplassocvp로 나타낸 교차 검증 방법을 사용합니다. lasso에는 'leaveout' 분할 또는 사용자 지정 'holdout' 분할을 사용할 수 없습니다.

예: 'CV',3

모델에 포함된 0이 아닌 계수의 최대 개수로, 'DFmax'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. lasso는 이 기준을 충족하는 Lambda 값에 대해서만 결과를 반환합니다.

예: 'DFmax',5

데이터형: single | double

절편 항이 있는 모델을 피팅하기 위한 플래그로, 'Intercept'와 함께 true 또는 false가 쉼표로 구분되어 지정됩니다. 디폴트 값은 true이며, 이는 모델에 절편 항이 있음을 나타냅니다. Interceptfalse인 경우 반환되는 절편 값은 0입니다.

예: 'Intercept',false

데이터형: logical

정규화 계수로, 'Lambda'와 함께 음이 아닌 값으로 구성된 벡터가 쉼표로 구분되어 지정됩니다. Lasso 항목을 참조하십시오.

  • Lambda를 제공하지 않을 경우, lasso는 null이 아닌 모델을 제공하는 Lambda의 최댓값을 계산합니다. 이 경우, LambdaRatio는 수열의 최댓값에 대한 최솟값의 비율을 제공하고 NumLambda는 벡터의 길이를 제공합니다.

  • Lambda를 제공할 경우, lassoLambdaRatioNumLambda를 무시합니다.

  • Standardizetrue인 경우, Lambda는 평균이 0이고 분산이 1이 되도록 정규화된 X 데이터를 가지고 모델을 피팅하는 데 사용되는 값 세트입니다.

디폴트 값은 항의 개수가 NumLambda인 등비 수열이며, 최댓값만 B = 0을 생성할 수 있습니다.

예: 'Lambda',linspace(0,1)

데이터형: single | double

Lambda를 제공하지 않을 경우 Lambda 최댓값에 대한 최솟값의 비율로, 'LambdaRatio'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다.

LambdaRatio = 0을 설정할 경우, lassoLambda 값의 디폴트 수열을 생성하고 최솟값을 0으로 바꿉니다.

예: 'LambdaRatio',1e–2

데이터형: single | double

허용되는 최대 반복 횟수로, 'MaxIter'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

수렴 허용오차 RelTol에 도달하기 전에 알고리즘이 MaxIter회의 반복을 실행하는 경우 함수가 반복을 중지하고 경고 메시지를 반환합니다.

NumLambda1보다 클 경우 함수가 둘 이상의 경고를 반환할 수 있습니다.

디폴트 값은 표준 데이터의 경우 1e5이고 tall형 배열의 경우 1e4입니다.

예: 'MaxIter',1e3

데이터형: single | double

교차 검증에 사용할 몬테카를로(Monte Carlo) 반복 횟수로, 'MCReps'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

  • CV'resubstitution'이거나 'resubstitution' 유형의 cvpartition인 경우, MCReps1이어야 합니다.

  • CV'holdout' 유형의 cvpartition인 경우, MCReps1보다 커야 합니다.

  • CV'kfold' 유형의 사용자 지정 cvpartition인 경우, MCReps1이어야 합니다.

예: 'MCReps',5

데이터형: single | double

Lambda를 제공하지 않을 경우 lasso가 사용하는 Lambda 값의 개수로, 'NumLambda'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. lasso는 피팅의 잔차 오차(Residual Error)가 y의 분산에 대한 분계점 비율보다 낮은 경우 NumLambda보다 적은 수의 피팅을 반환할 수 있습니다.

예: 'NumLambda',50

데이터형: single | double

병렬로 교차 검증할지와 난수 스트림을 지정하는 옵션으로, 'Options'와 함께 구조체가 쉼표로 구분되어 지정됩니다. 병렬 연산을 사용하려면 Parallel Computing Toolbox™가 필요합니다.

statset을 사용하여 Options 구조체를 생성합니다. 옵션 필드는 다음과 같습니다.

  • UseParallel — 병렬로 계산하려면 true로 설정하십시오. 디폴트 값은 false입니다.

  • UseSubstreams — 재현 가능한 방식으로 병렬로 계산하려면 true로 설정하십시오. 재현이 가능하도록 하려면 Streams를 서브스트림을 허용하는 유형인 'mlfg6331_64' 또는 'mrg32k3a'로 설정하십시오. 디폴트 값은 false입니다.

  • StreamsRandStream 객체 또는 이러한 객체 하나로 구성된 셀형 배열입니다. Streams를 지정하지 않을 경우 lasso가 디폴트 스트림을 사용합니다.

예: 'Options',statset('UseParallel',true)

데이터형: struct

예측 변수의 이름으로, X에 나타나는 순서대로 'PredictorNames'와 함께 string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다.

예: 'PredictorNames',{'x1','x2','x3','x4'}

데이터형: string | cell

좌표 하강 알고리즘[3]에 대한 수렴 분계점으로, 'RelTol'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 이 알고리즘은 L2 노름에서 계수 벡터의 연속된 추정값이 RelTol보다 작은 상대적인 양만큼 차이가 나는 경우 종료됩니다.

예: 'RelTol',5e–3

데이터형: single | double

ADMM 알고리즘에 대한 확장 라그랑주 모수 ρ로, 'Rho'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 디폴트 값은 자동 선택입니다.

참고

이 옵션은 tall형 배열에 lasso를 사용하는 경우에만 적용됩니다. 자세한 내용은 확장 기능 항목을 참조하십시오.

예: 'Rho',2

데이터형: single | double

모델을 피팅하기 전에 예측 변수 데이터 X를 표준화하는 것을 나타내는 플래그로, 'Standardize'와 함께 true 또는 false가 쉼표로 구분되어 지정됩니다. Standardizetrue인 경우, X 데이터가 평균이 0이고 분산이 1이 되도록 스케일링됩니다. Standardize는 정규화가 표준화된 스케일의 계수에 적용되는지, 아니면 원래 스케일의 계수에 적용되는지에 영향을 미칩니다. 결과는 항상 원래 데이터 스케일을 기반으로 표시됩니다.

Interceptfalse인 경우 사용자가 지정하는 Standardize 값에 상관없이 Standardizefalse로 설정됩니다.

Intercepttrue인 경우 Xy는 항상 중심화됩니다.

예: 'Standardize',false

데이터형: logical

피팅에 공분산 행렬을 사용하는지 여부를 나타내는 표시로, 'auto' 또는 논리형 스칼라로 지정됩니다.

  • 'auto'로 지정되면 관측값 개수가 문제 변수 개수보다 클 경우 lasso가 피팅에 공분산 행렬을 사용하려고 시도합니다. 이러한 시도는 메모리가 부족할 경우 실패할 수 있습니다. lasso가 피팅에 공분산 행렬을 사용했는지 여부를 알아보려면 FitInfo 출력값의 UseCovariance 필드를 검토하십시오.

  • true로 지정된 경우 필요한 크기가 CacheSize를 초과하지만 않는다면 lasso가 피팅에 공분산 행렬을 사용합니다. 필요한 공분산 행렬 크기가 CacheSize를 초과할 경우 lasso는 경고를 발생시키고 피팅에 공분산 행렬을 사용하지 않습니다.

  • false로 지정된 경우 lasso가 피팅에 공분산 행렬을 사용하지 않습니다.

피팅에 공분산 행렬을 사용하면 공분산 행렬을 사용하지 않을 때보다 더 빠를 수 있지만 더 많은 메모리가 필요할 수 있습니다. Lasso 피팅을 위해 상관 행렬 사용하기 항목을 참조하십시오. 속도 향상은 수치적 안정성에 부정적인 영향을 줄 수 있습니다. 자세한 내용은 좌표 하강 알고리즘 항목을 참조하십시오.

예: 'UseCovariance',true

데이터형: logical | char | string

ADMM 알고리즘에서 스케일링된 쌍대 변수 u의 초기값으로, 'U0'과 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다.

참고

이 옵션은 tall형 배열에 lasso를 사용하는 경우에만 적용됩니다. 자세한 내용은 확장 기능 항목을 참조하십시오.

데이터형: single | double

관측값 가중치로, 'Weights'와 함께 음이 아닌 벡터가 쉼표로 구분되어 지정됩니다. Weights의 길이는 n이고, 여기서 n은 X의 행 개수입니다. lasso 함수는 합이 1이 되도록 Weights를 스케일링합니다.

데이터형: single | double

출력 인수

모두 축소

피팅된 계수로, 숫자형 행렬로 반환됩니다. B는 p×L 행렬입니다. 여기서 p는 X의 예측 변수(열) 개수이고, L은 Lambda 값의 개수입니다. NumLambda 이름-값 쌍의 인수를 사용하여 Lambda 값의 개수를 지정할 수 있습니다.

절편 항에 대응되는 계수는 FitInfo의 필드입니다.

데이터형: single | double

선형 모델의 피팅 정보로, 다음 표에 설명되어 있는 필드를 가진 구조체로 반환됩니다.

FitInfo의 필드설명
Intercept각 선형 모델에 대한 절편 항 β0으로, 1×L 벡터임
Lambda오름차순으로 정렬된 람다 모수로, 1×L 벡터임
AlphaAlpha 모수의 값으로, 스칼라임
DFLambda의 각 값에 대해 B에 포함된 0이 아닌 계수의 개수로, 1×L 벡터임
MSE평균 제곱 오차(MSE)로, 1×L 벡터임
PredictorNamesPredictorNames 모수의 값으로, 문자형 벡터로 구성된 셀형 배열로 저장됨
UseCovariance공분산 행렬이 피팅에 사용되었는지 여부를 나타내는 논리값임. 공분산이 계산되고 사용된 경우 이 필드의 값은 true입니다. 그렇지 않은 경우 이 필드의 값은 false입니다.

교차 검증할 CV 이름-값 쌍의 인수를 설정하는 경우 FitInfo 구조체는 다음과 같은 추가 필드를 포함합니다.

FitInfo의 필드설명
SELambda에 대한 MSE의 표준 오차로, 교차 검증을 수행하는 동안 계산되며 1×L 벡터임
LambdaMinMSE최소 MSE를 갖는 Lambda 값으로, 스칼라임
Lambda1SEMSE가 최소 MSE의 1 표준 오차 내에 있다는 조건을 충족하는 최대 Lambda 값으로, 스칼라임
IndexMinMSELambdaMinMSE 값을 갖는 Lambda의 인덱스로, 스칼라임
Index1SELambda1SE 값을 갖는 Lambda의 인덱스로, 스칼라임

세부 정보

모두 축소

Lasso

음이 아닌 주어진 모수 값 λ에 대해 lasso는 다음과 같은 문제를 풉니다.

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

  • N은 관측값 개수입니다.

  • yi는 관측값 i에서의 응답 변수입니다.

  • xi는 데이터로, 관측값 i에서 길이가 p인 벡터입니다.

  • λ는 Lambda 값 하나에 대응되는 음이 아닌 정규화 모수입니다.

  • 모수 β0과 β는 각각 스칼라 및 길이가 p인 벡터입니다.

λ가 증가할수록 β의 0이 아닌 성분의 개수가 줄어듭니다.

Lasso 문제는 신축망 알고리즘과 달리 β의 L1 노름을 포함합니다.

신축망(Elastic Net)

엄밀히 0에서 1 사이에 있는 α와 음이 아닌 λ에 대해 신축망 알고리즘은 다음과 같은 문제를 풉니다.

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

여기서

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

α = 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]을 기반으로 하는 알고리즘을 사용합니다. 여기에 사용되는 표기법은 참고 문헌에 사용된 것과 동일합니다. 이 방법은 다음 형식의 문제를 풉니다.

최소화: l(x)+g(z)

적용되는 조건: Ax+Bz=c

이 표기법을 사용한 Lasso 회귀 문제는 다음과 같습니다.

최소화: l(x)+g(z)=12Axb22+λz1

적용되는 조건: xz=0

손실 함수 l(x)=12Axb22이 2차이므로, 알고리즘에서 수행되는 반복 업데이트는 선형 연립방정식을 단일 계수 행렬과 여러 개의 우변을 사용하여 푸는 것과 같습니다. 각 반복 중에 알고리즘에서 수행되는 업데이트는 다음과 같습니다.

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

A는 데이터셋(tall형 배열)이고, x는 계수를 포함하고, ρ는 벌점 모수(확장 라그랑주 모수)이고, b는 응답 변수(tall형 배열)이며, S는 소프트 분계 연산자(soft thresholding operator)입니다.

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

계수 행렬 ATA+ρI가 양의 정부호 대칭 행렬이므로 lasso는 촐레스키 분해를 사용하여 선형 시스템을 풉니다. ρ는 반복 간에 변경되지 않으므로, 촐레스키 분해가 반복 간에 캐시됩니다.

A 및 b는 tall형 배열이더라도 항 ATAATb에만 나타납니다. 이 두 행렬 곱들의 결과값은 메모리에 담을 수 있을 정도로 작으므로, 이들이 미리 계산되고 각 반복 간에 수행되는 반복적 업데이트 작업이 전부 메모리 내에서 수행됩니다.

참고 문헌

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

확장 기능

버전 내역

R2011b에 개발됨