Là hồi quy sườn núi vô dụng trong kích thước cao ( )? Làm thế nào OLS có thể không phù hợp?


50

Xem xét một vấn đề hồi quy cũ tốt với các yếu tố dự đoán và cỡ mẫu . Sự khôn ngoan thông thường là công cụ ước tính OLS sẽ vượt trội và thường sẽ vượt trội hơn so với công cụ ước tính hồi quy sườn:Đó là tiêu chuẩn để sử dụng xác thực chéo để tìm tham số chính quy tối ưu . Ở đây tôi sử dụng CV gấp 10 lần. Cập nhật làm rõ: khi , bởi "Công cụ ước tính OLS" Tôi hiểu "công cụ ước tính OLS tối thiểu" được cung cấp bởipβ = ( X X + λ tôi ) - 1 X y . λ n < p β OLS = ( X X ) + X y = X + y .n

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

Tôi có một tập dữ liệu với và . Tất cả các dự đoán được tiêu chuẩn hóa, và có khá nhiều dự đoán (một mình) có thể làm tốt công việc dự đoán . Nếu tôi chọn ngẫu nhiên một giá trị nhỏ, giả sử , số lượng dự đoán, tôi nhận được đường cong CV hợp lý: các giá trị lớn của mang lại bình phương R, bình phương nhỏ của mang lại bình phương R âm (vì của quá mức) và có một số tối đa ở giữa. Với đường cong trông tương tự. Tuy nhiên, với lớn hơn thế nhiều, ví dụ , tôi hoàn toàn không nhận được bất kỳ mức tối đa nào: cao nguyên đường cong, nghĩa là OLS vớin=80p>1000p = 50 < n bước sóng bước sóng p = 100 > n p p = 1000 bước sóng 0yp=50<nλλp=100>npp=1000λ0 thực hiện tốt như hồi quy sườn với tối ưu .λ

nhập mô tả hình ảnh ở đây

Làm thế nào là nó có thể và nó nói gì về tập dữ liệu của tôi? Tôi đang thiếu một cái gì đó rõ ràng hoặc nó thực sự phản trực giác? Làm thế nào có thể có bất kỳ sự khác biệt về chất giữa và khi cả hai đều lớn hơn ?p=100p=1000n

Trong những điều kiện nào giải pháp OLS định mức tối thiểu cho không quá phù hợp?n<p


Cập nhật: Có một số sự hoài nghi trong các ý kiến, vì vậy đây là một ví dụ có thể tái tạo bằng cách sử dụng glmnet. Tôi sử dụng Python nhưng người dùng R sẽ dễ dàng điều chỉnh mã.

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

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


2
@DJohnson Không đùa đâu. CV gấp 10 lần thông thường, nghĩa là mỗi bộ huấn luyện có n = 72 và mỗi bộ kiểm tra có n = 8.
amip nói rằng Phục hồi lại

2
Đó là xa so với một CV thông thường . Cho rằng làm thế nào người ta có thể mong đợi bất cứ điều gì như một kết quả có thể phát hiện?
Mike Hunter

3
@DJohnson Tôi không hiểu tại sao bạn lại nói điều này khác xa với thông thường. Đây là những gì 10 lần CV là.
amip nói rằng Phục hồi lại

2
@ seanv507 Tôi thấy. Chà, tôi đề nghị định nghĩa "giải pháp với lambda = 0" là "giải pháp định mức tối thiểu với lambda = 0". Tôi đoán câu hỏi của tôi có thể được điều chỉnh lại như sau: Trong những điều kiện nào giải pháp OLS định mức tối thiểu với n <p overfit so với không overfit?
amip nói rằng Phục hồi lại

3
@amoeba: Cảm ơn bạn vì câu hỏi này. Nó đã được cực kỳ hướng dẫn và thú vị cho đến nay.
usεr11852 nói Phục hồi Monic

Câu trả lời:


23

