능선 회귀는 높은 차원에서 쓸모가 없습니까 ( )? OLS가 어떻게 과적 합에 실패 할 수 있습니까?


50

예측 변수 및 표본 크기 과 함께 좋은 오래된 회귀 문제를 고려하십시오 . 일반적인 지혜는 OLS 추정기가 능선 회귀 추정기에 의해 초과 적합하고 일반적으로 능가한다는 것입니다.최적의 정규화 매개 변수 를 찾기 위해 교차 유효성 검사를 사용하는 것이 표준 입니다. 여기에서는 10 배 CV를 사용합니다. 설명 업데이트 : 일 때 "OLS 추정기"에 의해 의해 주어진 "최소 규범 OLS 추정기"를 이해합니다pβ = ( X X + λ I ) - 1 X Y . λ N < P β OLS = ( X X ) + X Y = X + Y .n

β^=(XX+λI)1Xy.
λn<p
β^OLS=(XX)+Xy=X+y.

및 데이터 세트가 있습니다. 모든 예측 변수는 표준화되어 있으며 를 예측하는 데 (독립적) 좋은 일을 할 수있는 사람이 꽤 있습니다 . I이 경우 임의로 작은 틱을 선택 말할 의 큰 값 : 예측기의 수, I는 합리적인 CV 곡선을 얻을 수율 제로 R 제곱 작은 값 수율 제외 R 제곱 (때문에 과잉 적합) 사이에 최대 값이 있습니다. 들면 곡선 비슷. 그러나 그보다 훨씬 큰 , 예를 들어 경우 최대 값을 얻지 못합니다. 곡선 고원은 OLS가p > 1000 y p = 50 < n λ λ p = 100 > n p p = 1000 λ 0 λn=80p>1000yp=50<nλλp=100>npp=1000λ0 은 최적의 하여 능선 회귀만큼 우수합니다 .λ

여기에 이미지 설명을 입력하십시오

어떻게 가능하며 내 데이터 세트에 대해 무엇을 말합니까? 내가 명백한 것을 놓치고 있거나 실제로 반 직관적입니까? 방법 사이의 질적 차이가있을 수 및 모두보다 큰 주어진 ?p = 1000 np=100p=1000n

대한 최소 규격 OLS 솔루션은 어떤 조건에서 과적 합 하지 않습니까?n<p


업데이트 : 의견에 약간의 불신이 있었으므로 여기를 사용하여 재현 가능한 예가 glmnet있습니다. Python을 사용하지만 R 사용자는 코드를 쉽게 적용 할 수 있습니다.

%matplotlib notebook

import numpy as np
import pylab as plt
import seaborn as sns; sns.set()

import glmnet_python    # from https://web.stanford.edu/~hastie/glmnet_python/
from cvglmnet import cvglmnet; from cvglmnetPlot import cvglmnetPlot

# 80x1112 data table; first column is y, rest is X. All variables are standardized
mydata = np.loadtxt('../q328630.txt')   # file is here https://pastebin.com/raw/p1cCCYBR
y = mydata[:,:1]
X = mydata[:,1:]

# select p here (try 1000 and 100)
p = 1000

# randomly selecting p variables out of 1111
np.random.seed(42)
X = X[:, np.random.permutation(X.shape[1])[:p]]

fit = cvglmnet(x = X.copy(), y = y.copy(), alpha = 0, standardize = False, intr = False, 
               lambdau=np.array([.0001, .001, .01, .1, 1, 10, 100, 1000, 10000, 100000]))
cvglmnetPlot(fit)
plt.gcf().set_size_inches(6,3)
plt.tight_layout()

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


2
@DJohnson 농담이 없습니다. 일반적인 10 배 CV는 각 훈련 세트에 n = 72가 있고 각 테스트 세트에 n = 8이 있음을 의미합니다.
amoeba는

2
그것은 일반적인 CV 와는 거리가 멀다 . 어떻게 감지 가능한 결과와 같은 것을 기대할 수 있습니까?
Mike Hunter

3
@ DJohnson 왜 이것이 평소와 거리가 멀다는 것을 이해하지 못합니다. 이것이 10 배 CV입니다.
amoeba는

2
@ seanv507 알겠습니다. 글쎄, 나는 "lamda = 0의 솔루션"을 "lamda = 0의 최소 표준 솔루션"으로 정의 할 것을 제안한다. 내 질문은 다음과 같이 재구성 될 수 있다고 생각합니다 : 어떤 조건에서 n <p 초과 적합 대 초과 적합이 아닌 최소 표준 OLS 솔루션은 무엇입니까?
아메바 씨는 Reinstate Monica가

3
@amoeba :이 질문에 감사합니다. 그것은 지금까지 매우 유익하고 흥미로웠다.
usεr11852는 Reinstate Monic이

답변:


23

의 이론적 PCA에 많은 작은 성분이 존재하기 때문에 자연스럽게 정규화 됩니다. 이 작은 구성 요소는 작은 계수를 사용하여 잡음을 맞추기 위해 암시 적으로 사용됩니다. 최소 표준 OLS를 사용하는 경우 많은 작은 독립 구성 요소에 노이즈를 적용하면 Ridge 정규화와 동등한 정규화 효과가 있습니다. 이 정규화는 종종 너무 강력하며 음의 Ridge 로 알려진 "비정규 화"를 사용하여이를 보완 할 수 있습니다 . 이 경우 음수 값에 대해 최소 MSE 곡선이 나타납니다 .λxλ

이론적 인 PCA의 의미는 다음과 같습니다.

를 다변량 정규 분포로 하자 . 와 같은 선형 등방성 가 있습니다. 여기서 는 대각선입니다 : 의 성분 은 독립적입니다. 는 단순히 를 대각선으로하여 얻습니다 .f u = f ( x ) N ( 0 , D ) D u D ΣxN(0,Σ)fu=f(x)N(0,D)DuDΣ

이제 모델을 으로 쓸 수 있습니다 (선형 등거리 변환은 내적을 유지합니다). 사용자가 작성하면 모델이 작성 될 수 . 또한릿지 또는 최소 규범 OLS 등에 따라서 피팅 방법 완벽 동형 : 추정기의 함으로써 이미지 의 추정기 .y=β.x+ϵy=f(β).f(x)+ϵγ=f(β)y=γ.u+ϵY = γ . u + ϵ f y = β . x + ϵβ=γy=γ.u+ϵfy=β.x+ϵ

이론적 PCA는 비 독립 예측 변수를 독립 예측 변수로 변환합니다. 경험적 공분산 행렬을 사용하는 경험적 PCA와는 거의 관련이 없습니다 (샘플 크기가 작은 이론적 인 것과는 크게 다름). 이론적 PCA는 실제로 계산할 수 없지만 직교 예측 공간에서 모형을 해석하는 데에만 사용됩니다.

모델에 많은 작은 분산 독립 예측 변수를 추가하면 어떻게되는지 봅시다 :

정리

계수 사용한 릿지 정규화 는 다음과 같습니다 ( ).p λp

  • 분산 가진 가짜 독립 예측 변수 (중앙 및 동일 분포) 추가λpλp
  • 최소 표준 OLS 추정기로 풍부한 모델 피팅
  • 실제 예측 변수에 대한 모수 만 유지

(스케치) 증명

