বাস্তবায়নকারী শৈলশিরা রিগ্রেশন: একটি বুদ্ধিমান গ্রিড নির্বাচন


17

আমি পাইথন / সি মডিউলে রিজ রিগ্রেশন বাস্তবায়ন করছি এবং আমি এই "সামান্য" সমস্যাটি পেয়েছি। ধারণাটি হ'ল আমি স্বাধীনতার কার্যকর ডিগ্রি কম-বেশি সমান ব্যবধানে নমুনা করতে চাই ( "পরিসংখ্যান শিক্ষার উপাদানগুলির" পৃষ্ঠা 65 এর প্লটের মতো ), উদাহরণস্বরূপ:

df(λ)=i=1pdi2di2+λ,
যেখানেdi2 ম্যাট্রিক্স eigenvalues হয়XTXথেকেdf(λmax)0থেকেdf(λmin)=p। প্রথম সীমাটি নির্ধারণের একটি সহজ উপায় হ'লλmax=ipdi2/c(ধরে নেওয়া), যেখানেλmaxdi2cএকটি ছোট ধ্রুবক এবং আপনি নমুনা করতে চান এমন স্বাধীনতার সর্বনিম্ন ডিগ্রি উপস্থাপন করে (যেমন )। দ্বিতীয় সীমা অবশ্যই ।c=0.1λmin=0

শিরোনাম প্রস্তাব দেওয়া হিসাবে তারপর, আমি নমুনা প্রয়োজন থেকে থেকে কিছু স্কেল মধ্যে যেমন যে নমুনা হয় (প্রায়), বলছি, থেকে পর্যন্ত বিরতি ... এটি করার কোনও সহজ উপায় কি? আমি সমীকরণ সমাধানে চিন্তা প্রত্যেকের জন্য একটি নিউটন-রাফসন পদ্ধতি ব্যবহার করে, কিন্তু এই অত্যধিক পুনরাবৃত্তিও যোগ হবে, বিশেষ করে যখন পি বড়। কোনও পরামর্শ?λλminλmaxdf(λ)0.1cpdf(λ)λp


1
এই ফাংশনটি এর ক্রমহ্রাসমান উত্তেজক ফাংশন λ0। শিকড়গুলি, বিশেষত যদি ডায়ডিক গ্রিডের উপরে বেছে নেওয়া হয় তবে এটির সন্ধান খুব দ্রুত হওয়া উচিত।
কার্ডিনাল

@ কার্ডিনাল, আপনি সম্ভবত ঠিক বলেছেন। তবে, যদি সম্ভব হয় তবে আমি জানতে চাই যে কিছু "ডিফল্ট" গ্রিড রয়েছে কিনা। উদাহরণস্বরূপ, আমি করে একটি গ্রিড পাওয়ার চেষ্টা λ=log(s)λmax/log(smax) , যেখানে s=(1,2,...,smax) , এবং কিছুটা স্বাধীনতার জন্য বেশ ভাল কাজ করেছে, তবে ডি এফ ( as ) হিসাবে λdf(λ)p , এটি ফুরিয়েছে। এটি আমার আশ্চর্য হয়তো কিছু ঝরঝরে উপায় গ্রিড পছন্দ করে নিন ছিল প্রণীতλ 'র, যা আমি কি জিজ্ঞাসা করছি। যদি এটির অস্তিত্ব না থাকে তবে আমি জেনেও খুশি হব (যেহেতু "আরও ভাল কোনও উপায় নেই" জেনে আমি আমার কোডে নিউটন-র‌্যাপসন পদ্ধতিটি খুশিতে ছেড়ে যেতে পারতাম)।
নস্টর

আপনার যে সম্ভাব্য সমস্যাগুলির মুখোমুখি হচ্ছে তার একটি ভাল ধারণা পেতে, এর আদর্শ এবং সবচেয়ে খারাপের মানগুলি pকী কী? কিছু আপনি জানেন কি অবরোহমার্গী eigenvalue বন্টন সম্পর্কে?
কার্ডিনাল

