নতুন পর্যবেক্ষণের সাথে লাসো ফিট আপডেট করা


12

আমি একটি খুব বড় ডেটাসেটের সাথে একটি এল 1-নিয়মিত লিনিয়ার রিগ্রেশন ফিটিং করছি (এন >> পি সহ) ভেরিয়েবলগুলি আগে থেকেই জানা যায়, তবে পর্যবেক্ষণগুলি ছোট অংশে আসে। আমি প্রতিটি খণ্ড পরে lasso ফিট বজায় রাখতে চাই।

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

সামগ্রিক গণনা বোঝা কমাতে আমি কি কিছু করতে পারি?

আমি এফ্রন এট আল এর লারস অ্যালগরিদমটির দিকে চেয়ে ছিলাম, তবে উপরে বর্ণিত পদ্ধতিতে যদি "ওয়ার্ম-স্টার্ট" করা যায় তবে অন্য কোনও মাননীয় পদ্ধতি বিবেচনা করে খুশি হব।

মন্তব্য:

  1. আমি মূলত একটি অ্যালগরিদম খুঁজছি, কিন্তু বিদ্যমান সফ্টওয়্যার প্যাকেজগুলিতে পয়েন্টারগুলি এটি করতে পারে তা অন্তর্দৃষ্টিপূর্ণ প্রমাণও করতে পারে।
  2. বর্তমান লাসো ট্র্যাজেক্টরিজগুলি ছাড়াও অন্যান্য রাষ্ট্র রাখার জন্য অবশ্যই অ্যালগরিদম স্বাগত।

ব্র্যাডলি এফ্রন, ট্রেভর হাসি, আয়ান জনস্টোন এবং রবার্ট তিবশিরানী, অন্তত অ্যাঙ্গেল রিগ্রেশন , অ্যানালস অফ স্ট্যাটিস্টিকস (আলোচনার সাথে) (2004) 32 (2), 407--499।

উত্তর:


7

লাসোটি LARS (একটি পুনরাবৃত্ত প্রক্রিয়া, যা কিছু প্রাথমিক অনুমান শুরু হয় ) এর মাধ্যমে লাগানো হয় । ডিফল্টরূপে β 0 = 0 পি তবে আপনি এটি বেশিরভাগ বাস্তবায়নে পরিবর্তন করতে পারেন (এবং এটি ইতিমধ্যে আপনার অনুকূল β o l d দ্বারা প্রতিস্থাপন করতে পারেন)। নিকটতম β o l d থেকে β n e w , LARS পুনরাবৃত্তির সংখ্যা যত কম হবে আপনাকে β n e w তে উঠতে হবেβ0β0=0পিβ*β*βএনW*βএনW*

সম্পাদনা করুন:

user2763361আমার মন্তব্যগুলির কারণে আমি আমার মূল উত্তরে আরও বিশদ যুক্ত করি।

নীচের মন্তব্যগুলি থেকে আমি সংগ্রহ করি যে ব্যবহারকারীর 2763361 আমার খুব বেশি দক্ষ হওয়ার সাথে সাথে সরাসরি (তাক থেকে) ব্যবহার করা যেতে পারে এমন একটিতে রূপান্তর করতে আমার মূল উত্তরটি পরিপূরক করতে পরামর্শ দেয়।

প্রথম অংশটি করার জন্য, আমি খেলনার উদাহরণে ধাপে ধাপে প্রস্তাবিত সমাধানটি চিত্রিত করব। দ্বিতীয় অংশটি সন্তুষ্ট করতে, আমি সাম্প্রতিক, উচ্চ মানের ইন্টিরিয়র পয়েন্ট solver ব্যবহার করে এটি করব। এটি কারণ, একটি লাইব্রেরি ব্যবহার করে প্রস্তাবিত সমাধানটির উচ্চ কার্যকারিতা বাস্তবায়ন করা সহজ যা একটি নন- থেকে অপ্টিমাইজেশন শুরু করার জন্য লারস বা সিমপ্লেক্স অ্যালগরিদম হ্যাক করার চেষ্টা করার চেয়ে অভ্যন্তরীণ পয়েন্ট পদ্ধতির দ্বারা লাসো সমস্যার সমাধান করতে পারে using স্ট্যান্ডার্ড শুরুর পয়েন্ট (যদিও দ্বিতীয় স্থানটিও সম্ভব)।

