Sırt regresyonu yüksek boyutlarda işe yaramaz mı (


50

İle iyi eski regresyon problemi düşünün belirleyicileri ve örnek büyüklüğü . Her zamanki bilgelik, OLS tahmincisinin fazladan donacağı ve genel olarak ridge regresyon tahmincisi tarafından daha iyi şekillendirileceğidir:Optimal düzenlileştirme parametresi bulmak için çapraz doğrulama kullanmak standarttır . Burada 10 kat CV kullanıyorum. Açıklama güncellemesi: olduğunda "OLS tahmincisi" tarafından tarafından verilen "minimum norm OLS tahmincisi"pβ = ( X- x + λ I ) - 1 x y . λ n < p β en küçük kareler = ( X X ) + X y = x + y .n

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

ve olan bir veri kümem var . Tüm belirleyiciler standartlaştırılmıştır ve (yalnız) öngörülmesinde iyi bir iş yapabileceği epeyce vardır . Eğer rastgele bir küçük-ish seçersem, , prediktör sayısı deyince makul bir CV eğrisi elde ederim: büyük verimi sıfır R-kare verimi, küçük verimi negatif R-kare verimi (çünkü fazla uydurma) ve aralarında azami miktar var. İçin eğrisi benzer. Bununla birlikte, daha büyük olan için , örneğin, , hiç maksimum elde edemiyorum: eğri platolar, yani OLS ilen=80p>1000p = 50 < n λ λ p = 100 > n p p = 1000yp=50<nλλp=100>npp=1000λ0 , optimal ile çıkıntı regresyon kadar iyi performans gösterir .λ

görüntü tanımını buraya girin

Bu nasıl mümkün olabilir ve veri kümem hakkında ne diyor? Açıkça net bir şey mi eksik veya gerçekten sezgisel mi? Her ikisi de n'den büyük olduğu için p=100 ve arasında nasıl niteliksel bir fark olabilir ?p=1000n

Ne şartlar altında için Minimal norm EKK çözümü yok n<p değil overfit?


Güncelleme: Yorumlarda bazı inançsızlıklar yaşandı, bu yüzden burada kullanılabilecek tekrarlanabilir bir örnek var glmnet. Python kullanıyorum ancak R kullanıcıları kodu kolayca uyarlayacak.

%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()

görüntü tanımını buraya girin görüntü tanımını buraya girin


2
@DJohnson Şaka yok. Her zamanki eğitim seti n = 72'dir ve her test seti n = 8'dir.
amip diyor Reinstate Monica,

2
Bu normal bir CV'den uzak . Bir kişi, tespit edilebilir bir sonuç gibi bir şeyi nasıl bekleyebilir?
Mike Hunter,

3
@DJohnson Neden bunu normalden uzak olduğunu söylüyorsunuz anlamıyorum. 10 kat CV budur.
amip diyor Reinstate Monica,

2
@ Seanv507 görüyorum. Eh, "lambda = 0 olan çözeltiyi" "lambda = 0 olan minimal norm çözeltisi" olarak tanımlamanızı öneririm. Sanırım sorum şu şekilde yeniden şekillendirilebilir: Hangi şartlar altında minimal norm OLS çözümü ile n <overfit vs overfit değil?
amip diyor Reinstate Monica

3
@ amoeba: Bu soru için teşekkür ederim. Şimdiye kadar son derece öğretici ve ilginç olmuştur.
usεr11852, Reinstate Monic’in

Yanıtlar:


23

teorik PCA'sındaki birçok küçük bileşenin varlığından dolayı doğal bir düzenlileşme gerçekleşir . Bu küçük bileşenler, küçük katsayılar kullanılarak gürültüye uyması için örtük olarak kullanılır. Minimum OLS normu kullanırken, gürültüyü birçok küçük bağımsız bileşenle uydurursunuz ve bunun Ridge düzeneğine eşdeğer bir düzenleyici etkisi vardır. Bu düzenlileştirme genellikle çok güçlüydü ve negatif Ridge olarak bilinen "anti-normalizasyon" kullanarak telafi etmek mümkün . Bu durumda, λ'nın negatif değerleri için minimum MSE eğrisinin göründüğünü göreceksiniz .xλ

Teorik PCA ile demek istediğim:

Let çok değişkenli bir normal dağılım. Doğrusal izometri vardır ön gibi U = f ( x ) ~ N ( 0 , D ) D diyagonaldir: bileşenleri u bağımsızdır. D basitçe agon köşegenleştirilerek elde edilir .xN(0,Σ)fu=f(x)N(0,D)DuDΣ

Şimdi model yazılabilir y = f ( β ) . f ( x ) + ϵ (doğrusal izometri nokta ürünü korur). Γ = f ( β ) yazarsanız , model y = γ yazılabilir . u + ε . Ayrıca β = γ y=β.x+ϵy=f(β).f(x)+ϵγ=f(β)y=γ.u+ϵβ=γbu nedenle Ridge veya minimum norm OLS gibi uygun yöntemler mükemmel bir şekilde izomorfiktir: tahmincisi . u + ϵ , y = β tahmin edicisinin f değeridir . x + ϵ .y=γ.u+ϵfy=β.x+ϵ

Teorik PCA bağımsız olmayan tahmin edicileri bağımsız tahmin edicilere dönüştürür. Sadece ampirik kovaryans matrisini kullandığınız (küçük örneklem büyüklüğü olan teorik olandan çok farklı olan) ampirik PCA ile gevşek bir şekilde ilişkilidir. Teorik PCA pratik olarak hesaplanabilir değildir, ancak burada modeli bir dikey öngörü uzayında yorumlamak için kullanılır.

Bir modele birçok küçük varyans bağımsız yordayıcısı eklediğimizde ne olacağını görelim:

teorem

katsayılı sırt düzeneği eşittir ( p olduğunda ):λp

  • ilave varyans her sahte bağımsız belirleyicileri (merkezli ve aynı dağıtılır) Xpλp
  • Zenginleştirilmiş modelin minimum OLS tahmincisi ile donatılması
  • sadece gerçek tahminciler için parametreleri tutmak

(taslağını) Kanıt

Maliyet fonksiyonlarının asimptotik olarak eşit olduğunu ispatlayacağız. Modeli gerçek ve sahte tahmincilere ayıralım: . Ridge'in (gerçek tahminciler için) maliyet fonksiyonu şöyle yazılabilir:y=βx+βx+ϵ

costλ=β2+1λyXβ2

Minimum OLS normu kullanıldığında, cevap mükemmel bir şekilde yerine getirilir: hata süresi 0'dır. Maliyet fonksiyonu sadece parametrelerin normu ile ilgilidir. Gerçek parametrelere ve sahte olanlara ayrılabilir:

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

Doğru ifadede, minimum norm çözümü şu şekilde verilir:

β=X+(yXβ)

Şimdi için SVD kullanıyorsanız :X

X=UΣV

X+=VΣ+U

Biz norm görüyoruz esasen tekil değerlere bağlıdır X ' + ' tekil değerlerin reciprocals olan X ' . Normalleştirilmiş versiyonu X ' olduğunu βX+XX. Literatüre baktım ve büyük rasgele matrislerin tekil değerleri iyi bilinmektedir. İçinpven,yeterince büyük, minimum'insdakikave maksimum smaksimumtekil değerler ile yaklaşık (bakınızteoremi 1.1):p/λXpnsminsmax

smaks(

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

Beri, büyük , p , 0 eğilimi gösterir, sadece tüm tekil değerler ile yaklaşık söyleyebilirizn/p . Böylece:p

β1λyXβ

En sonunda:

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

Not : Sahte belirleyicilerin katsayılarını modelinizde tutmanız önemli değildir. Tarafından ortaya varyans isimli λβx. Böylece, MSE'nizi1+n/pkatsayısı ileher halükarda 1'e çıkarırsınız. Her nasılsa sahte belirleyicilere gerçek olanlardan farklı davranmana gerek yok.λpβ21pyXβ2npMSE(β)1+n/p

Şimdi, @ amoeba'nın verilerine dönelim. Teorik PCA uygulandıktan sonra (normal olarak varsayılmaktadır), X bir değişkene doğrusal izometrinin ile transforme edilir u bileşenleri bağımsızdır ve varyans azalan sırada kriteri. Sorun Y = β x + ε dönüştürülmüş sorun eşdeğerdir Y = γ u + ε .xxuy=βx+ϵy=γu+ϵ

Şimdi bileşenlerin varyansının nasıl olduğunu hayal edin:

görüntü tanımını buraya girin

Birçok düşünün son bileşenlerin, bunların varyans toplamını diyoruz  . Her birinin yaklaşık λ / p'ye eşit bir varyansı vardır ve bağımsızdır. Sahte tahmin edicilerin teoremdeki rolünü oynuyorlar.pλλ/p

Bu durum @ jonny'nin modelinde daha açıktır: teorik PCA'nın sadece ilk bileşeni ile ilişkilidir (orantılı ¯ x ) ve çok büyük farklılıkları vardır. Diğer tüm bileşenler ( x i - ¯ x ile orantılı ) nispeten çok küçük bir varyansa sahiptir (kovaryans matrisini yazın ve bunu görmek için köşegenleştirin) ve sahte öngörücülerin rolünü oynuyor. Burada yapılan düzenlemenin önceki N ( 0 , 1 ) değerine karşılık geldiğini (yaklaşık) hesapladım.yx¯xix¯iley1ise gerçekγ 2 1 =1N(0,1p2)γ1 . Bu kesinlikle fazla küçülür. Bu, nihai MSE'nin ideal MSE'den çok daha büyük olması ile görülebilir. Düzenleme etkisi çok güçlü.γ12=1p

Bu doğal düzenlileşmeyi Ridge ile geliştirmek bazen mümkündür. Öncelikle bazen teoride gerçekten büyük (1000, 10000 ...) gerçekten ciddi anlamda rakip olmak için p'ye ihtiyaç duyarsınız ve p'nin doğruluğu kesin değildir. Ancak, Ridge'in doğal olarak varolan dolaylı bir düzenlemeye göre ek bir düzenleme olduğunu ve dolayısıyla sadece çok küçük bir etkiye sahip olabileceğini göstermektedir. Bazen bu doğal düzenlileşme zaten çok güçlüdür ve Ridge bile bir gelişme olmayabilir. Bundan daha fazlası, anti-normalizasyon kullanmak daha iyidir: Negatif katsayılı sırt. Bu @ Jonny modeli için (MSE gösterir p = 1000 kullanılarak), X R :ppp=1000λR

görüntü tanımını buraya girin


2
+1 Çok hoş, bunu yazdığınız için teşekkürler. Ben size "düzenlenmesine" derken ne demek olduğunu açıklamak için önemli olduğunu düşünüyorum (yani sırt) ayarlanmasını. Bir kement veya elastik net daha iyi davranmaya etmesini ümit ediyorum ve gerçekten de insanların kullandığınız şeydir n » p durumlar. Kimse böyle bir ortamda saf sırt kullanmaz ve standart tavsiye, seyrekliği zorlayan düzenlemeleri kullanmaktır; bu yüzden saf sırtın davranışının yalnızca akademik bir ilgisi olabilir. Yine de, onu keşfediyoruz gibi gözüküyor. Neden bu iyi bilinmiyor? L2np
amip diyor Reinstate Monica

1
Kötü sabit kodlanmış orantılı için σ 2 . Üzgünüm, uygun bir şey için zamanım olmadı. Benim asıl odak nokta, örneklerinden farklı olduğunu görmek için 40 normdaki "çok kötü olmayan normalleşmenin" şiddetle daha iyi olduğunu görmek için min-norm OLS davranışıydı. λσ2
Benoit Sanchez

3
Gizemi anladığımı düşünüyorum: katsayılı Ridge normalizasyonunun her biri λ / p varyansı olan (büyük p için asimptotik ) p - p tahminleri ekleyen min-norm OLS'ye eşdeğerdir . Verilerinizde ve Johny'nin modelinde, PCA'nın en düşük varyans bileşenleri sayesinde hiçbir şey yapmadan gerçekleşir. Şimdi bunu açıkça açıklamanın bir yolunu bulmak için zamana ihtiyacım var ...λpλ/pp
Benoit Sanchez

1
Küçük bir noktayı açıklığa kavuşturdum: Sahte tahmincilerin katsayıları hatayı fazla arttırmıyor (kanıtın sonundaki nota bakınız). Bu önemlidir çünkü verilerinizde / jonny'lerde kaçınılmaz olarak korunurlar.
Benoit Sanchez,

3
Negatif Ridge'i denedim. İnanamıyorum ama işe yarıyor !!! (ve sadece Jonny'nin modelinde değil ...)
Benoit Sanchez

16

Devam eden tartışma için herkese teşekkürler. Maddenin işlenişi, minimum OLS normunun, sırt regresyonuna benzer bir şekilde büzülme gerçekleştirdiği görünüyor . Bu her ne zaman ortaya görünmektedir . İronik olarak, saf gürültü belirleyicileri eklemek bile çok garip bir form ya da düzenlenme olarak kullanılabilir.pn


Bölüm I. Yapay veri ve analitik CV ile gösteri

@Jonny (+1), biraz uyarlayacağım basit bir yapay örnekle geldi. N × p boyutunda ve y değerinde , tüm değişkenlerin birim varyanslı Gausslu olması ve her bir tahminci ile cevap arasındaki korelasyonun ρ olması için üretilmektedir . Ben ρ = .2 düzelteceğim .Xn×pyρρ=.2

Biri dışarıda bırakma CV kullanacağım çünkü kare hatası için analitik ifade var: PRESS , "öngörülen kareler toplamı" olarak bilinir . eiartıklar olanE=y-y=y-Hy,veHşapka matrisidir, H=X(Xx+λI)-1x=US2

PRESS=i(ei1Hii)2,
ei
e=yy^=yHy,
HSVD açısındanX=USV. Bu, @ Jonny'nın sonuçlarınıçapraz doğrulama yapmadan ve gerçekten yapmadançoğaltmanıza izin verir(PRESS'iny'ninkarelerinin toplamına oranını çiziyorum):
H=X(XX+λI)1X=US2S2+λU
X=USVglmnety

görüntü tanımını buraya girin

λ0λ=0n<pλ=0λ0λ=0

İşin püf noktası, olduğunda şapka matrisinin Taylor genişlemesini yapmaktır.λ0

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

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

G1SUiGii1S2

PRESSS2S2Uy2.

y2=Uy2SyXU1yypnXU1ypn

[Bu argüman çok el dalgalı; Umarım daha kesin bir şekilde yapılabilir.]

S = diag(flipud(diag(S)));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

Bölüm II Düzenleme biçimi olarak saf gürültü belirleyicileri ekleme

p>n

n=80p=40qβ^p+qp

görüntü tanımını buraya girin

İŞE YARIYOR!!!

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 Bu deneyde n = 80 ve p = 40 ile başlıyorum. Toplam prediktör sayısı (p + q) n = 80'e yaklaştığından, sorun kötüleşir ve OLS çözümü sert bir şekilde sona erer. Q = 40 civarında hatada muazzam bir tepe var. P + q> n olduğu anda, "minimum-norm" kısıtlaması devreye giriyor ve hata azalmaya başlıyor, ancak q = 0 ile olduğu noktaya gelmesi biraz zaman alıyor. Bu q = 70 civarında olur, yani p + q = 130. Bundan sonra, hata daha da azalmaktadır ve arsanın bu kısmı, sırt regresyon planına benzemektedir. Mantıklı geliyor?
amip diyor Reinstate Monica

@MartijnWeterings İlk yorumda: aynı sayfadayız. 2. yorumda: soruma beta kesmiyordum, doğru. Fakat aslında simülasyonumda beta kesmiyorsam ( y(fold) - XX(fold,:) * betabunun yerine kullanın XX(fold,1:size(X,2)) * beta(1:size(X,2))), sonuçlar çok fazla değişmez. Sanırım bunu cevabıma eklemeliyim. Orijinal verilerimin bu tür davranışlar gösterdiğini düşünüyorum.
amip diyor Reinstate Monica

(1/2): Anlamak için tüm yorumlar ve kodlar boyunca hala yolumda çalışıyorum, ama bana göre bir düşünce var: gözlemlediğimiz bu fenomen ile ridge regresyonu ve rastgele etkiler arasındaki ilişki arasında bir ilişki var mı?
Ryan Simmons

(2/2): Burada Randel'in cevabına göre ( stats.stackexchange.com/questions/122062/… ), rastgele etkiler ile sırt regresyonu arasında eşdeğer bir tahmin görüyoruz ki burada lambda artıkların oranına göre değişmiştir . rastgele etki. Burada, Benoit Sanchez'in cevabına göre sırt regresyonunun, her biri lambda fonksiyonuna ve parametre sayısına eşit varyansa sahip rastgele sayıda sahte bağımsız tahminci eklemekle eşdeğer olduğunu görüyoruz. Bana öyle geliyor ki kavramsal bir ilişki var.
Ryan Simmons

y

15

İşte bunun gerçekleştiği yapay bir durum. Her bir tahmin değişkeninin, büyük miktarda gauss gürültüsü uygulanan hedef değişkenin bir kopyası olduğunu varsayalım. Mümkün olan en iyi model, tüm yordayıcı değişkenlerinin ortalamasıdır.

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 öngörücülü çeşitli lambdalar için MSE

100 değişken "normal" bir şekilde davranır: Bazı pozitif lambda değerleri örnekleme hatasını azaltır.

Ancak yukarıdaki koddaki sayı sayısını 1000'e yükseltin ve işte yeni MSE yolu. (Kendimi ikna etmek için kütük açtım (Lambda) = -100.

1000 kestiricili çeşitli lambdalar için MSE

Ne olduğunu düşünüyorum

Düşük düzenlileşmeyle çok sayıda parametreye uyulduğunda, katsayılar gerçek değerleri etrafında rastgele olarak yüksek değişkenlikle dağıtılır.

Prediktör sayısı çok büyüdükçe, "ortalama hata" sıfıra doğru meyillidir ve katsayıların düşebileceği yere düşmesine izin vermek ve onları 0'a doğru yönlendirmek yerine her şeyi toplarsa daha iyi olur.

Eminim gerçek tahminin tüm tahmincilerin ortalaması olması durumu, bunun gerçekleştiği tek zaman değildir, ancak buradaki en büyük şartı nasıl belirleyeceğimi bilmiyorum.

DÜZENLE:

Çok düşük lambda için "yassı" davranış her zaman gerçekleşecektir, çünkü çözelti minimum-norm OLS çözeltisine yaklaşmaktadır. Benzer şekilde, eğri, çözelti 0'a yaklaştığından çok yüksek lambda için düz olacaktır. Bu iki çözeltiden birinin optimal olması durumunda minimum olmayacaktır.

Asgari norm OLS çözümü neden bu durumda (karşılaştırmalı olarak) bu kadar iyi? Sezgisel olarak çok sezgisel bulmamın şu davranışla ilgili olduğunu düşünüyorum, ancak yansıma çok mantıklı geliyor.

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)