@cardinal, এর টিপিক্যাল মান p আমার আবেদন থেকে পরিসীমা হবে 15 থেকে 40 , কিন্তু আমি যতটা সম্ভব সাধারণ যেমন করতে চাই। ইগন্যাল্যু বিতরণ সম্পর্কে, খুব বেশি সত্য নয়। X একটি ম্যাট্রিক্স যা এর কলামগুলিতে ভবিষ্যদ্বাণী ধারণ করে যা সর্বদা অরথোগোনাল হয় না।
নস্টোর

1
নিউটন-রাফসন সাধারণত পি = 40 এবং ডি ( λ ) এর ছোট মানগুলির 3 থেকে 4 ধাপের মধ্যে 1012 যথার্থতার শিকড় খুঁজে পায় ; প্রায় 6 ধাপের বেশি না । বৃহত্তর মানগুলির জন্য, মাঝে মাঝে 30 টি ধাপের প্রয়োজন হয়। যেহেতু প্রতিটি পদক্ষেপে ( পি ) গণনা প্রয়োজন, গণনার মোট পরিমাণ অসম্পূর্ণ। বস্তুত, ধাপ সংখ্যার উপর নির্ভর করে বলে মনে হচ্ছে না পি একটি ভাল শুরু মান মনোনীত করা হয় (আমি এক আপনি সব যদি ব্যবহার করেন বাছাই আমি34p=40df(λ)630O(p)pdiসমান তাদের গড়)।
হোবার

উত্তর:


19

এটি একটি দীর্ঘ উত্তর । সুতরাং, আসুন এটির একটি ছোট গল্পের সংস্করণ দিন।

  • এই মূল-অনুসন্ধানের সমস্যার কোনও ভাল বীজগণিত সমাধান নেই, সুতরাং আমাদের একটি সংখ্যার অ্যালগরিদম প্রয়োজন need
  • ফাংশন df(λ) চমৎকার বৈশিষ্ট্য প্রচুর আছে। প্রতিটি রুটে গ্যারান্টিযুক্ত একঘেয়েমি মিশ্রণ সহ এই সমস্যার জন্য নিউটনের পদ্ধতির একটি বিশেষ সংস্করণ তৈরি করতে আমরা এগুলি কাজে লাগাতে পারি ।
  • এমনকি মস্তিষ্ক-মৃত Rকোডটি অপ্টিমাইজেশনের কোনও প্রয়াস অনুপস্থিত থাকলেও পি = 100 এর সাথে 100 আকারের একটি গ্রিড গণনা করতে পারেকয়েক সেকেন্ডে 000 সাবধানতার সাথে লিখিতকোড কমপক্ষে 2-3 মাপের অর্ডার দ্বারা এটি হ্রাস করবে।p=100000C

একচেটিয়া রূপান্তর নিশ্চিত করার জন্য নীচে দুটি স্কিম দেওয়া আছে। একটি নীচে দেখানো সীমা ব্যবহার করে, যা উপলক্ষে নিউটনের দুটি পদক্ষেপ বাঁচাতে সহায়তা করে বলে মনে হচ্ছে।

উদাহরণ : এবং আকার 100 eigenvalues স্বাধীনতার ডিগ্রী জন্য একটি অভিন্ন গ্রিড Pareto-বিতরণ, অত: পর অত্যন্ত স্কিউ হয়। নীচে প্রতিটি মূল সনাক্ত করার জন্য নিউটন পদক্ষেপের সংখ্যার সারণী রয়েছে।p=100000

# Table of Newton iterations per root.
# Without using lower-bound check.
  1  3  4  5  6 
  1 28 65  5  1 
# Table with lower-bound check.
  1  2  3 
  1 14 85 

There won't be a closed-form solution for this, in general, but there is a lot of structure present which can be used to produce very effective and safe solutions using standard root-finding methods.

Before digging too deeply into things, let's collect some properties and consequences of the function

df(λ)=i=1pdi2di2+λ.

