নিয়মিত পরিবর্তনশীল নির্বাচনের জন্য অভিযোজিত লাসো ব্যবহৃত হয়। ভেরিয়েবল নির্বাচনের জন্য লাসো ব্যবহার করার সময় আমরা যে সমস্যার মুখোমুখি হই তা হ'ল:
- সংকোচন প্যারামিটার পূর্বাভাসের চেয়ে নির্বাচনের জন্য অবশ্যই বড় হতে হবে
- বড় ননজারো প্যারামিটারগুলি খুব ছোট হবে যাতে পক্ষপাত খুব বড় হয় is
- ছোট ননজারো প্যারামিটারগুলি ধারাবাহিকভাবে সনাক্ত করা যায় না
- ভবিষ্যদ্বাণীকারীদের মধ্যে উচ্চ সম্পর্কের কারণে নির্বাচনের দুর্বলতা বাড়ে
সুতরাং ল্যাসো সংকোচনের প্যারামিটার, পরামিতিগুলি (বিটা-মিনিট শর্ত) এবং পারস্পরিক সম্পর্ক (অপ্রকাশনীয় শর্ত) এর কিছু অবস্থার অধীনে পরিবর্তনশীল নির্বাচনের জন্য কেবল সামঞ্জস্যপূর্ণ। বিস্তারিত ব্যাখ্যার জন্য আমার মাস্টার্স গবেষণার পৃষ্ঠা 101-106 দেখুন ।
পূর্বাভাসের জন্য টিউনিং প্যারামিটারটি নির্বাচন করার সময় লাসো প্রায়শই অনেকগুলি ভেরিয়েবল অন্তর্ভুক্ত করে তবে সত্যিকারের মডেল সম্ভবত এই ভেরিয়েবলগুলির একটি উপসেট। এটি ভবিষ্যদ্বাণী-অনুকূল টিউনিং প্যারামিটার ব্যবহার করে ল্যাসো অনুমানের পক্ষপাতটিকে নিয়ন্ত্রণ করে এমন অভিযোজিত লাসো-এর মতো অনুমানের দ্বিতীয় স্তরের ব্যবহারের পরামর্শ দেয়। এটি উপরে বর্ণিত শর্ত ছাড়াই ধারাবাহিক নির্বাচন (বা ওরাকল সম্পত্তি) বাড়ে।
আপনি অভিযোজিত লাসো জন্য গ্ল্যামনেট ব্যবহার করতে পারেন। ওজনের গণনা করার জন্য প্রথমে আপনার প্রাথমিক প্রাক্কলন প্রয়োজন, কমপক্ষে স্কোয়ার, রিজ বা এমনকি লাসো অনুমান need তারপরে আপনি এক্স ম্যাট্রিক্সকে স্কেল করে অভিযোজিত লাসো বাস্তবায়ন করতে পারেন। প্রশিক্ষণের ডেটাতে সর্বনিম্ন স্কোয়ার প্রাথমিক অনুমান ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হয়েছে:
# get data
y <- train[, 11]
x <- train[, -11]
x <- as.matrix(x)
n <- nrow(x)
# standardize data
ymean <- mean(y)
y <- y-mean(y)
xmean <- colMeans(x)
xnorm <- sqrt(n-1)*apply(x,2,sd)
x <- scale(x, center = xmean, scale = xnorm)
# fit ols
lm.fit <- lm(y ~ x)
beta.init <- coef(lm.fit)[-1] # exclude 0 intercept
# calculate weights
w <- abs(beta.init)
x2 <- scale(x, center=FALSE, scale=1/w)
# fit adaptive lasso
require(glmnet)
lasso.fit <- cv.glmnet(x2, y, family = "gaussian", alpha = 1, standardize = FALSE, nfolds = 10)
beta <- predict(lasso.fit, x2, type="coefficients", s="lambda.min")[-1]
# calculate estimates
beta <- beta * w / xnorm # back to original scale
beta <- matrix(beta, nrow=1)
xmean <- matrix(xmean, nrow=10)
b0 <- apply(beta, 1, function(a) ymean - a %*% xmean) # intercept
coef <- cbind(b0, beta)