গ্ল্যামনেট রিজ রিগ্রেশন আমাকে ম্যানুয়াল গণনার চেয়ে আলাদা উত্তর দিচ্ছে কেন?


28

রিজ রিগ্রেশন অনুমান গণনা করতে আমি গ্ল্যামনেট ব্যবহার করছি। আমি এমন কিছু ফলাফল পেয়েছি যা আমাকে সন্দেহজনক করে তুলেছিল যে গ্ল্যামনেট সত্যই আমার মনে হয় যা এটি করে। এটি যাচাই করার জন্য আমি একটি সাধারণ আর স্ক্রিপ্ট লিখেছিলাম যেখানে আমি সমাধানের মাধ্যমে রিজ রিগ্রেশন এবং গ্ল্যামনেটের একটির ফলাফলের সাথে তুলনা করি, পার্থক্যটি উল্লেখযোগ্য:

n    <- 1000
p.   <-  100
X.   <- matrix(rnorm(n*p,0,1),n,p)
beta <- rnorm(p,0,1)
Y    <- X%*%beta+rnorm(n,0,0.5)

beta1 <- solve(t(X)%*%X+5*diag(p),t(X)%*%Y)
beta2 <- glmnet(X,Y, alpha=0, lambda=10, intercept=FALSE, standardize=FALSE, 
                family="gaussian")$beta@x
beta1-beta2

পার্থক্যটির আদর্শটি প্রায় 20 টির কাছাকাছি থাকে যা সংখ্যাগতভাবে বিভিন্ন অ্যালগোরিদমের কারণে হতে পারে না, আমার অবশ্যই কিছু ভুল হচ্ছে। glmnetরিজের সাথে একই ফলাফল পাওয়ার জন্য আমার কী সেটিংস সেট করতে হবে?


1
আপনি এই প্রশ্নটি দেখেছেন ?
cdeterman

1
হ্যাঁ, তবে আমি এখনও সাধারণীকরণ ব্যবহার করে একই ফলাফল পাই না।
জন

আপনি কি তখন আপনার কোড পোস্ট করতে পারেন?
শ্যাডটলকার

আমি ঠিক একই সমস্যা ছিল! a = data.frame (a = jitter (1:10), b = jitter (1:10), c = jitter (1:10), d = jitter (1:10), e = jitter (1:10) , এফ = জিটার (1:10), জি = নমুনা (জিটার (1:10)), y = সিক (10,100,10)); কোফ (lm.ridge (y ~ a + b + c + d + e + f + g, a, ল্যাম্বদা = 2.57%)); কোফ (গ্ল্যামনেট (as.matrix (a [, 1: 7]), a $ y, পরিবার = "গাউসিয়ান", আলফা = 0, ল্যাম্বদা = 2.57 / 10)) ফলাফলগুলি কিছুটা আলাদা হয় এবং অনেক বেশি মিল হয় যখন আমি গ্ল্যামনেটের জন্য অনেক বেশি ল্যাম্বডাস ব্যবহার করি।
a11msp

কুচুটে।
গুণফলগুলি

উত্তর:


27

আপনি যে পার্থক্যটি পর্যবেক্ষণ করছেন তা পর্যবেক্ষণের সংখ্যা দ্বারা অতিরিক্ত বিভাগের কারণে, এন, যা GLMNET তাদের উদ্দেশ্যমূলক কার্যক্রমে ব্যবহার করে এবং ওয়াইয়ের নিখরচায় মানক বিচ্যুতি দ্বারা তার নিখরচায় মানককরণের নীচে দেখায়।

12NysyXβ22+λβ22/2

যেখানে আমরা ব্যবহার স্থানে জন্য , 1/n1/(n1)sy

sy=i(yiy¯)2n

বিটার প্রতি শ্রদ্ধার সাথে পার্থক্য করে, সমীকরণটি শূন্যে সেট করে,

XTXβXTysy+Nλβ=0

এবং বিটার জন্য সমাধান, আমরা অনুমানটি পাই,