Prediktör sayısı arttıkça maksimum katsayı katsayısı grafiği

Rastgele oluşturulmuş öngörücüler ile cevapla ilgisi yoktur, p katsayıları büyüdükçe p artar, p değeri N'den büyük olduğunda, sıfıra doğru küçülürler. Bu benim örneğimde de oluyor. Bu yüzden, çok gevşek bir şekilde, bu problemlerin düzensiz çözümleri, büzülmeye ihtiyaç duymaz, çünkü zaten çok küçüklerdir!

yXβ^β^0


1
λλp

1
glmnetX=USVβ^=VS1Uy

2
yXβ^β^

3
θ

3
pλβ^

6

Bu yüzden mlr, modelleme yaklaşımından ne geldiğini görmek için R'deki özel paketi kullanarak iç içe çapraz doğrulama yapmaya karar verdim .

Kod (sıradan bir dizüstü bilgisayarda çalışması birkaç dakika sürer)

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)

Sonuçlar

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

Temelde görevleri arasında aynı yaparlar.

Peki ya optimal lambdalar?

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

glmnetMinimal lambda'nın seçilemediğini de keşfettim. Kontrol:

DÜZENLE:

Amip tarafından yapılan yorumlardan sonra, düzenleme yolunun glmnettahminde önemli bir adım olduğu açıkça ortaya çıktı , bu yüzden kod şimdi onu yansıtıyor. Bu şekilde çoğu tutarsızlık ortadan kayboldu.

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