প্রপার্টি 0 : একটি মূলদ ফাংশন λ । (এই সংজ্ঞা থেকে আপাত।) আখের 0 : কোন সাধারণ বীজগাণিতিক সমাধান রুট খোঁজার জন্য বিদ্যমান থাকবে ( λ ) - Y = 0 । এটি কারণ ডিগ্রি পি এর সমতুল্য বহু -মূল মূল সন্ধানের সমস্যা রয়েছে এবং তাই পি যদি খুব ছোট না হয় (অর্থাত্ পাঁচটিরও কম নয়) তবে কোনও সাধারণ সমাধানের অস্তিত্ব থাকবে না। সুতরাং, আমাদের একটি সংখ্যার পদ্ধতি প্রয়োজন।dfλ
df(λ)y=0pp

সম্পত্তি 1 : ফাংশন উত্তল এবং λ 0 এ হ্রাস পাচ্ছে । (ডেরিভেটিভস নিন)) ফলাফল 1 (ক) : নিউটনের রুট-ফাইন্ডিং অ্যালগরিদম এই পরিস্থিতিতে খুব সুন্দর আচরণ করবে । যাক Y স্বাধীনতার আর কাঙ্খিত ডিগ্রী হতে λ 0 সংশ্লিষ্ট রুট, অর্থাত্, Y = ( λ 0 ) । বিশেষত, আমরা যদি কোনও প্রাথমিক মান λ 1 < λ 0 (তাই, ডি ( λ 1) দিয়ে শুরু করিdfλ0
yλ0y=df(λ0)λ1<λ0 ), তারপরে নিউটন-পদক্ষেপ পুনরাবৃত্তির ক্রম λ 1 , λ 2 , একচেটিয়াভাবেঅনন্য সমাধান λ 0 এ রূপান্তরিত করবে। ফলাফল 1 (খ): তদ্ব্যতীত, আমরা যদি λ 1 > λ 0 দিয়ে শুরু করিতবেপ্রথমধাপে λ 2λ 0 পাওয়া যায়df(λ1)>yλ1,λ2,λ0
λ1>λ0λ2λ0, কোথা থেকে এটি পূর্বের ফলাফলের দ্বারা সমাধানটিতে একঘেয়েভাবে বৃদ্ধি পাবে (নীচে ক্যাভিয়েট দেখুন)। স্বজ্ঞাতভাবে, এই শেষ ঘটনাটি অনুসরণ করে কারণ আমরা যদি মূলের ডানদিকে যেতে শুরু করি তবে এর জলের কারণে ডেরিভেটিভ "খুব" অগভীর এবং সুতরাং প্রথম নিউটন পদক্ষেপটি আমাদের মূলের বাম দিকে কোথাও নিয়ে যাবে। বিশেষ দ্রষ্টব্য যেহেতু হয় না নেতিবাচক সাধারণ উত্তল মধ্যে λ , এই আকাঙ্ক্ষিত রুট বাম শুরু পছন্দ একটি শক্তিশালী কারণ প্রদান করে। অন্যথায়, আমাদের দ্বিগুণ পরীক্ষা করে দেখতে হবে যে নিউটন পদক্ষেপটি অনুমান মূলের জন্য কোনও নেতিবাচক মানের ফলস্বরূপ ফল দেয়নি, যা আমাদেরকে ডি এর একটি ননকনভেক্স অংশে কোথাও স্থাপন করতে পারে । dfdfλdf
ফলস্বরূপ 1 (সি) : একবার আমরা কিছু জন্য মূলটি খুঁজে পেয়েছি এবং তারপরে কিছু y 2 < y 1 থেকে রুট অনুসন্ধান করব , λ 1 যেমন d f ( λ 1 ) = y 1 কে আমাদের প্রাথমিক অনুমান হিসাবে ব্যবহার করব গ্যারান্টি আমরা দ্বিতীয় রুটের বাম দিকে শুরু। সুতরাং, আমাদের কনভার্জেশনটি সেখান থেকে একঘেয়ে হওয়ার গ্যারান্টিযুক্ত।y1y2<y1λ1df(λ1)=y1

সম্পত্তি 2 : "নিরাপদ" শুরুর পয়েন্ট দেওয়ার জন্য যুক্তিসঙ্গত সীমা বিদ্যমান। উত্তেজক যুক্তি এবং জেনসেনের অসমতা ব্যবহার করে আমাদের নীচের সীমাবদ্ধতা রয়েছে