Một sự đều đặn tự nhiên xảy ra do sự hiện diện của nhiều thành phần nhỏ trong PCA lý thuyết của . Các thành phần nhỏ này được sử dụng ngầm để phù hợp với tiếng ồn sử dụng các hệ số nhỏ. Khi sử dụng OLS định mức tối thiểu, bạn phù hợp với nhiễu với nhiều thành phần độc lập nhỏ và điều này có tác dụng chính quy hóa tương đương với chính quy của Ridge. Sự chính quy hóa này thường quá mạnh và có thể bù lại bằng cách sử dụng "chống chính quy hóa" được gọi là tiêu cực . Trong trường hợp đó, bạn sẽ thấy mức tối thiểu của đường cong MSE xuất hiện cho giá trị âm của λ .xλ

Theo PCA lý thuyết, ý tôi là:

Đặt xN(0,Σ) phân phối chuẩn nhiều biến. Có một isometry tuyến tính f như u=f(x)N(0,D) nơi D là đường chéo: các thành phần của là độc lập. chỉ đơn giản thu được bằng cách chéo .uDΣ

Bây giờ mô hình có thể được viết y = f ( β ) . f ( x ) + ε (một bảo tồn isometry tuyến tính chấm sản phẩm). Nếu bạn viết γ = f ( β ) , mô hình có thể được viết y = γ . u + ϵ . Hơn nữaβ = γ vì thế phù hợp các phương pháp như Ridge hoặc OLS mức tối thiểu là hoàn toàn đẳng cấu: các ước lượng bình quân y = γy=β.x+ϵy=f(β).f(x)+ϵγ=f(β)y=γ.u+ϵβ=γy=γ.u+ϵ là hình ảnh củaf của ước lượng bình quân.y=β.x+ϵ

PCA lý thuyết biến đổi các yếu tố dự đoán không độc lập thành các yếu tố dự đoán độc lập. Nó chỉ liên quan một cách lỏng lẻo với PCA theo kinh nghiệm nơi bạn sử dụng ma trận hiệp phương sai theo kinh nghiệm (khác rất nhiều so với lý thuyết với kích thước mẫu nhỏ). PCA lý thuyết không thực sự tính toán được mà chỉ được sử dụng ở đây để diễn giải mô hình trong một không gian dự đoán trực giao.

Chúng ta hãy xem điều gì xảy ra khi chúng ta nối nhiều dự đoán độc lập phương sai nhỏ vào một mô hình:

Định lý

Chuẩn hóa sườn với hệ số là tương đương (khi p ) tới:λp

  • thêm giả dự đoán độc lập (trung và phân phối giống nhau) mỗi sai λpλp
  • phù hợp với mô hình được làm giàu với công cụ ước tính OLS tối thiểu
  • chỉ giữ lại các tham số cho các dự đoán thực sự

(bản phác thảo) Bằng chứng

Chúng tôi sẽ chứng minh rằng các hàm chi phí là không có triệu chứng. Hãy chia mô hình thành thật và giả dự đoán: . Hàm chi phí của Ridge (đối với các dự đoán thực) có thể được viết:y=βx+βx+ϵ

costλ=β2+1λyXβ2

Khi sử dụng OLS định mức tối thiểu, đáp ứng được kết hợp hoàn hảo: thuật ngữ lỗi là 0. Hàm chi phí chỉ là về định mức của các tham số. Nó có thể được chia thành các tham số thật và các tham số giả:

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

Trong biểu thức đúng, giải pháp định mức tối thiểu được đưa ra bởi:

β=X+(yXβ)

Bây giờ sử dụng SVD cho :X

X=UΣV

X+=VΣ+U

Chúng tôi thấy rằng các chỉ tiêu chủ yếu phụ thuộc vào các giá trị duy nhất của X ' + đó là nghịch đảo của các giá trị duy nhất của X ' . Các phiên bản bình thường của X 'βX+XX. Tôi đã xem xét văn học và các giá trị số ít của ma trận ngẫu nhiên lớn được biết đến. Đối vớipnp/λXpn đủ lớn, tối thiểu và tối đa s max giá trị ít được xấp xỉ bằng (xem định lý 1.1 ):sminsmax