মনে রাখবেন যে কখনও কখনও দাবি করা হয় (পুরানো বইগুলিতে) যে লিনিয়ার প্রোগ্রামগুলি সমাধান করার জন্য অভ্যন্তরীণ পয়েন্ট পদ্ধতির সিম্প্লেক্স পদ্ধতির চেয়ে ধীর এবং এটি সম্ভবত অনেক আগে সত্য হতে পারে তবে এটি সাধারণত আজ সত্য নয় এবং অবশ্যই বড় আকারের সমস্যার ক্ষেত্রে সত্য নয় (এ কারণেই বেশিরভাগ পেশাদার গ্রন্থাগারগুলি যেমন cplexঅভ্যন্তরীণ পয়েন্ট অ্যালগরিদম ব্যবহার করে) এবং প্রশ্নটি কমপক্ষে বৃহত্তর সমস্যা সম্পর্কে অন্তর্নিহিত। আরও মনে রাখবেন যে আমি অভ্যন্তরীণ পয়েন্ট সলভারটি সম্পূর্ণরূপে স্পার্স ম্যাট্রিকগুলি পরিচালনা করি তাই আমি মনে করি না যে লার্সের সাথে একটি বড় পারফরম্যান্সের ব্যবধান থাকবে (লার্স ব্যবহারের একটি মূল প্রেরণা ছিল সেই সময়ে অনেক জনপ্রিয় এলপি সল্ভারগুলি স্পার্স ম্যাট্রিকগুলি ভালভাবে পরিচালনা করছিল না এবং এগুলি লাসো সমস্যার একটি বৈশিষ্ট্যযুক্ত বৈশিষ্ট্য)।

এ (খুব) ভাল খোলা অভ্যন্তর বিন্দু আলগোরিদিম সোর্স বাস্তবায়ন হল ipoptএ, COIN-ORগ্রন্থাগার। আরেকটি কারণ আমি ব্যবহার করব ipoptএটির একটি আর ইন্টারফেস রয়েছে ipoptr,। আপনি আরও সম্পূর্ণ ইনস্টলেশন গাইড পাবেন এখানে নিচে আমি এটি ইনস্টল করা মান কমান্ড দিতে, ubuntu

মধ্যে bash, করুন:

sudo apt-get install gcc g++ gfortran subversion patch wget
svn co https://projects.coin-or.org/svn/Ipopt/stable/3.11 CoinIpopt
cd ~/CoinIpopt
./configure
make 
make install

তারপরে, রুট হিসাবে, Rডু (আমি ধরে নিলাম svnসাব্ভারশন ফাইলটি ~/এটি ডিফল্টরূপে অনুলিপি করেছে ):

install.packages("~/CoinIpopt/Ipopt/contrib/RInterface",repos=NULL,type="source")

এখান থেকে, আমি একটি ছোট উদাহরণ দিচ্ছি (বেশিরভাগ ক্ষেত্রে জেলমার Rওয়াইপমা তার মোড়কের অংশ হিসাবে দেওয়া খেলনার উদাহরণ থেকে ipopt):

library('ipoptr')
# Experiment parameters.
lambda <- 1                                # Level of L1 regularization.
n      <- 100                              # Number of training examples.
e      <- 1                                # Std. dev. in noise of outputs.
beta   <- c( 0, 0, 2, -4, 0, 0, -1, 3 )    # "True" regression coefficients.
# Set the random number generator seed.
ranseed <- 7
set.seed( ranseed )
# CREATE DATA SET.
# Generate the input vectors from the standard normal, and generate the
# responses from the regression with some additional noise. The variable 
# "beta" is the set of true regression coefficients.
m     <- length(beta)                           # Number of features.
A     <- matrix( rnorm(n*m), nrow=n, ncol=m )   # The n x m matrix of examples.
noise <- rnorm(n, sd=e)                         # Noise in outputs.
y     <- A %*% beta + noise                     # The outputs.
# DEFINE LASSO FUNCTIONS
# m, lambda, y, A are all defined in the ipoptr_environment
eval_f <- function(x) {
    # separate x in two parts
    w <- x[  1:m ]          # parameters
    u <- x[ (m+1):(2*m) ]

    return( sum( (y - A %*% w)^2 )/2 + lambda*sum(u) )
}
# ------------------------------------------------------------------
eval_grad_f <- function(x) {
    w <- x[ 1:m ]
    return( c( -t(A) %*% (y - A %*% w),  
               rep(lambda,m) ) )
}
# ------------------------------------------------------------------
eval_g <- function(x) {
    # separate x in two parts
    w <- x[  1:m ]          # parameters
    u <- x[ (m+1):(2*m) ]
    return( c( w + u, u - w ) )
}
eval_jac_g <- function(x) {
    # return a vector of 1 and minus 1, since those are the values of the non-zero elements
    return( c( rep( 1, 2*m ), rep( c(-1,1), m ) ) )
}
# ------------------------------------------------------------------
# rename lambda so it doesn't cause confusion with lambda in auxdata
eval_h <- function( x, obj_factor, hessian_lambda ) {
    H <- t(A) %*% A
    H <- unlist( lapply( 1:m, function(i) { H[i,1:i] } ) )
    return( obj_factor * H )
}
eval_h_structure <- c( lapply( 1:m, function(x) { return( c(1:x) ) } ),
                       lapply( 1:m, function(x) { return( c() ) } ) )