우리는 비용 함수가 점진적으로 같다는 것을 증명할 것입니다. 모형을 실제 예측 변수와 가짜 예측 변수 . Ridge의 비용 함수 (실제 예측 변수의 경우)는 다음과 같이 작성할 수 있습니다.y=βx+βx+ϵ

costλ=β2+1λyXβ2

최소 표준 OLS를 사용하는 경우 응답이 완벽하게 맞춰집니다. 오류 항은 0입니다. 비용 함수는 매개 변수의 표준에 불과합니다. 실제 매개 변수와 가짜 매개 변수로 나눌 수 있습니다.

costλ,p=β2+inf{β2Xβ=yXβ}

올바른 표현에서 최소 표준 솔루션은 다음과 같습니다.

β=X+(yXβ)

이제 SVD를 사용하십시오 .X

X=UΣV

X+=VΣ+U

우리의 규범 것을 볼 본질적으로의 특이 값에 따라 달라집니다 의 특이 값의 역수이다 . 의 정규화 된 버전 은 입니다. 나는 문학을 보았고 큰 랜덤 행렬의 특이 값은 잘 알려져 있습니다. 들면 및 만큼 큰 최소 및 최대 특이 값에 의해 근사화된다 (참조 정리 1.1 ) :βX+XXp/λXpnsminsmax

smin(p/λX)p(1n/p)
smax(p/λX)p(1+n/p)

큰 경우 는 0을 향하는 경향이 있으므로 모든 특이 값이 의해 근사된다고 말할 수 있습니다 . 그러므로:pn/pp

β1λyXβ

드디어:

costλ,pβ2+1λyXβ2=costλ

참고 : 모형에 가짜 예측 변수의 계수를 유지하더라도 중요하지 않습니다. 의해 도입 된 분산 은 . 따라서 만큼만 MSE를 늘리면 어쨌든 1쪽으로 향합니다. 어떻게 든 가짜 예측 변수를 실제 예측 변수와 다르게 취급 할 필요는 없습니다.βxλpβ21pyXβ2npMSE(β)1+n/p

이제 @amoeba의 데이터로 돌아갑니다. 이론적 PCA를 적용한 후 (정상이라고 가정), 는 선형 등거리 변환법에 의해 변수 로 변이되며 성분 이 독립적 이며 분산 순서가 감소합니다. 문제 은 변환 된 문제 .xxuy=βx+ϵy=γu+ϵ

이제 컴포넌트의 분산이 다음과 같다고 상상해보십시오.

여기에 이미지 설명을 입력하십시오

마지막 성분의 많은 를 고려 하여 분산의 합을 합니다. 이들은 각각 와 거의 같은 분산을 가지며 독립적입니다. 그것들은 정리에서 가짜 예측 자의 역할을합니다.pλλ/p

이 사실은 @jonny의 모델에서 더 분명합니다. 이론적 PCA의 첫 번째 구성 요소 만 상관 관계 가 있으며 (비례 적 ) 큰 차이가 있습니다. 다른 모든 구성 요소 ( 비례 )는 분산이 비교적 매우 작으며 (공분산 행렬을 작성하고 대각선으로 표시하여) 예측 변수의 역할을합니다. 여기서 정규화 는 이전 에 하는 반면 실제 해당 . 이것은 분명히 너무 축소됩니다. 이것은 최종 MSE가 이상적인 MSE보다 훨씬 크다는 사실로 볼 수 있습니다. 정규화 효과가 너무 강합니다.yx¯xix¯N(0,1p2)γ1γ12=1p

Ridge에 의해이 자연스러운 정규화를 향상시키는 것이 때때로 가능합니다. 먼저 당신이 때때로 필요 (1000 만 ...) 정말 큰 정리에 심각하게 경쟁 리지와의 유한성 부정확 같다. 그러나 Ridge는 자연적으로 존재하는 암시 적 정규화에 대한 추가 정규화이므로 매우 작은 영향을 줄 수 있습니다. 때때로이 자연적인 정규화는 이미 너무 강하고 릿지는 개선되지 않을 수도 있습니다. 이보다 더 큰, 안티 규칙 화를 사용하는 것이 좋습니다 : 음수 계수가있는 릿지. 이것은 사용하여 @jonny의 모델 ( )에 대한 MSE를 보여줍니다 .ppp=1000λR

여기에 이미지 설명을 입력하십시오


2
+1 매우 감사합니다. 작성해 주셔서 감사합니다. "정규화"라고 할 때 (즉, 융기) 정규화 를 의미한다는 것을 명확히하는 것이 중요하다고 생각합니다 . 올가미 또는 탄력있는 그물이 더 잘 작동하고 실제로 사람들이 상황 에서 사용하는 것이기를 바랍니다 . 그러한 환경에서 순수한 융선을 사용하는 사람은 없으며 표준 충고는 희소성을 적용하는 정규화를 사용하는 것입니다. 순수한 능선의 행동은 학문적 관심을 가질 수 있습니다. 아직도, 우리가 여기서 그것을 발견하고있는 것은 놀랍습니다. 왜 이것이 잘 알려지지 않았습니까? L2np
amoeba는

1
하드 코딩 된 는 비례합니다 . 적절한 시간을 갖지 못해서 죄송합니다. 나의 주요 초점은 min-norm OLS의 행동에 달려 있는데, 그것은 당신의 예와 다르고 40 번째의 "너무 나쁘지 않은 정규화"가 심하게 나아 졌다는 것을 알았습니다. λσ2
Benoit Sanchez

3
계수 릿지 정규화 : 나는 비밀을 이해라고 생각 추가 OLS - 노옴 분인 상당 가짜 예측을 분산 각 (점근 큰 대 ). 귀하의 데이터와 Johny 모델에서 PCA의 가장 낮은 분산 구성 요소 덕분에 아무런 작업도 수행하지 않습니다. 이제 이것을 명확하게 설명 할 방법을 찾아야합니다.λpλ/pp
Benoit Sanchez

1
나는 작은 점을 분명히했다 : 가짜 예측 변수의 계수는 오류를 크게 증가시키지 않습니다 (증거 끝의 참고 참조). 귀하의 데이터 / jonny의 데이터는 필연적으로 유지되기 때문에 중요합니다.
Benoit Sanchez

3
나는 부정적인 Ridge를 시도했다. 믿을 수 없지만 작동합니다 !!! (그리고 Jonny의 모델뿐만 아니라 ...)
Benoit Sanchez

16

큰 지속적인 토론에 감사드립니다. 문제의 핵심은 최소 표준 OLS가 능선 회귀와 유사한 수축을 효과적으로 수행하는 것 같습니다 . 이것은 때마다 발생하는 것 같습니다 . 아이러니하게도, 순수한 노이즈 예측기를 추가 하는 것은 매우 이상한 형태 나 정규화로 사용될 수도 있습니다.pn


1 부. 인공 데이터 및 분석적 이력서 데모

@Jonny (+1)는 여기에 약간 적응할 수있는 간단한 인공 예제를 생각해 냈습니다. 의 크기와 모든 변수는 단위 분산으로 가우스이되도록 생성되고, 각각의 예측 및 반응과 상관있다 . 고칠 것 입니다.Xn×pyρρ=.2

제곱 오차에 대한 분석식이 있으므로 Leave-one-out CV를 사용합니다. "예측 제곱합" PRESS 라고합니다. 여기서 는 잔차 이고 는 모자 행렬 SVD 입니다. 이를 통해 실제로 교차 유효성 검사를 수행하지 않고 수행하지 않고 @Jonny의 결과를 복제 할 수 있습니다 (PRESS의 비율과 의 제곱의 합을 플로팅합니다 ).