görüntü tanımını buraya girin

Sonuç

λ>0

Bu nasıl mümkün olabilir ve veri kümem hakkında ne diyor? Açıkça net bir şey mi eksik veya gerçekten sezgisel mi?

λ

Düzenleme: Yine de, sırt düzleştirme yolu çağrıldığında önceki parametre tahminlerinden yararlanır glmnet, ancak bu benim uzmanlığımın ötesinde. lambdaİzolasyonda gerçekten düşük bir değer tespit edersek , performansı düşürebilir.

λ0p

Her ikisi de n'den büyük olduğu için p = 100 ve p = 1000 arasında herhangi bir niteliksel fark nasıl olabilir?

p=1000p=100


Yorumlar

Bazı sıfır olmayan lambdalar için ufak bir asgari puan alıyorsunuz gibi görünüyor (figürünüze bakıyorum), ancak eğri hala solunda gerçekten düz. Bu yüzden asıl sorum, λ → 0'ın neden belirgin bir şekilde üst üste gelmediğiyle ilgili olarak kalıyor. Henüz bir cevap göremiyorum. Bunun genel bir fenomen olmasını bekliyor musunuz? Yani n≪p olan herhangi bir veri için lambda = 0 [neredeyse] en iyi lambda kadar iyi bir performans gösterecek mi? Yoksa bu veriler hakkında özel bir şey mi var? Yorumlarda yukarıya bakarsanız, birçok insanın mümkün olduğuna inanmadığını göreceksiniz.