β~GLMNET=(XTX+NλIp)1XTysy

ওয়াই মূল মেট্রিক উপর অনুমান (এবং তাদের সংশ্লিষ্ট জরিমানা) পুনরুদ্ধার করার জন্য, GLMNET তা বৃদ্ধি পায় উভয় প্রাক্কলন ও lambdas দ্বারা এবং ব্যবহারকারীতে আয় এই ফলাফল,sy

β^GLMNET=syβ~GLMNET=(XTX+NλIp)1XTy
λunstd.=syλ

এই দ্রবণটির সাথে রিজ রিগ্রেশনটির স্ট্যান্ডার্ড ডেরিভেশনের সাথে তুলনা করুন।

β^=(XTX+λIp)1XTy

লক্ষ্য করুন যে এন এর একটি অতিরিক্ত ফ্যাক্টর দ্বারা অতিরিক্তভাবে, আমরা যখন বা ফাংশনটি ব্যবহার করি , তখন জরিমানা দ্বারা । এর অর্থ হ'ল, যখন আমরা কিছু অনুমানের জন্য এই ফাংশনগুলি ব্যবহার করি , আমরা কার্যকরভাবে ।λpredict()coef()1/syλλ=λ/sy

এই পর্যবেক্ষণগুলির উপর ভিত্তি করে, GLMNET এ ব্যবহৃত পেনাল্টিটি এর একটি গুণক দ্বারা মাপানো দরকার ।sy/N

set.seed(123)

n    <- 1000
p   <-  100
X   <- matrix(rnorm(n*p,0,1),n,p)
beta <- rnorm(p,0,1)
Y    <- X%*%beta+rnorm(n,0,0.5)

sd_y <- sqrt(var(Y)*(n-1)/n)[1,1]

beta1 <- solve(t(X)%*%X+10*diag(p),t(X)%*%(Y))[,1]

fit_glmnet <- glmnet(X,Y, alpha=0, standardize = F, intercept = FALSE, thresh = 1e-20)
beta2 <- as.vector(coef(fit_glmnet, s = sd_y*10/n, exact = TRUE))[-1]
cbind(beta1[1:10], beta2[1:10])

           [,1]        [,2]
[1,]  0.23793862  0.23793862
[2,]  1.81859695  1.81859695
[3,] -0.06000195 -0.06000195
[4,] -0.04958695 -0.04958695
[5,]  0.41870613  0.41870613
[6,]  1.30244151  1.30244151
[7,]  0.06566168  0.06566168
[8,]  0.44634038  0.44634038
[9,]  0.86477108  0.86477108
[10,] -2.47535340 -2.47535340

ফলাফলগুলি একটি বিরতি এবং মানকৃত এক্স ভেরিয়েবলগুলির অন্তর্ভুক্তিতে সাধারণীকরণ করে। [১,১] অবস্থানে অতিরিক্ত শূন্য প্রবেশের জন্য (যেমন ইন্টারসেপ্টটিকে শাস্তি দেবেন না) একটি কলাম এবং তির্যক ম্যাট্রিক্স অন্তর্ভুক্ত করার জন্য আমরা একটি প্রমিত X ম্যাট্রিক্স পরিবর্তন করেছি। তারপরে আপনি তাদের নিজ নিজ নমুনা স্ট্যান্ডার্ড বিচ্যুতি দ্বারা অনুমানগুলি আনস্ট্যান্ডার্ড করতে পারেন (আবার নিশ্চিত করুন যে আপনি স্ট্যান্ডার্ড বিচ্যুতি গণনার সময় 1 / এন ব্যবহার করছেন)।

β^j=βj~sxj

β^0=β0~x¯Tβ^
mean_x <- colMeans(X)
sd_x <- sqrt(apply(X,2,var)*(n-1)/n)
X_scaled <- matrix(NA, nrow = n, ncol = p)
for(i in 1:p){
    X_scaled[,i] <- (X[,i] - mean_x[i])/sd_x[i] 
}
X_scaled_ones <- cbind(rep(1,n), X_scaled)

