이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

lasso

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

설명

예제

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

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

디폴트 라소 피팅을 생성합니다.

B = lasso(X,y);

B의 25번째 Lambda 값에 대한 계수 벡터를 구합니다.

B(:,25)
ans = 5×1

         0
    1.6093
         0
   -2.5865
         0

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

레이블이 지정된 예측 변수에 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 array
    {'x2'}    {'x4'}

최소 MSE의 1 표준 오차 내에서 희소성이 가장 큰 모델의 변수를 표시합니다.

idxLambda1SE = FitInfo.Index1SE;
sparseModelPredictors = FitInfo.PredictorNames(B(:,idxLambda1SE)~=0)
sparseModelPredictors = 1x2 cell array
    {'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를 표시합니다. 파란색 원과 점선은 최소 교차 검증 오차에 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

입력 인수

모두 축소

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

데이터형: single | double

응답 변수 데이터로, 숫자형 벡터로 지정됩니다. y의 길이는 n이고, 여기서 n은 X의 행 개수입니다. 응답 변수 y(i)X의 i번째 행에 대응합니다.

데이터형: 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보다 작은 양만큼 차이가 나는 경우 수렴됩니다.

참고

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

예: 'AbsTol',1e–3

데이터형: single | double

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

예: 'Alpha',0.5

데이터형: single | double

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

참고

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

데이터형: single | double

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

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

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

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

예: 'CV',3

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

예: 'DFmax',5

데이터형: single | double

정규화 계수로, '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보다 커야 합니다.

예: '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는 정규화가 표준화된 스케일의 계수에 적용되는지, 아니면 원래 스케일의 계수에 적용되는지에 영향을 미칩니다. 결과는 항상 원래 데이터 스케일을 기반으로 표시됩니다.

Xy는 항상 중심화됩니다.

예: 'Standardize',false

데이터형: logical

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

참고

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

데이터형: single | double

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

데이터형: single | double

출력 인수

모두 축소

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

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

데이터형: single | double

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

FitInfo의 필드설명
Intercept각 선형 모델에 대한 절편 항 β0으로, 1xL 벡터임
Lambda오름차순으로 정렬된 람다 모수로, 1xL 벡터임
AlphaAlpha 모수의 값으로, 스칼라임
DFLambda의 각 값에 대해 B에 포함된 0이 아닌 계수의 개수로, 1xL 벡터임
MSE평균 제곱 오차(MSE)로, 1xL 벡터임
PredictorNamesPredictorNames 모수의 값으로, 문자형 벡터로 구성된 셀형 배열로 저장됨

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

FitInfo의 필드설명
SELambda에 대한 MSE의 표준 오차로, 교차 검증을 수행하는 동안 계산되며 1xL 벡터임
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이 아닌 성분의 개수가 줄어듭니다.

라소 문제는 신축망 알고리즘과 달리 β의 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인 경우 신축망과 라소가 같습니다. α의 다른 값에 대해서는 벌점 항 Pα(β)가 β의 L1 노름과 β의 L2 노름 제곱 사이를 보간합니다. α가 0쪽으로 줄어들수록 신축망 알고리즘은 ridge 회귀로 접근합니다.

알고리즘

모두 축소

ADMM 알고리즘

tall형 배열에 대한 연산을 수행할 때 lasso는 승수의 교번 방향 방법(ADMM: Alternating Direction Method of Multipliers) [5]을 기반으로 하는 알고리즘을 사용합니다. 여기에 사용되는 표기법은 참고 문헌에 사용된 것과 동일합니다. 이 방법은 다음 형식의 문제를 풉니다.

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

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

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

최소화: 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에 개발됨