Doğrulama performansını test performansı ile karıştırdığınızı ve böyle bir karşılaştırmanın garanti edilmediğini düşünüyorum.

Düzenleme: Düzenleme lambdayolu performansının tamamını çalıştırdıktan sonra 0 olarak ayarlandığımızda dikkat edin , bu nedenle düzenleme yolu ne olup bittiğini anlamanın anahtarıdır!

Ayrıca, son satırınızı pek anlamadım. P = 100 için cv.glmnet çıkışına bakın. Çok farklı bir şekle sahip olacak. Öyleyse, p = 100 veya p = 1000 olduğunda bu şekli (soldaki asimptot ve asimptot yok) ne etkiler?

Düzenleme yollarını her ikisi için de karşılaştıralım:

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

görüntü tanımını buraya girin

x11()
plot(fit100, "lambda")

görüntü tanımını buraya girin

p=1000λp=100

p=1000


λ0np

Ayrıca, son satırınızı pek anlamadım. Bak cv.glmnetp = 100 için çıkış. Çok farklı bir şekle sahip olacak. Peki p = 100 veya p = 1000 olduğunda bu şekli (soldaki asimptot ve asimptot yok) ne etkiliyor?
amip diyor Reinstate Monica

Eğer biliyor musunuz mlrseçer lambda.minveya lambda.1se(içinde cv.glmnetterminoloji)?
amip diyor Reinstate Monica