beta3 <- solve(t(X_scaled_ones)%*%X_scaled_ones+1000*diag(x = c(0, rep(1,p))),t(X_scaled_ones)%*%(Y))[,1]
beta3 <- c(beta3[1] - crossprod(mean_x,beta3[-1]/sd_x), beta3[-1]/sd_x)

fit_glmnet2 <- glmnet(X,Y, alpha=0, thresh = 1e-20)
beta4 <- as.vector(coef(fit_glmnet2, s = sd_y*1000/n, exact = TRUE))

cbind(beta3[1:10], beta4[1:10])
             [,1]        [,2]
 [1,]  0.24534485  0.24534485
 [2,]  0.17661130  0.17661130
 [3,]  0.86993230  0.86993230
 [4,] -0.12449217 -0.12449217
 [5,] -0.06410361 -0.06410361
 [6,]  0.17568987  0.17568987
 [7,]  0.59773230  0.59773230
 [8,]  0.06594704  0.06594704
 [9,]  0.22860655  0.22860655
[10,]  0.33254206  0.33254206

বিনা বাধা ছাড়াই মানকযুক্ত এক্স দেখানোর জন্য কোড যুক্ত করা হয়েছে:

set.seed(123)

n <- 1000
p <-  100
X <- matrix(rnorm(n*p,0,1),n,p)
beta <- rnorm(p,0,1)
Y <- X%*%beta+rnorm(n,0,0.5)

sd_y <- sqrt(var(Y)*(n-1)/n)[1,1]

mean_x <- colMeans(X)
sd_x <- sqrt(apply(X,2,var)*(n-1)/n)

X_scaled <- matrix(NA, nrow = n, ncol = p)
for(i in 1:p){
    X_scaled[,i] <- (X[,i] - mean_x[i])/sd_x[i] 
}

beta1 <- solve(t(X_scaled)%*%X_scaled+10*diag(p),t(X_scaled)%*%(Y))[,1]

fit_glmnet <- glmnet(X_scaled,Y, alpha=0, standardize = F, intercept = 
FALSE, thresh = 1e-20)
beta2 <- as.vector(coef(fit_glmnet, s = sd_y*10/n, exact = TRUE))[-1]
cbind(beta1[1:10], beta2[1:10])

             [,1]        [,2]
 [1,]  0.23560948  0.23560948
 [2,]  1.83469846  1.83469846
 [3,] -0.05827086 -0.05827086
 [4,] -0.04927314 -0.04927314
 [5,]  0.41871870  0.41871870
 [6,]  1.28969361  1.28969361
 [7,]  0.06552927  0.06552927
 [8,]  0.44576008  0.44576008
 [9,]  0.90156795  0.90156795
[10,] -2.43163420 -2.43163420

3
+6। সিভিতে আপনাকে স্বাগতম এবং এই পুরানো প্রশ্নের উত্তরটি পরিষ্কারভাবে দেওয়ার জন্য ধন্যবাদ।
অ্যামিবা বলেছেন মনিকাকে

1
এটা তোলে পরিচয় ম্যাট্রিক্স পরিবর্তে হওয়া উচিত এর দ্রবণে , সঠিক? ββ~
ব্যবহারকারী 1769197

আমি আরও লক্ষ্য করেছি যে দ্বিতীয় অংশের জন্য যেখানে আপনি বলেছিলেন "ফলাফলগুলি একটি ইন্টারসেপ্ট এবং স্ট্যান্ডার্ডাইজড এক্স ভেরিয়েবলগুলি অন্তর্ভুক্তিকে সাধারণীকরণ করে"; এই অংশের জন্য, আপনি যদি ইন্টারসেপটি বাদ দেন, তবে একই গণনা অনুসরণ করে, গ্ল্যামনেটের ফলাফলগুলি ম্যানুয়াল গণনা থেকে আলাদা হয়ে যায়।
ব্যবহারকারী 1769197