PRESS=i(ei1Hii)2,
ei
e=yy^=yHy,
H
H=X(XX+λI)1X=US2S2+λU
X=USVglmnety

여기에 이미지 설명을 입력하십시오

이 분석 방법을 사용하면 에서 한계를 계산할 수 있습니다 . 을 PRESS 수식에 연결하는 것만 으로는 작동하지 않습니다. 및 일 때 잔차는 모두 0이고 모자 행렬은 대각선에 1을 갖는 항등 행렬이므로 PRESS의 분수는 방정식이 정의되지 않았습니다. 그러나 에서 한계를 계산하면 최소 노름 OLS 솔루션에 해당합니다 .λ0λ=0n<pλ=0λ0λ=0

트릭은 : 때 모자 행렬의 Taylor 확장을 수행하는 것입니다 . 여기 그램 행렬 .λ0

H=U11+λ/S2UU(1λ/S2)U=IλUS2U=IλG1.
G=XX=US2U

거의 다 끝났습니다 :Lambda가 취소되었으므로 여기에 제한 값이 있습니다. 위의 그림 ( 패널)에 큰 검은 점으로 표시했으며 완벽하게 일치합니다.

PRESS=i(λ[G1y]iλGii1)2=i([G1y]iGii1)2.
p>n

2 월 21 일 업데이트. 위 공식은 정확하지만 추가 근사를 수행하면 통찰력을 얻을 수 있습니다. 가 매우 다른 값을 갖 더라도 은 대각선에서 대략 같은 값을 갖는 것처럼 보입니다 (아마 가 모든 고유 값을 잘 혼합하기 때문일 것입니다 ). 그래서 각 우리가 그 각도 브래킷 평균을 나타낸다. 이 근사를 사용하여 다음과 같이 다시 작성할 수 있습니다.이 근사값은 위의 그림에서 빨간색 원으로 표시되어 있습니다.G1SUiGii1S2

PRESSS2S2Uy2.

이것이 보다 크거나 작을 지 여부 는 특이 값 에 따라 달라집니다 . 이 시뮬레이션에서 는 의 첫 번째 PC와 상관 관계가 있으므로 는 크고 다른 모든 항은 작습니다. (실제 데이터에서 는 주요 PC에 의해 잘 예측됩니다.) 이제 경우 의 열 이 충분히 무작위이면 모든 특이 값이 서로 가깝습니다 (약 직교). "주"용어y2=Uy2SyXU1yypnXU1y1보다 작은 인수를 곱합니다. 끝을 향한 항에는 1보다 크지 만 크지 않은 인수가 곱해집니다. 전반적으로 표준이 감소합니다. 반대로 경우 매우 작은 특이 값이 있습니다. 반전 후 그들은 전체 규범을 증가시키는 큰 요인이 될 것입니다.pn

[이 주장은 매우 손을 많이 wav니다. 더 정확하게 만들 수 있기를 바랍니다.]

온전한 검사로, 단일 값의 순서를 바꾸면 S = diag(flipud(diag(S)));예측 MSE는 두 번째 및 세 번째 패널의 모든 곳에서 이상 입니다.1

figure('Position', [100 100 1000 300])
ps = [10, 100, 1000];