@amoeba lambda.min. Ayrıca regr.cvglmnet, muhtemelen birinin başka kurallar seçmesine izin veren bir öğrenci vardır .
Firebug

Teşekkürler. Dürüst olmak gerekirse, 1e-100 kriterinizin çıktısını anlamıyorum. Örneğin, p = 1100 için MSE = 1.45 verir. Ancak burada iç döngüde ayarlanan hiçbir hiperparametre yoktur, bu nedenle temel olarak birinin iç CV döngüsüne ihtiyacı yoktur. Yani, sonuç lambda = 1e-100'deki iç içe geçmiş CV ile aynı olmalıdır. Ancak ilk rakamda MSE'nin yaklaşık 0.7 olduğunu görüyoruz. Bana mantıklı gelmiyor.
amip diyor Reinstate Monica

5

(Asgari norm) OLS nasıl yetişemez?

Kısacası:

Gerçek modeldeki (bilinmeyen) parametrelerle ilişkilendirilen deneysel parametrelerin, minimum norm OLS montaj prosedüründe yüksek değerlerle tahmin edilmesi daha olasıdır. Bunun nedeni, 'model + gürültüye' uyacakları, diğer parametrelerin ise yalnızca 'gürültüye' uyacağıdır (bu nedenle, modelin daha düşük bir katsayısı değerine sahip olan ve daha yüksek bir değere sahip olma olasılıkları daha büyük olacaktır. minimal normdaki OLS).

