লাসোটি LARS (একটি পুনরাবৃত্ত প্রক্রিয়া, যা কিছু প্রাথমিক অনুমান শুরু হয় ) এর মাধ্যমে লাগানো হয় । ডিফল্টরূপে β 0 = 0 পি তবে আপনি এটি বেশিরভাগ বাস্তবায়নে পরিবর্তন করতে পারেন (এবং এটি ইতিমধ্যে আপনার অনুকূল β ∗ o l d দ্বারা প্রতিস্থাপন করতে পারেন)। নিকটতম β ∗ o l d থেকে β ∗ n e w , LARS পুনরাবৃত্তির সংখ্যা যত কম হবে আপনাকে β ∗ n e w তে উঠতে হবে ।β0β0= 0পিβ*o l dβ*o l dβ*এন ই ডব্লিউβ*এন ই ডব্লিউ
সম্পাদনা করুন:
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 ) )
আমার বক্তব্যটি হ'ল, যদি আপনার কাছে নতুন ডেটা থাকে তবে আপনার কেবল দরকার
- নতুন পর্যবেক্ষণগুলির জন্য অ্যাকাউন্টে সীমাবদ্ধ ম্যাট্রিক্স এবং উদ্দেশ্য ফাংশন ভেক্টর আপডেট করুন ( প্রতিস্থাপন করা হবে না )।
অভ্যন্তর বিন্দু থেকে পয়েন্ট শুরু
x0 = সি (রেপ (0, মি), রেপ (1, মি)
βএন ই ডব্লিউβo l dβi n i tx0
| βi n i t- βএন ই ডব্লিউ|1> | βএন ই ডব্লিউ- βo l d|1( 1 )
βএন ই ডব্লিউβo l dβi n i tএনপি
বৈষম্য (1) এর অধীনে থাকা শর্তগুলির জন্য তারা হ'ল:
- λ| βও এল এস|1পিএন
- যখন নতুন পর্যবেক্ষণগুলি প্যাথলজিকভাবে প্রভাবশালী না হয়, উদাহরণস্বরূপ যখন তারা স্টকাস্টিক প্রক্রিয়াটির সাথে সামঞ্জস্য থাকে যা বিদ্যমান ডেটা তৈরি করেছে।
- যখন আপডেটের আকার বিদ্যমান ডেটার আকারের তুলনায় ছোট হয়।