for pnum = 1:length(ps)
    rng(42)
    n = 80;
    p = ps(pnum);
    rho = .2;
    y = randn(n,1);
    X = repmat(y, [1 p])*rho + randn(n,p)*sqrt(1-rho^2);

    lambdas = exp(-10:.1:20);
    press = zeros(size(lambdas));
    [U,S,V] = svd(X, 'econ');
    % S = diag(flipud(diag(S)));   % sanity check

    for i = 1:length(lambdas)
        H = U * diag(diag(S).^2./(diag(S).^2 + lambdas(i))) * U';
        e = y - H*y;
        press(i) = sum((e ./ (1-diag(H))).^2);
    end

    subplot(1, length(ps), pnum)
    plot(log(lambdas), press/sum(y.^2))
    hold on
    title(['p = ' num2str(p)])
    plot(xlim, [1 1], 'k--')

    if p > n
        Ginv = U * diag(diag(S).^-2) * U';
        press0 = sum((Ginv*y ./ diag(Ginv)).^2);
        plot(log(lambdas(1)), press0/sum(y.^2), 'ko', 'MarkerFaceColor', [0,0,0]);

        press0approx = sum((diag(diag(S).^-2/mean(diag(S).^-2)) * U' * y).^2);
        plot(log(lambdas(1)), press0approx/sum(y.^2), 'ro');
    end
end

파트 II. 정규화 형태로 순수한 노이즈 예측기 추가

@Jonny, @Benoit, @Paul, @Dikran 및 기타 사람들은 예측 변수의 수가 증가하면 최소 표준 OLS 솔루션이 줄어들 것이라는 좋은 주장을했습니다. 실제로 이면 새로운 예측 변수는 최소 표준 솔루션의 표준 만 줄일 수 있습니다. 따라서 예측 변수를 추가하면 능형 회귀 분석이 표준에 불이익을주는 방식과 다소 유사한 표준이 적용됩니다.p>n

이것이 정규화 전략으로 사용될 수 있습니까? 우리는 시작 및 후 계속 추가 정규화 시도로 순수 소음 예측을. LOOCV를 수행하고 능선의 LOOCV와 비교합니다 (위와 같이 계산). 예측 변수 에서 를 얻은 후에 는 원래 예측 변수에만 관심이 있기 때문에 에서 "잘라 내고"있습니다 .n=80p=40qβ^p+qp

여기에 이미지 설명을 입력하십시오

효과가있다!!!

실제로 베타를 "잘라낼"필요는 없습니다. 전체 베타 및 전체 예측 변수를 사용하더라도 우수한 성능을 얻을 수 있습니다 (오른쪽 하위 플롯의 점선). 이것은 문제의 실제 데이터를 모방한다고 생각합니다. 예측자가 진정으로 예측 하고 대부분이 순수한 잡음이며 정규화 역할을합니다. 이 체제에서 추가 융기 정규화는 전혀 도움이되지 않습니다.p+qy

rng(42)
n = 80;
p = 40;
rho = .2;
y = randn(n,1);
X = repmat(y, [1 p])*rho + randn(n,p)*sqrt(1-rho^2);

lambdas = exp(-10:.1:20);
press = zeros(size(lambdas));
[U,S,V] = svd(X, 'econ');

for i = 1:length(lambdas)
    H = U * diag(diag(S).^2./(diag(S).^2 + lambdas(i))) * U';
    e = y - H*y;
    press(i) = sum((e ./ (1-diag(H))).^2);
end

figure('Position', [100 100 1000 300])
subplot(121)
plot(log(lambdas), press/sum(y.^2))
hold on
xlabel('Ridge penalty (log)')
plot(xlim, [1 1], 'k--')
title('Ridge regression (n=80, p=40)')
ylim([0 2])

ps = [0 20 40 60 80 100 200 300 400 500 1000];
error = zeros(n, length(ps));
error_trunc = zeros(n, length(ps));
for fold = 1:n
    indtrain = setdiff(1:n, fold);
    for pi = 1:length(ps)
        XX = [X randn(n,ps(pi))];
        if size(XX,2) < size(XX,1)
            beta = XX(indtrain,:) \ y(indtrain,:);
        else
            beta = pinv(XX(indtrain,:)) * y(indtrain,:);
        end
        error(fold, pi) = y(fold) - XX(fold,:) * beta;
        error_trunc(fold, pi) = y(fold) - XX(fold,1:size(X,2)) * beta(1:size(X,2));
    end
end

subplot(122)
hold on
plot(ps, sum(error.^2)/sum(y.^2), 'k.--')
plot(ps, sum(error_trunc.^2)/sum(y.^2), '.-')
legend({'Entire beta', 'Truncated beta'}, 'AutoUpdate','off')
legend boxoff
xlabel('Number of extra predictors')
title('Extra pure noise predictors')
plot(xlim, [1 1], 'k--')
ylim([0 2])

@MartijnWeterings이 실험에서는 n = 80과 p = 40으로 시작합니다. 총 예측 변수 수 (p + q)가 n = 80에 가까워 질수록 문제가 잘못되고 OLS 솔루션이 과도하게 적합합니다. q = 40 주위의 오류에서 막대한 피크가 있습니다. p + q> n이 되 자마자 "최소-노름"구속 조건이 시작되고 오류가 감소하기 시작하지만 q = 0 인 곳으로 되돌아 갈 때까지 시간이 걸립니다. 그것은 q = 70, 즉 p + q = 130 주위에서 발생합니다. 그 후에는 오차가 더욱 줄어들고이 부분은 능선 회귀 도와 유사합니다. 말이 되나요?
아메바는 11

@MartijnWeterings 첫 번째 의견 : 우리는 같은 페이지에 있습니다. 두 번째 의견 : 내 질문에 베타를 자르지 않고 있습니다. 맞습니다. 그러나 실제로 시뮬레이션에서 베타를 자르지 않으면 ( y(fold) - XX(fold,:) * beta대신 사용 XX(fold,1:size(X,2)) * beta(1:size(X,2))) 결과가 너무 많이 변경되지 않습니다. 나는 이것을 내 대답에 추가해야한다고 생각한다. 내 원래의 데이터는 이런 종류의 행동을 보여줍니다.
amoeba는

(1/2) : 나는 여전히 모든 주석과 코드를 통해 이해하려고 노력하고 있지만 생각은 나에게 일어난다. 우리가 관찰하고있는이 현상과 능선 회귀와 랜덤 효과 사이의 관계가 있는가?
Ryan Simmons

(2/2) : Randel 's answer here ( stats.stackexchange.com/questions/122062/… )에서 랜덤 효과와 능선 회귀 사이의 추정치가 보이며 람다는 잔차 대 분산의 잔차 비율과 같습니다. 무작위 효과. Benoit Sanchez의 답변에 따르면, 능선 회귀는 각각 람다 함수 및 매개 변수 수와 동일한 분산을 갖는 임의의 수의 가짜 독립 예측 변수를 추가하는 것과 같습니다. 개념적인 관계가있는 것 같습니다.
Ryan Simmons

@amoeba 실수였습니다. 스케일링 된 벡터 y를 행렬 X에 추가하는 것은 릿지 회귀 또는 노이즈 벡터와 다소 같지 않지만 정규화됩니다. 그러나 모든 변수가 y 벡터와 약간 음의 상관 관계를 갖도록 (또는 덜 양의) 각 x에서 약간의 를 빼면 어떤 일이 발생하는지 궁금합니다 . 이것은 '네거티브'정규화를 수행하기위한 것입니다. 1000 벡터의 정규화를 '실행 취소'하기 위해 피크 / 최적화 정규화 계수가 이제 거의 범위를 벗어난 것처럼 볼 때 너무 많아 질 수 있습니다. y
Sextus Empiricus

15

이것이 발생하는 인공 상황입니다. 각 예측 변수가 많은 가우스 잡음이 적용된 목표 변수의 복사본이라고 가정합니다. 최선의 모형은 모든 예측 변수의 평균입니다.

library(glmnet)
set.seed(1846)
noise <- 10
N <- 80
num.vars <- 100
target <- runif(N,-1,1)
training.data <- matrix(nrow = N, ncol = num.vars)
for(i in 1:num.vars){
  training.data[,i] <- target + rnorm(N,0,noise)
}
plot(cv.glmnet(training.data, target, alpha = 0,
               lambda = exp(seq(-10, 10, by = 0.1))))

예측 변수가 100 개인 다양한 람다에 대한 MSE

100 개의 변수는 "정상적인"방식으로 동작합니다. 람다의 일부 양수 값은 샘플 오류를 최소화합니다.

그러나 위 코드에서 num.vars를 1000으로 늘리면 새로운 MSE 경로가 있습니다. (나는 자신을 확신시키기 위해 log (Lambda) = -100으로 확장했다.

1000 개의 예측 변수가있는 다양한 람다에 대한 MSE

내가 생각하는 것

낮은 정규화로 많은 매개 변수를 피팅 할 때 계수는 높은 분산으로 실제 값 주위에 무작위로 분포됩니다.

예측 변수의 수가 매우 커질수록 "평균 오차"는 0으로 향하는 경향이 있으며, 계수가 가능한 위치로 떨어지고 모든 것을 합산하는 것보다 0으로 편향시키는 것보다 낫습니다.

나는 모든 예측 자들의 평균이되는 진정한 예측의 상황이 이것이 일어날 유일한 시간은 아니라고 확신하지만, 여기서 가장 필요한 조건을 정확히 찾아내는 방법을 모른다.

편집하다:

솔루션이 최소 표준 OLS 솔루션으로 수렴되므로 매우 낮은 람다에 대한 "평평한"동작이 항상 발생합니다. 마찬가지로 솔루션이 0으로 수렴함에 따라 곡선은 매우 높은 람다에 대해 평평합니다. 두 솔루션 중 하나가 최적이면 최소값이 없습니다.

이 경우 최소 표준 OLS 솔루션이 왜 그렇게 (비교적으로) 좋은가? 나는 그것이 매우 반 직관적 인 것으로 판명 된 다음 행동과 관련이 있다고 생각하지만, 반성에 대해서는 많은 의미가 있습니다.

max.beta.random <- function(num.vars){
  num.vars <- round(num.vars)
  set.seed(1846)
  noise <- 10
  N <- 80
  target <- runif(N,-1,1)
  training.data <- matrix(nrow = N, ncol = num.vars)

  for(i in 1:num.vars){
    training.data[,i] <- rnorm(N,0,noise)
  }
  udv <- svd(training.data)

  U <- udv$u
  S <- diag(udv$d)
  V <- udv$v

  beta.hat <- V %*% solve(S) %*% t(U) %*% target

  max(abs(beta.hat))
}


curve(Vectorize(max.beta.random)(x), from = 10, to = 1000, n = 50,
      xlab = "Number of Predictors", y = "Max Magnitude of Coefficients")

abline(v = 80)

예측 변수 수가 증가함에 따라 계수의 최대 크기 플롯

반응과 관련이없는 무작위로 생성 된 예측 변수를 사용하면 p가 커지면 계수가 커지지 만 p가 N보다 훨씬 크면 0으로 줄어 듭니다. 이것은 또한 내 예에서 발생합니다. 매우 느슨하게도, 이러한 문제에 대한 비정규 화 된 솔루션은 이미 매우 작기 때문에 축소 할 필요가 없습니다!

이것은 사소한 이유로 발생합니다. 는 열의 선형 조합으로 정확하게 표현 될 수 있습니다 . 는 계수의 최소 노름 벡터입니다. 더 많은 열이 추가됨에 따라 의 표준은 감소하거나 일정하게 유지되어야합니다. 가능한 선형 조합은 이전 계수를 동일하게 유지하고 새 계수를 설정하기 때문 입니다.yXβ^β^0


1
(+1). 따라서이 현상은 예측 변수가 상관 될 때 발생하는 것으로 보입니다. 공식적으로 오차 곡선이 양의 대한 최소값을 갖지 않는다는 의미는 아니며 , 0에서의 한계가 크지 않다는 것도 아닙니다. 그것은 곡선이 평평 해지는 경향이 있고 정규화가 작동을 멈추기 위해 얼마나 작은 있어야 하는가에 대한 임계 값 이 큰 대해 0을 향한다는 것을 의미합니다 . 이 임계 값은 계산 한계를 넘어서지 만 Firebug의 대답은 항상 존재할 수 있다고 제안합니다. λλp
Benoit Sanchez

1
glmnet업데이트에 왜 필요한 가요? 최소 표준 OLS 솔루션 만 필요한 경우 직접 수식이 있습니다 (제 질문의 두 번째 수식 참조) SVD를 계산하면 이 수식은 단순히 . R에는이 솔루션을 계산하는 함수가있을 수 있지만 실제로는 R을 모른다.X=USVβ^=VS1Uy
amoeba는 Reinstate Monica가

2
그것에 대해 더 생각하면 전혀 놀라운 일이 아닙니다. 는 에서 벡터의 선형 조합으로 정확하게 표현 될 수 있습니다 . 는 규범이 가장 작은 계수로 구성된 벡터입니다. 벡터를 추가 할 때 기존 계수를 동일하게 유지하고 새 계수를 0으로 설정할 수 있으므로 의 표준은 줄이거 나 같은 크기를 유지해야합니다. yXβ^β^
Jonny Lomond

3
Jonny의 예제는 이미 분석 되었기 때문에 좋은 예입니다 . James-Stein 추정기를 참조하십시오 . 차원이 3 이상인 고정 벡터 의 평균을 추정 할 때 , 능선 회귀가 수행하는 것과 거의 비슷하게 0을 향해 편향하여 단순 평균화를 항상 개선 할 수 있습니다. 이 경우 개선이 너무 미미한지 궁금합니다. θ
Paul

3
능선 회귀는 한 피처에 값이 있고 다른 곳에서는 0이며 모든 해당 반응이 0 인 데이터 샘플에 개의 "가짜"샘플 을 추가하는 것과 같습니다 . (이 형식으로 RR 비용 함수를 다시 작성하는 것은 사소한 일입니다.) 이제 비슷한 효과를 줄 수있는 추가 기능 (예 : 순수한 노이즈?) 을 추가 할 수있는 방법이 있는지 궁금합니다 . 물론 추가 기능을 추가한다는 것은 가 차원을 증가 시키지만 "원래"예측 변수의 값만 볼 수 있음을 의미합니다 . @Paulpλβ^
amoeba는 Reinstate Monica가

6

그래서 mlrR 의 특수 패키지를 사용하여 중첩 교차 검증을 실행하여 실제로 모델링 방식에서 오는 것이 무엇인지 확인하기로 결정했습니다 .

코드 (일반 노트북에서 실행하는 데 몇 분이 소요됨)

library(mlr)
daf = read.csv("https://pastebin.com/raw/p1cCCYBR", sep = " ", header = FALSE)

tsk = list(
  tsk1110 = makeRegrTask(id = "tsk1110", data = daf, target = colnames(daf)[1]),
  tsk500 = makeRegrTask(id = "tsk500", data = daf[, c(1,sample(ncol(daf)-1, 500)+1)], target = colnames(daf)[1]),
  tsk100 = makeRegrTask(id = "tsk100", data = daf[, c(1,sample(ncol(daf)-1, 100)+1)], target = colnames(daf)[1]),
  tsk50 = makeRegrTask(id = "tsk50", data = daf[, c(1,sample(ncol(daf)-1, 50)+1)], target = colnames(daf)[1]),
  tsk10 = makeRegrTask(id = "tsk10", data = daf[, c(1,sample(ncol(daf)-1, 10)+1)], target = colnames(daf)[1])
)

rdesc = makeResampleDesc("CV", iters = 10)
msrs = list(mse, rsq)
configureMlr(on.par.without.desc = "quiet")
bm3 = benchmark(learners = list(
    makeLearner("regr.cvglmnet", alpha = 0, lambda = c(0, exp(seq(-10, 10, length.out = 150))),
    makeLearner("regr.glmnet", alpha = 0, lambda = c(0, exp(seq(-10, 10, length.out = 150))), s = 151)
    ), tasks = tsk, resamplings = rdesc, measures = msrs)

결과

getBMRAggrPerformances(bm3, as.df = TRUE)
#   task.id    learner.id mse.test.mean rsq.test.mean
#1    tsk10 regr.cvglmnet     1.0308055  -0.224534550
#2    tsk10   regr.glmnet     1.3685799  -0.669473387
#3   tsk100 regr.cvglmnet     0.7996823   0.031731316
#4   tsk100   regr.glmnet     1.3092522  -0.656879104
#5  tsk1110 regr.cvglmnet     0.8236786   0.009315037
#6  tsk1110   regr.glmnet     0.6866745   0.117540454
#7    tsk50 regr.cvglmnet     1.0348319  -0.188568886
#8    tsk50   regr.glmnet     2.5468091  -2.423461744
#9   tsk500 regr.cvglmnet     0.7210185   0.173851634
#10  tsk500   regr.glmnet     0.6171841   0.296530437

기본적으로 모든 작업에서 동일합니다.

그렇다면 최적의 람다는 어떻습니까?

sapply(lapply(getBMRModels(bm3, task.ids = "tsk1110")[[1]][[1]], "[[", 2), "[[", "lambda.min")
# [1] 4.539993e-05 4.539993e-05 2.442908e-01 1.398738e+00 4.539993e-05
# [6] 0.000000e+00 4.539993e-05 3.195187e-01 2.793841e-01 4.539993e-05

람다는 이미 변형되어 있습니다. 일부 접기는 최소 람다 .λ=0

나는 조금 더 삐걱 거리고 glmnet최소한의 람다가 선택되지 않았다는 것을 발견했다. 검사:

편집하다:

amoeba의 의견을 수렴 한 후 정규화 경로가 glmnet추정 에서 중요한 단계라는 것이 명확 해 졌으므로 이제 코드가이를 반영합니다. 이러한 방식으로 대부분의 불일치가 사라졌습니다.

cvfit = cv.glmnet(x = x, y = y, alpha = 0, lambda = exp(seq(-10, 10, length.out = 150)))
plot(cvfit)

여기에 이미지 설명을 입력하십시오

결론

따라서 기본적으로 실제로 적합을 향상시킵니다 ( 편집 : 그러나 많이는 아닙니다! ).λ>0

어떻게 가능하며 내 데이터 세트에 대해 무엇을 말합니까? 내가 명백한 것을 놓치고 있거나 실제로 반 직관적입니까?

데이터 설정 의 실제 분포 가 0보다 작은 작은 값에 가깝습니다 . 그래도 반 직관적이지 않습니다.λ

편집 : 릿지 정규화 경로는 호출 할 때 이전 매개 변수 추정치를 사용 glmnet하지만 이것은 내 전문 지식을 벗어납니다. 실제로 lambda격리 수준을 낮게 설정 하면 성능이 저하 될 수 있습니다.

편집 : 람다 선택은 데이터에 대해 더 많은 것을 말하고 있습니다. 큰 람다는 성능을 저하, 그것은, 우선이 의미 즉, 큰 람다가 0에 가까워 모든 계수를 축소로, 모델의 계수가 큰. 비록 모델의 유효 자유도는 자유의 명백한도보다 작은 것을 의미한다 .λ0p

둘 다 n보다 크면 p = 100과 p = 1000 사이에 어떻게 질적 차이가있을 수 있습니까?

p=1000 항상 동일하거나 보다 큰 정보를 포함 합니다.p=100


코멘트

0이 아닌 람다 (나는 당신의 그림을보고있다)에 대해 최소값을 얻는 것처럼 보이지만 곡선은 실제로 실제로 왼쪽에 평평합니다. λ → 0이 눈에 띄게 과도하게 맞지 않는 이유에 대한 나의 주요 질문은 남아 있습니다. 여기에 아직 답변이 없습니다. 이것이 일반적인 현상이라고 생각하십니까? 즉, n≪p 인 데이터의 경우 lambda = 0은 최적의 lambda만큼 [거의] 우수한 성능을 발휘합니까? 아니면이 데이터에 특별한 것이 있습니까? 위의 의견을 살펴보면 많은 사람들이 그것이 가능하다는 것을 믿지조차 않았 음을 알 수 있습니다.

유효성 검사 성능을 테스트 성능과 조화시키고 있다고 생각하며 그러한 비교는 보증되지 않습니다.

편집 : lambda전체 정규화 경로를 실행 한 후 0으로 설정 하면 성능이 저하되지 않으므로 정규화 경로가 진행 상황을 이해하는 데 중요합니다!

또한, 나는 당신의 마지막 행을 이해하지 못합니다. p = 100에 대한 cv.glmnet 출력을보십시오. 모양이 매우 다릅니다. p = 100 또는 p = 1000 일 때이 모양 (왼쪽의 점근선과 점근선 없음)에 어떤 영향을 미칩니 까?

두 가지에 대한 정규화 경로를 비교해 보겠습니다.

fit1000 = glmnet(x, y, alpha = 0, lambda = exp(seq(-10,10, length.out = 1001)))
fit100 = glmnet(x[, sample(1000, 100)], y, alpha = 0, lambda = exp(seq(-10,10, length.out = 1001)))
plot(fit1000, "lambda")

여기에 이미지 설명을 입력하십시오

x11()
plot(fit100, "lambda")

여기에 이미지 설명을 입력하십시오

은 두 플롯의 왼쪽에있는 무증상 -OLS 능선에 대한 계수가 더 작더라도 증가시 더 큰 계수를 제공 한다는 것이 분명해집니다 . 따라서 기본적으로 은 그래프의 왼쪽에 과적 합되며 이는 아마도 그 동작의 차이를 설명합니다.p=1000λp=100

Ridge가 계수를 0으로 축소하더라도 계수가 0에 도달하지 않기 때문에 이 과적 합하기 가 더 어렵습니다 . 이는 모델의 예측력이 더 많은 구성 요소간에 공유되므로 잡음에 의해 전달되지 않고 평균을보다 쉽게 ​​예측할 수 있음을 의미합니다.p=1000


+1이 실험을 해주셔서 감사합니다! 0이 아닌 람다 (나는 당신의 그림을보고있다)에 대해 최소값을 얻는 것처럼 보이지만 곡선은 실제로 실제로 왼쪽에 평평합니다. 따라서 이 눈에 띄게 과도하게 적합하지 않은 이유에 대한 내 주요 질문은 남아 있습니다 . 여기에 아직 답변이 없습니다. 이것이 일반적인 현상이라고 생각하십니까? 즉 , 인 데이터의 경우 lambda = 0은 최적의 lambda만큼 [거의] 우수한 성능을 발휘합니까? 아니면이 데이터에 특별한 것이 있습니까? 위의 의견을 살펴보면 많은 사람들이 그것이 가능하다는 것을 믿지조차 않았 음을 알 수 있습니다. λ0np
amoeba는 Reinstate Monica가

또한, 나는 당신의 마지막 행을 이해하지 못합니다. cv.glmnetp = 100 의 출력을 보십시오 . 모양이 매우 다릅니다. p = 100 또는 p = 1000 일 때이 모양 (왼쪽의 점근선과 점근선 없음)에 어떤 영향을 미칩니 까?
amoeba는 Reinstate Monica가

당신은 알고 있나요 mlr선택 lambda.min또는 lambda.1se합니다 (의 cv.glmnet용어)을?
amoeba는

@amoeba lambda.min. 도 있습니다 regr.cvglmnet아마 하나가 다른 규칙을 선택할 수 있습니다 학습자.
Firebug

감사. 솔직히 말해서 1e-100 벤치 마크의 결과를 이해하지 못합니다. 예를 들어 p = 1100의 경우 MSE = 1.45가됩니다. 그러나 내부 루프에는 하이퍼 파라미터 튜닝이 없으므로 기본적으로 내부 CV 루프가 전혀 필요하지 않습니다. 람다 = 1e-100에서 중첩되지 않은 CV와 결과가 같아야 함을 의미합니다. 그러나 우리는 첫 번째 수치에서 MSE가 약 0.7임을 알 수 있습니다. 이해가되지 않습니다.
amoeba는 Reinstate Monica가

5

(최소 규범) OLS가 어떻게 초과 적합하지 않을 수 있습니까?

한마디로 :

실제 모델의 (알 수없는) 파라미터와 상관되는 실험 파라미터는 최소 표준 OLS 피팅 절차에서 높은 값으로 추정 될 가능성이 높습니다. 이는 'model + noise'에 맞고 다른 매개 변수는 'noise'에만 맞기 때문입니다 (따라서 더 낮은 계수 값으로 모델의 더 큰 부분에 맞고 높은 값을 가질 가능성이 높습니다) 최소 표준 OLS에서).

이 효과는 최소 표준 OLS 피팅 절차에서 과적 합의 양을 줄입니다. 더 많은 매개 변수를 사용할 수있는 경우 효과가 더 두드러지며, 그 결과 '참 모델'의 더 많은 부분이 추정에 통합 될 가능성이 높아집니다.

더 긴 부분 :
(문제가 나에게 명확하지 않기 때문에 여기에 무엇을 배치 해야할지 잘 모르겠거나 질문에 대한 답변이 어느 정도의 정밀도를 필요로하는지 모르겠습니다)

아래는 쉽게 구성하고 문제를 보여줄 수있는 예입니다. 그 효과는 그리 이상하지 않으며 예제를 쉽게 만들 수 있습니다.

  • 변수로 sin-functions (수직이기 때문에)를 취했습니다.p=200
  • 측정 값 으로 랜덤 모델을 생성했습니다 . n=50
    • 모형은 변수 중 만으로 구성 되므로 200 개의 변수 중 190 개가 과적 합을 생성 할 수 있습니다.tm=10
    • 모델 계수는 무작위로 결정됩니다

이 예에서는 과적 합이 있지만 실제 모형에 속하는 모수의 계수가 더 높은 값을 갖는 것을 관찰합니다. 따라서 R ^ 2는 양의 값을 가질 수 있습니다.

아래 이미지 (및이를 생성하는 코드)는 과적 합이 제한됨을 보여줍니다. 200 개의 모수의 추정 모델과 관련된 점입니다. 빨간 점은 '진정한 모델'에도있는 매개 변수와 관련이 있으며 더 높은 값을 가지고 있음을 알 수 있습니다. 따라서 실제 모델에 접근하고 R ^ 2가 0보다 높아지는 정도가 있습니다.

  • 직교 변수 (사인 함수)가있는 모델을 사용했습니다. 매개 변수가 상관 된 경우 상대적으로 매우 높은 계수를 가진 모델에서 매개 변수가 발생할 수 있으며 최소 규범 OLS에서 더 많은 처벌을받을 수 있습니다.
  • '직교 변수'는 데이터를 고려할 때 직교하지 않습니다. 의 내부 곱은 의 전체 공간을 적분 할 때에 만 0 이며 샘플 가 적을 때는 아닙니다 . 결과적으로 노이즈가 0 인 경우에도 과적 합이 발생합니다 (그리고 R ^ 2 값은 노이즈를 제외하고 많은 요소에 의존하는 것처럼 보입니다. 물론 과 의 관계가 있지만 변수의 수는 중요합니다) 실제 모델과 피팅 모델에 몇 개가 있는지).sin(ax)sin(bx)xxnp

과적 합 감소의 예

library(MASS)

par(mar=c(5.1, 4.1, 9.1, 4.1), xpd=TRUE)

p <- 200       
l <- 24000
n <- 50
tm <- 10

# generate i sinus vectors as possible parameters
t <- c(1:l)
xm <- sapply(c(0:(p-1)), FUN = function(x) sin(x*t/l*2*pi))

# generate random model by selecting only tm parameters
sel <- sample(1:p, tm)
coef <- rnorm(tm, 2, 0.5)

# generate random data xv and yv with n samples
xv <- sample(t, n)
yv <- xm[xv, sel] %*% coef + rnorm(n, 0, 0.1)

# generate model
M <- ginv(t(xm[xv,]) %*% xm[xv,])

Bsol <- M %*% t(xm[xv,]) %*% yv
ysol <- xm[xv,] %*% Bsol

# plotting comparision of model with true model
plot(1:p, Bsol, ylim=c(min(Bsol,coef),max(Bsol,coef)))
points(sel, Bsol[sel], col=1, bg=2, pch=21)
points(sel,coef,pch=3,col=2)

title("comparing overfitted model (circles) with true model (crosses)",line=5)
legend(0,max(coef,Bsol)+0.55,c("all 100 estimated coefficients","the 10 estimated coefficients corresponding to true model","true coefficient values"),pch=c(21,21,3),pt.bg=c(0,2,0),col=c(1,1,2))

능선 회귀와 관련하여 잘린 베타 기술

파이썬 코드를 Amoeba에서 R로 변환하고 두 그래프를 결합했습니다. 노이즈 변수가 추가 된 각 최소 표준 OLS 추정치 에 대해 벡터에 대해 동일한 (대략) -norm 과 능선 회귀 추정치와 일치합니다 .l2β

  • 잘린 노이즈 모델이 거의 동일한 것처럼 보입니다 (조금 더 느리게 계산하고 어쩌면 약간 덜 계산합니다).
  • 그러나 잘림이 없으면 효과가 훨씬 덜 강해집니다.
  • 매개 변수 추가와 능선 페널티 사이의 이러한 대응은 과적 합이없는 배후의 가장 강력한 메커니즘 일 필요는 없습니다. 이것은 릿지 회귀 매개 변수가 무엇이든 관계없이 1000p 곡선 (문제의 이미지에서)이 거의 0.3이되는 반면에 다른 p를 가진 다른 곡선은이 수준에 도달하지 못합니다. 그 실제 상황에서 추가 매개 변수는 릿지 매개 변수의 이동과 동일하지 않습니다 (추가 매개 변수가 더 좋고 더 완전한 모델을 만들 것이기 ​​때문입니다).

  • 노이즈 매개 변수는 한편으로는 능선 회귀처럼 표준을 줄이지 만 추가 노이즈를 발생시킵니다. Benoit Sanchez는 한계에서 작은 편차로 많은 노이즈 파라미터를 추가하면 릿지 회귀와 동일하게 될 것입니다 (노이즈 파라미터 수가 증가하면 서로 상쇄 됨). 그러나 동시에 훨씬 더 많은 계산이 필요합니다 (소음의 편차를 증가시키고 더 적은 매개 변수를 사용하고 계산 속도를 높이면 차이가 커집니다).

Rho = 0.2 능선 회귀와 잘린 노이즈 비교

Rho = 0.4 능선 회귀와 잘린 노이즈 비교

Rho = 0.2 노이즈 파라미터의 분산을 2로 증가 능선 회귀와 잘린 노이즈 비교

코드 예

# prepare the data
set.seed(42)
n = 80
p = 40
rho = .2
y = rnorm(n,0,1)
X = matrix(rep(y,p), ncol = p)*rho + rnorm(n*p,0,1)*(1-rho^2)

# range of variables to add
ps = c(0, 5, 10, 15, 20, 40, 45, 50, 55, 60, 70, 80, 100, 125, 150, 175, 200, 300, 400, 500, 1000)
#ps = c(0, 5, 10, 15, 20, 40, 60, 80, 100, 150, 200, 300) #,500,1000)

# variables to store output (the sse)
error   = matrix(0,nrow=n, ncol=length(ps))
error_t = matrix(0,nrow=n, ncol=length(ps))
error_s = matrix(0,nrow=n, ncol=length(ps))

# adding a progression bar
pb <- txtProgressBar(min = 0, max = n, style = 3)

# training set by leaving out measurement 1, repeat n times 
for (fold in 1:n) {
    indtrain = c(1:n)[-fold]

    # ridge regression
    beta_s <- glmnet(X[indtrain,],y[indtrain],alpha=0,lambda = 10^c(seq(-4,2,by=0.01)))$beta
    # calculate l2-norm to compare with adding variables
    l2_bs <- colSums(beta_s^2)

    for (pi in 1:length(ps)) {
        XX = cbind(X, matrix(rnorm(n*ps[pi],0,1), nrow=80))
        XXt = XX[indtrain,]

        if (p+ps[pi] < n) {
            beta = solve(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
        }
        else {
            beta = ginv(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
        }

        # pickout comparable ridge regression with the same l2 norm      
        l2_b <- sum(beta[1:p]^2)
        beta_shrink <- beta_s[,which.min((l2_b-l2_bs)^2)] 

        # compute errors
        error[fold, pi] = y[fold] - XX[fold,1:p] %*% beta[1:p]
        error_t[fold, pi] = y[fold] - XX[fold,] %*% beta[]
        error_s[fold, pi] = y[fold] - XX[fold,1:p] %*% beta_shrink[]
    }
    setTxtProgressBar(pb, fold) # update progression bar
}

# plotting
plot(ps,colSums(error^2)/sum(y^2) , 
     ylim = c(0,2),
     xlab ="Number of extra predictors",
     ylab ="relative sum of squared error")
lines(ps,colSums(error^2)/sum(y^2))
points(ps,colSums(error_t^2)/sum(y^2),col=2)
lines(ps,colSums(error_t^2)/sum(y^2),col=2)
points(ps,colSums(error_s^2)/sum(y^2),col=4)
lines(ps,colSums(error_s^2)/sum(y^2),col=4)

title('Extra pure noise predictors')

legend(200,2,c("complete model with p + extra predictors",
               "truncated model with p + extra predictors",
               "ridge regression with similar l2-norm",
               "idealized model uniform beta with 1/p/rho"),
       pch=c(1,1,1,NA), col=c(2,1,4,1),lt=c(1,1,1,2))

# idealized model (if we put all beta to 1/rho/p we should theoretically have a reasonable good model)
error_op <- rep(0,n)
for (fold in 1:n) {
  beta = rep(1/rho/p,p)
    error_op[fold] = y[fold] - X[fold,] %*% beta
}
id <- sum(error_op^2)/sum(y^2)
lines(range(ps),rep(id,2),lty=2)

1
(+1) 감사합니다. 나는 당신의 대답의 시작 부분에 직관적 인 주장이 의미가 있다고 생각합니다.
amoeba는

1

선형 연산자에 익숙한 경우 현상을 이해하는 가장 직접적인 경로로 내 대답을 원할 수 있습니다. 규모 회귀 분석은 왜 실패하지 않습니까? 그 이유는 문제 ( )가 악의적 인 역 문제이고 의사 역수가 문제를 해결하는 방법 중 하나이기 때문입니다. 그래도 정규화가 개선되었습니다.np

이 논문은 아마도 가장 간결하고 관련있는 설명 일 것이다 : Lorenzo Rosasco et al, Learning, Regularization and Ill-Posed Inverse Problems . . 그들은 학습으로, 수학 식 3을 참조 매개 변수의 수는 관찰의 수를 초과하는 경우 귀하의 회귀 문제를 설정 : 힐베르트 공간의 선형 연산자 - 시끄러운 데이터입니다.

Ax=gδ,
Agδ

분명히 이것은 잘못된 입장의 문제입니다. 따라서 SVD 또는 Moore-Penrose의 역으로 ​​해결하면 실제로 가장 적은 솔루션을 렌더링 할 수 있습니다. 따라서 최소한의 표준 솔루션이 완벽하게 실패하지 않는다는 것은 놀라운 일이 아닙니다.

그러나 논문을 따르면 능선 회귀가 위의 개선 사항임을 알 수 있습니다. Moore-Penrose 솔루션이 반드시 제한되는 것은 아니므로 개선은 실제로 추정기의 더 나은 동작입니다.

최신 정보

잘못 제기 된 문제로 인해 과적 합이 발생한다는 사실을 명확하게 밝히지 않았다는 것을 깨달았습니다. 다음은 Banga JR의 Gábor A 논문의 인용문입니다. 생물학적 시스템의 동적 모델에서 강력하고 효율적인 파라미터 추정 . BMC 시스템 생물학. 2015; 9 : 74. doi : 10.1186 / s12918-015-0219-2 :

이러한 문제의 잘못된 조절은 일반적으로 (i) 많은 수의 매개 변수가있는 모델 (과다 매개 변수화), (ii) 실험 데이터 부족 및 (iii) 중대한 측정 오류에서 발생합니다 [19, 40]. 결과적으로, 우리는 종종 이러한 운동 모델의 과적 합을 얻습니다. 즉, 가용 데이터에 적합하지만 일반화 능력이 낮은 교정 모델 (예측치가 낮음)

따라서 내 주장은 다음과 같이 말할 수 있습니다.

  • 잘못 제기 된 문제로 과적 합
  • (n <p) 사례는 매우 잘못 제기 된 역 문제입니다.
  • 질문에서 로 언급되는 Moore-Penrose psudo-inverse (또는 SVD와 같은 다른 도구) 는 잘못된 문제를 해결합니다.X+
  • 따라서 최소한 어느 정도 초과 피팅을 처리하므로 일반 OLS와 달리 완전히 실패하지 않는다는 것은 놀라운 일이 아닙니다.

다시 말하지만 정규화는 여전히 더 강력한 솔루션입니다.


1
(+1) 감사합니다. 그러나이 백서가 어떤 관련이 있는지 잘 모르겠습니다. 내일 좀 더 자세히 살펴 보겠습니다. 그들은 최소 표준 OLS 솔루션이 과적 합하지 않거나 최소 표준 요구 사항이 정규화로 간주 될 수 있다고 정확히 어디에서 말합니까?
amoeba는

1
논문을 읽을 때 토론 해 봅시다. 그들은 의사 역수가 정규화라고 말하지 않습니다. 그들이 말하는 것은 그것이 잘못된 문제에 대한 해결책이라는 것입니다. 내가 말하고있는 것은 과적 합은 문제가 잘못 제기 된 것이기 때문에 후자를 해결함으로써 정규화뿐만 아니라 전자를 돌보는 것이다.
Aksakal

1
수수께끼는 것은 최소 표준 솔루션이 과적 합을 어느 정도 개선하지는 않지만 더 많은 정규화를 추가해도 문제가 더 개선되지 않는다는 것입니다. 또한 기능 수가 증가함에 따라 최소 표준 솔루션이 더 효과적인 이유는 무엇입니까? 내 직감은 더 많은 매개 변수를 사용하는 문제는 더 적은 것이 아니라 더 많은 정규화가 필요하다는 것입니다. 이것은 정말 흥미로운 문제이며, 예를 들어 비정규 신경망조차도 예상만큼 과도하게 적합하지 않은 이유를 설명하는 데 도움이 될 수 있습니다.
Dikran Marsupial

1
@Dikran 실제로 다른 형식이나 정규화는 여전히 성능을 향상시킬 수 있습니다. 예를 들어 주성분 회귀 또는 탄력적 순으로 성능을 향상시킬 수 있습니다 (최소 표준 OLS와 비교). 릿지 정규화가 쓸모 없게되는 것뿐입니다. 신경망과의 비유는 내 마음을 넘어 가지 않은 매혹적인 생각입니다. 나는 무엇 않았다 최근하지만 생각은, 배치 정상화와 같은 까다로운 깊은 학습 일들이 정말 일을 왜 당연 아무도 통계 (101)에서, 심지어 선형 능선 회귀 그렇게 수수께끼 :-) 될 수 있음을 주어, 이해 없다는 것입니다
아메바는 분석 재개 모니카 말한다

2
이것은 당면한 주요 질문은 아니지만이 일련의 탁월한 질문, 답변 및 의견은 교차 검증을 통해 비롯된 것으로 생각됩니다. 이 논의 에서는 데이터를 시뮬레이션하는 데 사용 된 에서 모집단 선형 예측자를 계산하고 선형 예측기 의 추정기의 MSE 를 계산하는 것이 훨씬 간단합니다 . 그리고 의 경우 능선 회귀에 대한 최적의 수정 된 AIC를 찾을 수없는 경우를 보았습니다 (R 패키지 기능). 그러나 진정한 선형 예측 변수를 골드 표준으로 사용하여 다시 실행해야합니다. βn<<prmsols
Frank Harrell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.