Bu etki, minimum bir norm OLS montaj prosedüründe aşırı takma miktarını azaltacaktır. Etki, eğer o zamandan beri daha fazla parametre mevcutsa, “gerçek modelin” daha büyük bir kısmının tahmine dahil edilme olasılığı artar.

Daha uzun bölüm:
(Bu konu benim için tam olarak net olmadığından buraya ne yerleştirileceğinden emin değilim veya bir sorunun soruyu ele almak için ne kadar hassas olması gerektiğini bilmiyorum)

Aşağıda kolayca oluşturulabilen ve sorunu gösteren bir örnek verilmiştir. Etkisi çok garip değil ve örnekler yapmak kolaydır.

  • aldım.p=200
  • n=50
    • tm=10
    • model katsayıları rastgele belirlenir

Bu örnekte, fazla uydurma olduğunu gözlemledik, ancak gerçek modele ait parametrelerin katsayıları daha yüksek bir değere sahip. Dolayısıyla R ^ 2 bazı pozitif değerlere sahip olabilir.

Aşağıdaki resim (ve onu oluşturacak kod), aşırı uydurmanın sınırlı olduğunu göstermektedir. 200 parametrenin kestirim modeli ile ilgili noktalar. Kırmızı noktalar 'gerçek modelde' mevcut olan parametrelerle ilgilidir ve daha yüksek bir değere sahip olduklarını görüyoruz. Bu nedenle, gerçek modele yaklaşma ve R ^ 2'yi 0'ın üzerinde alma derecesi vardır.

  • Dik değişkenli bir model kullandığımı unutmayın (sinüs işlevleri). Parametreler ilişkilendirilirse, nispeten yüksek katsayılı modelde oluşabilirler ve minimum OLS normlarında daha fazla cezalandırılabilirler.
  • sin(ax)sin(bx)xxnp