p1+λpdi2df(λ)pidi2idi2+pλ.
Consequence 2: This tells us that the root λ0 satisfying df(λ0)=y obeys
()11pidi2(pyy)λ0(1pidi2)(pyy).
di2

di>0idipdidf(0)=p assuming all di>0, then y(0,p], whence the bounds are always nontrivial (e.g., the lower bound is always nonnegative).

Here is a plot of a "typical" example of df(λ) with p=400. We've superimposed a grid of size 10 for the degrees of freedom. These are the horizontal lines in the plot. The vertical green lines correspond to the lower bound in ().

Example dof plot with grid and bounds

An algorithm and some example R code

A very efficient algorithm given a grid of desired degrees of freedom y1,yn in (0,p] is to sort them in decreasing order and then sequentially find the root of each, using the previous root as the starting point for the following one. We can refine this further by checking if each root is greater than the lower bound for the next root, and, if not, we can start the next iteration at the lower bound instead.

Here is some example code in R, with no attempts made to optimize it. As seen below, it is still quite fast even though R is—to put it politely—horrifingly, awfully, terribly slow at loops.

# Newton's step for finding solutions to regularization dof.

dof <- function(lambda, d) { sum(1/(1+lambda / (d[d>0])^2)) }
dof.prime <- function(lambda, d) { -sum(1/(d[d>0]+lambda / d[d>0])^2) }

newton.step <- function(lambda, y, d)
{ lambda - (dof(lambda,d)-y)/dof.prime(lambda,d) }

# Full Newton step; Finds the root of y = dof(lambda, d).
newton <- function(y, d, lambda = NA, tol=1e-10, smart.start=T)
{
    if( is.na(lambda) || smart.start )
        lambda <- max(ifelse(is.na(lambda),0,lambda), (sum(d>0)/y-1)/mean(1/(d[d>0])^2))
    iter <- 0
    yn   <- Inf
    while( abs(y-yn) > tol )
    {
        lambda <- max(0, newton.step(lambda, y, d)) # max = pedantically safe
        yn <- dof(lambda,d)
        iter = iter + 1
    }
    return(list(lambda=lambda, dof=y, iter=iter, err=abs(y-yn)))
}

Below is the final full algorithm which takes a grid of points, and a vector of the di (not di2!).

newton.grid <- function(ygrid, d, lambda=NA, tol=1e-10, smart.start=TRUE)
{
    p <- sum(d>0)
    if( any(d < 0) || all(d==0) || any(ygrid > p) 
        || any(ygrid <= 0) || (!is.na(lambda) && lambda < 0) )
        stop("Don't try to fool me. That's not nice. Give me valid inputs, please.")
    ygrid <- sort(ygrid, decreasing=TRUE)
    out    <- data.frame()
    lambda <- NA
    for(y in ygrid)
    {
        out <- rbind(out, newton(y,d,lambda, smart.start=smart.start))
        lambda <- out$lambda[nrow(out)]
    }
    out
}

Sample function call

set.seed(17)
p <- 100000
d <- sqrt(sort(exp(rexp(p, 10)),decr=T))
ygrid <- p*(1:100)/100
# Should take ten seconds or so.
out <- newton.grid(ygrid,d)

Favoriting the question so I can refer back to this answer. Thanks for posting this detailed analysis, cardinal.
Macro

Amazing answer :-), thanks a lot cardinal for the suggestions AND the answer.
Néstor

1

In addition, a couple of methods exist that will calculate the complete regularization path efficiently:

  1. GPS
  2. glmnet
  3. gcdnet

The above are all R packages, as you are using Python, scikit-learn contains implementations for ridge, lasso and elastic net.


1
The ols function in the R rms package can use numerical optimization to find the optimum penalty using effective AIC. But you have to provide the maximum penalty which is not always easy.
Frank Harrell

0

A possible alternative according to the source below seems to be:

The closed form solution: df(λ)=tr(X(XX+λIp)1X)

Should you be using the normal equation as the solver or computing the variance-covariance estimate, you should already have computed (XX+λIp)1. This approach works best if you are estimating the coefficients at the various λ.

Source: https://onlinecourses.science.psu.edu/stat857/node/155

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.