সঠিক, আমি প্রয়োজন হিসাবে as জায়গায় পরিচয় ম্যাট্রিক্সের সাথে সমাধানটি আপডেট করেছি । আমি স্ট্যান্ডার্ডাইজড এক্স এর সমাধানটি কোনও বিরতি ছাড়াই পরীক্ষা করে দেখেছি এবং এখনও অভিন্ন ফলাফল পেয়েছি (উপরে অতিরিক্ত কোড দেখুন)। β
স্কিজুঙ্কি

3

Https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html এর মতে , পরিবারটি যখন gaussian, glmnet()কমপক্ষে

(1)12ni=1n(yiβ0xiTβ)2+λj=1p(α|βj|+(1α)βj2/2).

যখন ব্যবহার glmnet(x, y, alpha=1)কলাম সঙ্গে Lasso মাপসই আদর্শায়িত, রিপোর্ট শাস্তি সমাধান কমানোর জন্য সমাধান যাইহোক, অন্তত যখন ব্যবহার হইয়া শৈলশিরা রিগ্রেশন, একটি রিপোর্ট শাস্তি সমাধান কমানোর জন্য সমাধান যেখানে হ'ল মানক বিচ্যুতি । এখানে, জরিমানাটি হিসাবে জানা উচিত ছিল ।xλ

12ni=1n(yiβ0xiTβ)2+λj=1p|βj|.
glmnet_2.0-13glmnet(x, y, alpha=0)λ
12ni=1n(yiβ0xiTβ)2+λ12syj=1pβj2.
syyλ/sy

যা ঘটতে পারে তা হ'ল ফাংশনটি প্রথমে কে মান এবং তারপরে যা কার্যকরভাবে হ্রাস করতে হবে বা সমতুল্য, yy0

(2)12ni=1n(y0ixiTγ)2+ηj=1p(α|γj|+(1α)γj2/2),
12nsy2i=1n(yiβ0xiTβ)2+ηαsyj=1p|βj|+η1α2sy2j=1pβj2,
12ni=1n(yiβ0xiTβ)2+ηsyαj=1p|βj|+η(1α)j=1pβj2/2.

লাসোর জন্য ( ), স্কেলিং পিছনে হিসাবে রিপোর্ট করুন । তারপরে সমস্ত , কে জুড়ে ফলাফলের ধারাবাহিকতা বজায় রাখার জন্য শাস্তি হিসাবে রিপোর্ট করতে হবে । এটি সম্ভবত উপরের সমস্যার কারণ। এটি আংশিকভাবে (1) সমাধান করার জন্য (2) ব্যবহারের কারণে। কেবলমাত্র যখন বা সমস্যা (1) এবং (2) (যেমন, (1) এবং ইন (2)) এর মধ্যে একটি সামঞ্জস্য রয়েছে । অন্য যে কোনও For এর জন্যα=1ηηsyαηsyαα=0α=1ληα(0,1), সমস্যা (1) এবং (2) দুটি পৃথক অপ্টিমাইজেশান সমস্যা, এবং ইন (1) এবং (2) এর মধ্যে একের সাথে কোনও যোগাযোগ নেই ।λη


1
আপনার উত্তরটি আগের উত্তর থেকে কোথায় পৃথক হয় তা আমি দেখতে পাচ্ছি না। আপনি দয়া করে ব্যাখ্যা করতে পারেন?
ফায়ারব্যাগ

1
@ ফায়ারবাগ আমি ল্যাম্বডাকে কেন এইভাবে রিপোর্ট করি সে বিষয়ে আলোকপাত করতে চেয়েছিলাম, যা সম্পূর্ণরূপে রিজ রিগ্রেশনের দৃষ্টিকোণ থেকে দেখা গেলে অপ্রাকৃত, তবে পুরো বর্ণালীটির দৃষ্টিকোণ থেকে দেখার সময় এটি বুদ্ধিমান হয় (বা এইভাবে হতে হবে) উভয় রিজ এবং লাসো সহ।
চুন লি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.