aşırı uydurma örneği azaltılmış

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

Sırt regresyonu ile ilgili kesilmiş beta tekniği

l2β

  • Kesikli gürültü modeli de aynı şeyi yapıyor gibi görünüyor (sadece biraz daha yavaş ve belki biraz daha az iyi hesaplar).
  • Ancak kesilme olmadan, etki çok daha az güçlüdür.
  • Parametre ekleme ve sırt cezası arasındaki bu yazışma, fazla uydurma olmanın ardındaki en güçlü mekanizma olmak zorunda değildir. Bu, özellikle 1000p eğrisinde (sorunun görüntüsünde) neredeyse 0.3'e giderken görülebilir, diğer eğriler, farklı p'lerle, sırt regresyon parametresi ne olursa olsun, bu seviyeye ulaşmaz. Bu pratik durumda ek parametreler, sırt parametresindeki bir kayma ile aynı değildir (ve bunun, ekstra parametrelerin daha iyi, daha eksiksiz bir model yaratacağı için olduğunu tahmin ediyorum).

  • Gürültü parametreleri, bir yandan normu azaltır (tıpkı sırt regresyonu gibi), aynı zamanda ek gürültü de sağlar. Benoit Sanchez, limide, daha küçük sapma ile birçok gürültü parametresi ekleyerek, sonunda regresyon ile aynı olacağını (artan gürültü parametresi sayısının birbirini iptal ettiğini) göstermektedir. Fakat aynı zamanda, çok daha fazla hesaplama gerektiriyor (eğer daha az parametre kullanmak ve hesaplamayı hızlandırmak için gürültünün sapmasını arttırırsak, fark büyür).

Rho = 0.2 kesilmiş gürültünün sırt regresyonu ile karşılaştırılması

Rho = 0.4 kesilmiş gürültünün sırt regresyonu ile karşılaştırılması

Rho = 0.2, gürültü parametrelerinin varyansını 2'ye yükseltir kesilmiş gürültünün sırt regresyonu ile karşılaştırılması

kod örneği

# 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) Teşekkürler. Sanırım cevabınızın başındaki sezgisel argüman mantıklı geliyor.
amip diyor Reinstate Monica

1

np

Ax=gδ,
Agδ

Açıkçası, bu kötü niyetli bir ters problemdir. Böylece, SVD veya Moore-Penrose tersi ile çözebilirsiniz, bu da gerçekten en az norm çözümü sağlayacak. Böylece gerektiği değil senin az norm çözüm düpedüz başarısız olmadığını şaşırtıcı.

Ancak, kağıdı izlerseniz, sırt regresyonunun yukarıdakilerde bir gelişme olacağını görebilirsiniz. Bu gelişme, tahmin edicinin gerçekten daha iyi bir davranışıdır çünkü Moore-Penrose çözümü mutlaka sınırlandırılmamıştır.