# The starting point.
x0 = c( rep(0, m), 
        rep(1, m) )
# The constraint functions are bounded from below by zero.
constraint_lb = rep(   0, 2*m )
constraint_ub = rep( Inf, 2*m )
ipoptr_opts <- list( "jac_d_constant"   = 'yes',
                     "hessian_constant" = 'yes',
                     "mu_strategy"      = 'adaptive',
                     "max_iter"         = 100,
                     "tol"              = 1e-8 )
# Set up the auxiliary data.
auxdata <- new.env()
auxdata$m <- m
    auxdata$A <- A
auxdata$y <- y
    auxdata$lambda <- lambda
# COMPUTE SOLUTION WITH IPOPT.
# Compute the L1-regularized maximum likelihood estimator.
print( ipoptr( x0=x0, 
               eval_f=eval_f, 
               eval_grad_f=eval_grad_f, 
               eval_g=eval_g, 
               eval_jac_g=eval_jac_g,
               eval_jac_g_structure=eval_jac_g_structure,
               constraint_lb=constraint_lb, 
               constraint_ub=constraint_ub,
               eval_h=eval_h,
               eval_h_structure=eval_h_structure,
               opts=ipoptr_opts,
               ipoptr_environment=auxdata ) )

আমার বক্তব্যটি হ'ল, যদি আপনার কাছে নতুন ডেটা থাকে তবে আপনার কেবল দরকার

  1. নতুন পর্যবেক্ষণগুলির জন্য অ্যাকাউন্টে সীমাবদ্ধ ম্যাট্রিক্স এবং উদ্দেশ্য ফাংশন ভেক্টর আপডেট করুন ( প্রতিস্থাপন করা হবে না )।
  2. অভ্যন্তর বিন্দু থেকে পয়েন্ট শুরু

    x0 = সি (রেপ (0, মি), রেপ (1, মি)

    βএনWββআমিএনআমিটিx0

|βআমিএনআমিটি-βএনW|1>|βএনW-β|1(1)

βএনWββআমিএনআমিটিএনপি

বৈষম্য (1) এর অধীনে থাকা শর্তগুলির জন্য তারা হ'ল:

  • λ|βহেএলএস|1পিএন
  • যখন নতুন পর্যবেক্ষণগুলি প্যাথলজিকভাবে প্রভাবশালী না হয়, উদাহরণস্বরূপ যখন তারা স্টকাস্টিক প্রক্রিয়াটির সাথে সামঞ্জস্য থাকে যা বিদ্যমান ডেটা তৈরি করেছে।
  • যখন আপডেটের আকার বিদ্যমান ডেটার আকারের তুলনায় ছোট হয়।

পি+ +1ββ00পি

@ অ্যাক্স: আপনি কি পুরো লাসো পাথ আপডেট করতে চান বা কেবল সমাধান? (অর্থাত্ স্পারসিটি পেনাল্টি স্থির?)।
ব্যবহারকারী 60

λ
β^একটিগুলিগুলি=argminβ{12Σআমি=1এন(Yআমি-β0-Σ=1পিএক্সআমিβ)2+ +λΣ=1পি|β|}

β

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