s tối đa (

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

Kể từ đó, cho lớn , p có xu hướng hướng tới 0, chúng tôi chỉ có thể nói rằng tất cả các giá trị đặc biệt được xấp xỉ bằngn/p . Do vậy:p

β1λyXβ

Cuối cùng:

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

Lưu ý : không có vấn đề gì nếu bạn giữ các hệ số của các yếu tố dự đoán giả trong mô hình của mình. Phương sai được giới thiệu bởi λβx. Do đó, bạn tăng MSE theo hệ số1+nλpβ21pyXβ2npMSE(β) chỉ có xu hướng về 1. Bằng cách nào đó bạn không cần phải đối xử với những người dự đoán giả khác với người thật.1+n/p

Bây giờ, quay lại dữ liệu của @ amoeba. Sau khi áp dụng PCA lý thuyết cho (giả sử là bình thường), x được biến đổi bằng một hình học tuyến tính thành một biến u có các thành phần độc lập và được sắp xếp theo thứ tự phương sai giảm dần. Vấn đề y = β x + ε là tương đương với vấn đề biến đổi y = γ u + ε .xxuy=βx+ϵy=γu+ϵ

Bây giờ hãy tưởng tượng phương sai của các thành phần trông như sau:

nhập mô tả hình ảnh ở đây

Cân nhắc nhiều của các thành phần cuối cùng, hãy gọi tổng phương sai của họ λ . Chúng đều có phương sai xấp xỉ bằngpλ và độc lập. Họ đóng vai trò của những người dự đoán giả trong định lý.λ/p

Thực tế này là rõ ràng hơn trong mô hình @ jonny: chỉ có thành phần đầu tiên của PCA lý thuyết là tương quan với (đó là tỷ lệ thuận với ¯ x ) và có sai rất lớn. Tất cả các thành phần khác (tỷ lệ với x i - ¯ x ) có phương sai tương đối rất nhỏ (viết ma trận hiệp phương sai và chéo nó để thấy điều này) và đóng vai trò của các yếu tố dự đoán giả. Tôi đã tính toán rằng chính quy ở đây tương ứng (xấp xỉ) với N trước ( 0 , 1yx¯xix¯trênγ1trong khi đúngγ 2 1 =1N(0,1p2)γ1 . Điều này chắc chắn thu nhỏ quá mức. Điều này có thể thấy được bởi thực tế là MSE cuối cùng lớn hơn nhiều so với MSE lý tưởng. Hiệu ứng chính quy là quá mạnh.γ12=1p

Đôi khi có thể cải thiện sự chính quy hóa tự nhiên này của Ridge. Trước tiên, đôi khi bạn cần trong định lý thực sự lớn (1000, 10000 ...) để đối thủ nghiêm trọng với Ridge và độ chính xác của p giống như một sự thiếu chính xác. Nhưng nó cũng cho thấy rằng Ridge là một sự chính quy hóa bổ sung so với chính quy hóa ngầm tồn tại tự nhiên và do đó có thể chỉ có một hiệu ứng rất nhỏ. Đôi khi sự chính quy hóa tự nhiên này đã quá mạnh mẽ và Ridge thậm chí có thể không phải là một sự cải tiến. Hơn thế nữa, tốt hơn là sử dụng chống chính quy: Sườn có hệ số âm. Show MSE cho @ jonny của mô hình này ( p = 1.000 ), sử dụng bước sóng R :ppp=1000λR

nhập mô tả hình ảnh ở đây


2
L2np

1
λσ2

3
λpλ/pp

1
Tôi đã làm rõ một điểm nhỏ: các hệ số của các yếu tố dự đoán giả không làm tăng lỗi nhiều (xem ghi chú ở cuối bằng chứng). Điều đó quan trọng bởi vì trong dữ liệu của bạn / jonny, chúng chắc chắn được giữ lại.
Benoit Sanchez

3
Tôi đã thử tiêu cực. Tôi không thể tin nhưng nó hoạt động !!! (và không chỉ trên mô hình của Jonny ...)
Benoit Sanchez

16

pn


Phần I. Trình diễn với dữ liệu nhân tạo và CV phân tích

Xn×pyρρ=.2

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

nhập mô tả hình ảnh ở đây

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

λ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.
Xấp xỉ này được hiển thị trên hình trên với các vòng tròn mở màu đỏ.

y2=Uy2SyXU1yypnXU1ypn

[Lập luận này rất gợn sóng; Tôi hy vọng nó có thể được thực hiện chính xác hơn.]

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

Phần II. Thêm các yếu tố dự đoán tiếng ồn thuần túy như một hình thức chính quy

p>n , bất kỳ yếu tố dự đoán mới nào cũng chỉ có thể làm giảm định mức của giải pháp định mức tối thiểu. Vì vậy, việc thêm các yếu tố dự đoán sẽ đẩy định mức xuống, phần nào tương tự như cách hồi quy sườn núi đang xử phạt định mức.

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

nhập mô tả hình ảnh ở đây

CÔNG TRÌNH NÓ !!!

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 Trong thí nghiệm này, tôi bắt đầu với n = 80 và p = 40. Khi tổng số người dự đoán (p + q) đạt tới n = 80, vấn đề trở nên tồi tệ và giải pháp OLS khắc phục quyết liệt. Có một đỉnh cực đại trong sai số khoảng q = 40. Ngay khi p + q> n, ràng buộc "định mức tối thiểu" xuất hiện và lỗi bắt đầu giảm nhưng phải mất một thời gian cho đến khi nó quay trở lại vị trí của nó với q = 0. Nó xảy ra khoảng q = 70, tức là p + q = 130. Sau đó, lỗi còn giảm hơn nữa và phần này của âm mưu tương tự như biểu đồ hồi quy sườn núi. Liệu nó có ý nghĩa?
amip nói phục hồi Monica

@MartijnWeterings Trên bình luận đầu tiên: chúng tôi ở cùng một trang. Ở bình luận thứ 2: trong câu hỏi của tôi, tôi không rút ngắn phiên bản beta, điều đó đúng. Nhưng thực tế nếu tôi không cắt bớt beta trong mô phỏng của mình (sử dụng y(fold) - XX(fold,:) * betathay vì XX(fold,1:size(X,2)) * beta(1:size(X,2))), thì kết quả không thay đổi quá nhiều. Tôi đoán tôi nên thêm điều này vào câu trả lời của tôi. Tôi nghĩ rằng dữ liệu ban đầu của tôi cho thấy loại hành vi này.
amip nói rằng Phục hồi lại


(2/2): Câu trả lời của Per Randel tại đây ( stats.stackexchange.com/questions/122062/iêu ), chúng tôi thấy một ước tính tương đương giữa hiệu ứng ngẫu nhiên và hồi quy sườn núi, trong đó lambda bằng với tỷ lệ của phần dư với phương sai của hiệu ứng ngẫu nhiên. Ở đây, theo câu trả lời của Benoit Sanchez, chúng ta thấy rằng hồi quy sườn tương đương với việc thêm một số lượng dự đoán độc lập giả tùy ý, mỗi phương sai có hàm bằng lambda và số lượng tham số. Dường như với tôi có một mối quan hệ khái niệm.
Ryan Simmons

y

15

Đây là một tình huống nhân tạo nơi điều này xảy ra. Giả sử mỗi biến dự đoán là một bản sao của biến mục tiêu với một lượng lớn nhiễu gaussian được áp dụng. Mô hình tốt nhất có thể là trung bình của tất cả các biến dự đoán.

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

MSE cho nhiều lambda khác nhau với 100 dự đoán

100 biến hoạt động theo cách "bình thường": Một số giá trị dương của lambda giảm thiểu lỗi mẫu.

Nhưng tăng num.vars trong đoạn mã trên lên 1000, và đây là đường dẫn MSE mới. (Tôi đã mở rộng để đăng nhập (Lambda) = -100 để thuyết phục bản thân.

MSE cho nhiều lambda khác nhau với 1000 dự đoán

Những gì tôi nghĩ đang xảy ra

Khi phù hợp với nhiều tham số với độ chính xác thấp, các hệ số được phân phối ngẫu nhiên xung quanh giá trị thực của chúng với phương sai cao.

Khi số lượng dự đoán trở nên rất lớn, "sai số trung bình" có xu hướng về 0, và sẽ tốt hơn nếu chỉ để các hệ số rơi vào nơi chúng có thể và tổng hợp mọi thứ hơn là sai lệch về 0.

Tôi chắc rằng tình huống dự đoán thực sự này là trung bình của tất cả các dự đoán không phải là lần duy nhất điều này xảy ra, nhưng tôi không biết làm thế nào để bắt đầu xác định điều kiện cần thiết lớn nhất ở đây.

BIÊN TẬP:

Hành vi "phẳng" đối với lambda rất thấp sẽ luôn xảy ra, vì giải pháp được hội tụ đến giải pháp OLS định mức tối thiểu. Tương tự, đường cong sẽ bằng phẳng cho lambda rất cao khi dung dịch hội tụ đến 0. Sẽ không có một trong hai giải pháp tối thiểu đó là tối ưu.

Tại sao giải pháp OLS định mức tối thiểu lại rất tốt trong trường hợp này? Tôi nghĩ rằng nó có liên quan đến hành vi sau đây mà tôi thấy rất phản trực giác, nhưng về sự phản chiếu có rất nhiều ý nghĩa.

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)

Đồ thị cường độ tối đa của các hệ số khi số lượng dự đoán tăng

Với các yếu tố dự đoán được tạo ngẫu nhiên không liên quan đến phản hồi, vì p làm tăng các hệ số trở nên lớn hơn, nhưng một khi p lớn hơn N, chúng co lại về 0. Điều này cũng xảy ra trong ví dụ của tôi. Vì vậy, rất lỏng lẻo, các giải pháp không thường xuyên cho những vấn đề đó không cần co lại vì chúng đã rất nhỏ!

yXβ^β^0


1
λλp

1
glmnetX=USVβ^=VS1Uy

2
yXβ^β^

3
θ

3
pλβ^

6

Vì vậy, tôi quyết định chạy xác thực chéo lồng nhau bằng cách sử dụng mlrgói chuyên dụng trong R để xem những gì thực sự đến từ phương pháp mô hình hóa.

Mã (phải mất vài phút để chạy trên một máy tính xách tay thông thường)

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)

Các kết quả

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

Họ làm về cơ bản giống nhau trên các nhiệm vụ.

Vì vậy, những gì về lambdas tối ưu?

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

Tôi loay hoay thêm một chút glmnetvà phát hiện ra không có lambda tối thiểu nào được chọn. Kiểm tra:

BIÊN TẬP:

Sau khi nhận xét của amip, rõ ràng đường dẫn chính quy là một bước quan trọng trong glmnetước tính, vì vậy mã hiện phản ánh nó. Bằng cách này, hầu hết sự khác biệt đã biến mất.

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

nhập mô tả hình ảnh ở đây

Phần kết luận

λ>0

Làm thế nào là nó có thể và nó nói gì về tập dữ liệu của tôi? Tôi đang thiếu một cái gì đó rõ ràng hoặc nó thực sự phản trực giác?

λ

Chỉnh sửa: Tuy nhiên, hãy nhớ rằng đường dẫn chính quy của sườn núi sử dụng các ước tính tham số trước đó khi chúng ta gọi glmnet, nhưng điều này nằm ngoài chuyên môn của tôi. Nếu chúng ta thiết lập mức lambdacô lập thực sự thấp , nó có thể sẽ làm giảm hiệu suất.

λ0p

Làm thế nào có thể có bất kỳ sự khác biệt về chất giữa p = 100 và p = 1000 khi cả hai đều lớn hơn n?

p=1000p=100


Bình luận

Có vẻ như bạn đang nhận được một mức tối thiểu nhỏ cho một số lambda khác không (tôi đang nhìn vào hình của bạn), nhưng đường cong vẫn thực sự phẳng ở bên trái của nó. Vì vậy, câu hỏi chính của tôi vẫn là tại sao λ → 0 không đáng chú ý quá mức. Tôi chưa thấy câu trả lời ở đây. Bạn có mong đợi đây là một hiện tượng chung? Tức là đối với bất kỳ dữ liệu nào có n≪p, lambda = 0 sẽ thực hiện [gần như] tốt như lambda tối ưu? Hay là một cái gì đó đặc biệt về những dữ liệu này? Nếu bạn nhìn ở trên trong các bình luận, bạn sẽ thấy rằng nhiều người thậm chí không tin tôi rằng điều đó là có thể.

Tôi nghĩ rằng bạn đang kết hợp hiệu suất xác thực với hiệu suất thử nghiệm và việc so sánh như vậy không được đảm bảo.

Chỉnh sửa: thông báo mặc dù khi chúng tôi đặt lambdathành 0 sau khi chạy toàn bộ hiệu suất đường dẫn chính quy hóa không giảm như vậy, do đó, đường dẫn chính quy là chìa khóa để hiểu điều gì đang xảy ra!

Ngoài ra, tôi không hiểu lắm về dòng cuối cùng của bạn. Nhìn vào đầu ra cv.glmnet cho p = 100. Nó sẽ có hình dạng rất khác nhau. Vậy điều gì ảnh hưởng đến hình dạng này (tiệm cận bên trái so với không có tiệm cận) khi p = 100 hoặc p = 1000?

Hãy so sánh các đường dẫn chính quy cho cả hai:

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

nhập mô tả hình ảnh ở đây

x11()
plot(fit100, "lambda")

nhập mô tả hình ảnh ở đây

p=1000λp=100

p=1000


λ0np

Ngoài ra, tôi không hiểu lắm về dòng cuối cùng của bạn. Nhìn vào cv.glmnetđầu ra cho p = 100. Nó sẽ có hình dạng rất khác nhau. Vậy điều gì ảnh hưởng đến hình dạng này (tiệm cận bên trái so với không có tiệm cận) khi p = 100 hoặc p = 1000?
amip nói rằng Phục hồi lại

Bạn có biết nếu mlrchọn lambda.minhoặc lambda.1se(theo cv.glmnetthuật ngữ)?
amip nói rằng Phục hồi lại

@amoeba lambda.min. Ngoài ra còn có một regr.cvglmnetngười học, có thể cho phép một người chọn các quy tắc khác.
Firebug

Cảm ơn. Thành thật mà nói tôi không hiểu đầu ra của điểm chuẩn 1e-100 của bạn. Ví dụ: với p = 1100, nó cho MSE = 1,45. Nhưng ở đây không có điều chỉnh siêu tham số trong vòng lặp bên trong nên về cơ bản người ta không cần vòng lặp CV bên trong. Có nghĩa là kết quả phải giống như với CV không lồng nhau tại lambda = 1e-100. Nhưng chúng ta thấy trên hình đầu tiên rằng MSE có khoảng 0,7. Nó không có ý nghĩa với tôi.
amip nói rằng Phục hồi lại

5

Làm thế nào (định mức tối thiểu) OLS không thể vượt quá?

Nói ngắn gọn:

Các tham số thử nghiệm tương quan với các tham số (chưa biết) trong mô hình thực sẽ có nhiều khả năng được ước tính với các giá trị cao trong quy trình khớp OLS định mức tối thiểu. Đó là bởi vì chúng sẽ phù hợp với 'model + noise' trong khi các tham số khác sẽ chỉ phù hợp với 'noise' (do đó chúng sẽ phù hợp với phần lớn hơn của mô hình với giá trị thấp hơn của hệ số và có nhiều khả năng có giá trị cao trong OLS định mức tối thiểu).

Hiệu ứng này sẽ làm giảm lượng quá mức trong quy trình lắp OLS định mức tối thiểu. Hiệu ứng sẽ rõ rệt hơn nếu có nhiều tham số hơn kể từ đó có nhiều khả năng là một phần lớn hơn của 'mô hình thực' được kết hợp trong ước tính.

Phần dài hơn:
(Tôi không chắc chắn nên đặt gì ở đây vì vấn đề không hoàn toàn rõ ràng đối với tôi hoặc tôi không biết chính xác câu trả lời nào cần giải quyết câu hỏi)

Dưới đây là một ví dụ có thể dễ dàng xây dựng và chứng minh vấn đề. Hiệu quả không quá xa lạ và các ví dụ rất dễ thực hiện.

  • p=200
  • n=50
    • tm=10
    • hệ số mô hình được xác định ngẫu nhiên

Trong trường hợp ví dụ này, chúng tôi quan sát thấy có một số khớp quá mức nhưng hệ số của các tham số thuộc về mô hình thực có giá trị cao hơn. Do đó, R ^ 2 có thể có một số giá trị dương.

Hình ảnh bên dưới (và mã để tạo ra nó) chứng minh rằng sự phù hợp quá mức bị hạn chế. Các dấu chấm liên quan đến mô hình ước lượng 200 tham số. Các chấm đỏ liên quan đến các tham số cũng có trong 'mô hình thực' và chúng tôi thấy rằng chúng có giá trị cao hơn. Do đó, có một số mức độ tiếp cận mô hình thực và nhận R ^ 2 trên 0.

  • Lưu ý rằng tôi đã sử dụng một mô hình với các biến trực giao (các hàm sin). Nếu các tham số tương quan thì chúng có thể xảy ra trong mô hình với hệ số tương đối rất cao và bị phạt nhiều hơn trong OLS định mức tối thiểu.
  • sin(ax)sin(bx)xxnp

ví dụ về sự phù hợp quá mức được giảm

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

Kỹ thuật beta rút ngắn liên quan đến hồi quy sườn

l2β

  • Có vẻ như mô hình nhiễu cắt ngắn thực hiện nhiều điều tương tự (chỉ tính toán chậm hơn một chút và có thể thường kém hơn một chút).
  • Tuy nhiên, không có sự cắt bớt, hiệu ứng sẽ kém mạnh mẽ hơn nhiều.
  • Sự tương ứng giữa việc thêm tham số và hình phạt sườn núi không nhất thiết là cơ chế mạnh nhất đằng sau sự không phù hợp quá mức. Điều này có thể được nhìn thấy đặc biệt là trong đường cong 1000p (trong hình ảnh của câu hỏi) sẽ gần như 0,3 trong khi các đường cong khác, với p khác nhau, không đạt đến mức này, bất kể tham số hồi quy sườn là gì. Các tham số bổ sung, trong trường hợp thực tế đó, không giống như một sự thay đổi của tham số sườn núi (và tôi đoán rằng điều này là do các tham số phụ sẽ tạo ra một mô hình tốt hơn, đầy đủ hơn).

  • Các tham số tiếng ồn làm giảm chỉ tiêu một mặt (giống như hồi quy sườn) nhưng cũng giới thiệu thêm tiếng ồn. Benoit Sanchez cho thấy trong giới hạn, thêm nhiều tham số nhiễu với độ lệch nhỏ hơn, cuối cùng nó sẽ trở thành giống như hồi quy sườn (số lượng tham số nhiễu tăng dần triệt tiêu lẫn nhau). Nhưng đồng thời, nó đòi hỏi nhiều tính toán hơn (nếu chúng ta tăng độ lệch của nhiễu, để cho phép sử dụng ít tham số hơn và tăng tốc độ tính toán, sự khác biệt sẽ lớn hơn).

Rho = 0,2 so sánh nhiễu cắt ngắn với hồi quy sườn

Rho = 0,4 so sánh nhiễu cắt ngắn với hồi quy sườn

Rho = 0,2 tăng phương sai của các tham số nhiễu lên 2 so sánh nhiễu cắt ngắn với hồi quy sườn

mã ví dụ

# 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) Cảm ơn. Tôi nghĩ rằng lập luận trực quan trong phần đầu câu trả lời của bạn có ý nghĩa.
amip nói rằng Phục hồi lại

1

np

Ax=gδ,
Agδ

Rõ ràng, đây là một vấn đề nghịch đảo đặt ra. Vì vậy, bạn có thể giải quyết nó bằng nghịch đảo SVD hoặc Moore-Penrose, điều này sẽ đưa ra giải pháp ít chuẩn nhất thực sự. Do đó, không có gì đáng ngạc nhiên khi giải pháp tối thiểu của bạn không bị thất bại hoàn toàn.

Tuy nhiên, nếu bạn làm theo bài báo, bạn có thể thấy rằng hồi quy sườn núi sẽ là một sự cải thiện ở trên. Sự cải tiến thực sự là một hành vi tốt hơn của người ước tính, vì giải pháp Moore-Penrose không nhất thiết bị ràng buộc.

CẬP NHẬT

Tôi nhận ra rằng tôi đã không nói rõ rằng các vấn đề không chính đáng dẫn đến tình trạng thừa. Đây là trích dẫn từ tờ Gábor A, Banga JR. Ước lượng tham số mạnh mẽ và hiệu quả trong các mô hình động của các hệ thống sinh học . Sinh học hệ thống BMC. 2015; 9: 74. doi: 10.1186 / s12918-015-0219-2:

Tình trạng không ổn định của những vấn đề này thường phát sinh từ các mô hình (i) với số lượng lớn các tham số (quá tham số), (ii) khan hiếm dữ liệu thử nghiệm và (iii) lỗi đo lường đáng kể [19, 40]. Kết quả là, chúng ta thường thu được quá mức các mô hình động học như vậy, tức là các mô hình được hiệu chuẩn với sự phù hợp với dữ liệu có sẵn nhưng khả năng khái quát kém (giá trị dự đoán thấp)

Vì vậy, lập luận của tôi có thể được nêu ra như sau:

  • vấn đề đặt ra không tốt dẫn đến quá mức
  • (n <p) trường hợp là một vấn đề nghịch đảo cực kỳ khó hiểu
  • X+
  • do đó, nó quan tâm đến việc cung cấp quá mức ít nhất ở một mức độ nào đó và không có gì đáng ngạc nhiên khi nó không hoàn toàn thất bại, không giống như một OLS thông thường nên

Một lần nữa, chính quy là một giải pháp mạnh mẽ hơn vẫn còn.


1
(+1) Cảm ơn, nhưng tôi hoàn toàn không thấy bài báo này có liên quan như thế nào. Tôi sẽ xem xét nó vào ngày mai chi tiết hơn. Chính xác thì họ nói rằng giải pháp OLS định mức tối thiểu sẽ không phù hợp hoặc yêu cầu định mức tối thiểu đó có thể được coi là chính quy?
amip nói rằng Phục hồi Monica

1
Hãy thảo luận khi bạn đọc bài báo. Họ không nói nghịch đảo psudo là chính quy. Những gì họ nói là nó là giải pháp cho vấn đề đặt ra xấu. Điều tôi đang nói là việc cung cấp quá nhiều là do sự không hợp lý của vấn đề, vì vậy bằng cách giải quyết vấn đề sau, bạn sẽ quan tâm đến vấn đề trước đây mặc dù không phải là chính quy.
Aksakal

1
Tôi nghĩ rằng điều khó hiểu không phải là giải pháp định mức tối thiểu không cải thiện quá mức phù hợp ở một mức độ nào đó, nhưng việc thêm nhiều chính quy hóa sẽ không cải thiện mọi thứ hơn nữa. Ngoài ra, tại sao giải pháp định mức tối thiểu lại hiệu quả hơn khi số lượng tính năng ngày càng lớn. Trực giác của tôi là các vấn đề với nhiều tham số cần nhiều sự đều đặn hơn (tất cả mọi thứ đều bằng nhau) chứ không phải ít hơn. Đây là một vấn đề thực sự thú vị và có thể giúp giải thích tại sao, ví dụ, ngay cả các mạng thần kinh không đều đặn không quá phù hợp như bạn mong đợi.
Dikran Marsupial

1
@Dikran Trên thực tế, các hình thức hoặc chính quy hóa khác vẫn có thể cải thiện hiệu suất: ví dụ: tôi có thể cải thiện hiệu suất (so với OLS định mức tối thiểu) bằng hồi quy thành phần chính hoặc với mạng đàn hồi. Chỉ là việc thường xuyên hóa sườn núi trở nên vô dụng. Sự tương đồng với các mạng lưới thần kinh là một ý nghĩ hấp dẫn không xuất hiện trong đầu tôi. Mặc dù vậy, những gì tôi đã nghĩ về gần đây, không có gì lạ khi không ai hiểu tại sao những điều khó học sâu như bình thường hóa thực sự hoạt động, vì việc hồi quy tuyến tính ngay cả từ Thống kê 101 có thể rất khó hiểu :-)
amoeba nói Rebstate Monica

2
βn<<prmsols
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.