GÜNCELLEME

Kötü niyetli sorunların fazla uydurma getirdiğini açıklığa kavuşturmadığımı anladım. İşte Gábor A, Banga JR gazetesinden alıntı. Biyolojik sistemlerin dinamik modellerinde sağlam ve verimli parametre kestirimi . BMC Sistem Biyolojisi. 2015; 9: 74. doi: 10.1186 / s12918-015-0219-2:

Bu sorunların kötü şartlandırılması tipik olarak (i) çok sayıda parametreye sahip (aşırı parametre), (ii) deneysel veri kıtlığı ve (iii) önemli ölçüm hatalarından [19, 40] kaynaklanmaktadır. Sonuç olarak, bu tür kinetik modellerin, yani mevcut verilere uygun özelliklere sahip kalibre edilmiş modellerin ancak genelleme için zayıf kabiliyetinin (düşük kestirim değeri) çok fazla donanıma kavuşuyoruz.

Yani, benim argüman şöyle ifade edilebilir:

  • Hastalıktan kaynaklanan problemler aşırı güçlenmeye yol açıyor
  • (n <p) durum son derece kötü niyetli bir ters problemdir
  • X+
  • bu nedenle, en azından bir dereceye kadar fazladan giydirmeyi önemser ve normal bir OLS'den farklı olarak tamamen başarısız olmaması şaşırtıcı olmamalıdır.

Yine, düzenlileştirme hala daha güçlü bir çözümdür.


1
(+1) Teşekkürler, ama bu yazının ne kadar alakalı olduğunu tam olarak göremiyorum. Yarın daha detaylı olarak bakacağım. Nerede asgari norm OLS çözümünün yetersiz kalmayacağını veya asgari norm şartının düzenlenme olarak görülebileceğini tam olarak nerede söylüyorlar?
amip diyor Reinstate Monica

1
Gazeteyi okuduğunda tartışalım. Psudo tersinin düzenlileşme olduğunu söylemezler. Söyledikleri şey, hastalığın ortaya çıkardığı sorunun çözümünün olmasıdır. Demek istediğim, fazla uydurmanın sorunun kötü bir şekilde ortaya çıkmasından kaynaklandığı, bu nedenle ikincisine değinerek, düzenlileşmenin yanı sıra eskiyle de ilgileniyorsunuz.
Aksakal,

1
Şaşırtıcı olan şey, asgari norm çözümünün bir dereceye kadar aşırı uyumu iyileştirmediği değil, fakat daha fazla düzenlileştirme eklemenin işleri daha da iyileştirmediğini düşünüyorum. Ayrıca, asgari norm çözümünün, özelliklerin sayısı arttıkça daha da etkili olmasının nedeni. Sezgim, daha fazla parametreye sahip sorunların daha az değil, daha fazla düzenlileşmeye (her şeyin eşit olması) ihtiyaç duymasıdır. Bu gerçekten ilginç bir sorundur ve neden düzensiz sinir ağlarının bile beklediğiniz kadar fazla uyuşmadığını açıklamada yardımcı olabilir.
Dikran Marsupial

1
@Dikran Aslında diğer formlar veya düzenlileştirme hala performansı artırabilir: örneğin, temel bileşen regresyonu veya elastik ağ ile performansı (minimum OLS normuna kıyasla) artırabilirim. Sadece bu sırt düzenlenmesi işe yaramaz hale geliyor. Yapay sinir ağlarına benzetme aklımdan geçmeyen büyüleyici bir düşüncedir. Ne yaptım geçenlerde olsa düşünmek, toplu normalleştirme gibi zor derin öğrenme şeyler gerçekten işe neden şaşılacak kimse İstatistik 101 den bile doğrusal sırt regresyon yüzden şaşırtıcı :-) olabilir göz önüne alındığında, anlar ki
amip eski haline Monica diyor

2
Elimizdeki asıl soru bu değil, aksi halde bu mükemmel soru serisinin, yanıtların ve yorumların çapraz onaylama getirmekten kaçındığını düşünüyorum. Bu tartışma için ondan nüfus doğrusal öngorücunun hesaplamak için çok basit olacaktır verilerini simüle etmek ve lineer öngörücü herhangi tahmincinin MSE hesaplamak için kullanıldı s. Ve n için bir dava gördümβn<<prmsols
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.