ডিফল্ট lme4 অপ্টিমাইজারের উচ্চ-মাত্রিক ডেটার জন্য প্রচুর পুনরাবৃত্তি প্রয়োজন


12

টি এল; ডিআর: lme4অপ্টিমাইজেশান ডিফল্টরূপে মডেল পরামিতি সংখ্যা রৈখিক উপস্থিত হতে পারে, এবং উপায় একটি সমতুল্য তুলনায় ধীর glmদলের জন্য ডামি ভেরিয়েবল সঙ্গে মডেল। এটির গতি বাড়ানোর জন্য আমি কি কিছু করতে পারি?


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

সম্পাদনা: আমার সন্দেহ হয় যে সমস্যাটি মূলত আমার কাছে অনেকগুলি পরামিতি রয়েছে, কারণ যখন আমি maxfnকম মান সেট করার চেষ্টা করি তখন এটি একটি সতর্কতা দেয়:

Warning message:
In commonArgs(par, fn, control, environment()) :
  maxfun < 10 * length(par)^2 is not recommended.

যাইহোক, প্যারামিটারের অনুমানগুলি অপ্টিমাইজেশনের কোর্সটি পুরোপুরি পরিবর্তন হচ্ছে না, তাই আমি কী করব তা নিয়ে এখনও বিভ্রান্ত। আমি যখন maxfnঅপ্টিমাইজার নিয়ন্ত্রণগুলিতে সেট করার চেষ্টা করেছি (সতর্কতা সত্ত্বেও), তখন এটি অপ্টিমাইজেশান শেষ করে স্তব্ধ হয়ে গেছে বলে মনে হয়েছিল।

এখানে কিছু কোড যা এলোমেলো ডেটার জন্য সমস্যাটি পুনঃ উত্পাদন করে:

library(lme4)

set.seed(1)

SIZE <- 50000
NGRP <- 50
NCOL <- 100

test.case <- data.frame(i=1:SIZE)
test.case[["grouping"]] <- sample(NGRP, size=SIZE, replace=TRUE, prob=1/(1:NGRP))
test.case[["y"]] <- sample(c(0, 1), size=SIZE, replace=TRUE, prob=c(0.05, 0.95))

test.formula = y ~ (1 | grouping)

for (i in 1:NCOL) {
    colname <- paste("col", i, sep="")
    test.case[[colname]] <- runif(SIZE)
    test.formula <- update.formula(test.formula, as.formula(paste(". ~ . +", colname)))
}

print(test.formula)

test.model <- glmer(test.formula, data=test.case, family='binomial', verbose=TRUE)

এই ফলাফলগুলি:

start par. =  1 fn =  19900.78 
At return
eval:  15 fn:      19769.402 par:  0.00000
(NM) 20: f = 19769.4 at           0     <other numbers>
(NM) 40: f = 19769.4 at           0     <other numbers>

আমি ncolঅন্যান্য মানগুলিতে সেট করার চেষ্টা করেছি এবং এটি প্রদর্শিত হবে যে পুনরাবৃত্তির সংখ্যাটি প্রায় কলামে 40 (প্রায়) হয়। স্পষ্টতই, আমি আরও কলামগুলি যুক্ত করার সাথে সাথে এটি একটি বিশাল ব্যথা হয়ে ওঠে। আমি কী অপ্টিমাইজেশন অ্যালগরিদম করতে পারি যে কলামগুলির সংখ্যার উপর নির্ভরতা হ্রাস করবে?


1
আপনি যে নির্দিষ্ট মডেলটি ফিট করতে চাইছেন তা নির্দিষ্ট করে জানানো সহায়ক (বিশেষত এলোমেলো প্রভাবগুলির কাঠামো)।
প্যাট্রিক এস ফোর্সার

দুর্ভাগ্যক্রমে সুনির্দিষ্ট মডেলটি মালিকানাধীন। গ্রুপের আকারগুলির সাথে 100 ডলার এবং 5000 এর মধ্যে এলোমেলো প্রভাবগুলির একটি স্তর রয়েছে I আমি মডেল সম্পর্কে অন্য কোনও প্রাসঙ্গিক তথ্য সরবরাহ করতে পারি কিনা তা আমাকে জানান।
বেন কুহান

ঠিক আছে, আমি এমন কিছু কোড যুক্ত করেছি যা সমস্যাটি পুনরুত্পাদন করে।
বেন কুহান

1
আপনার কাছে আমার পুরো উত্তর নেই, তাই আমি এটি একটি মন্তব্য হিসাবে রেখে দেব। আমার অভিজ্ঞতায়, glmerবেশ ধীরে ধীরে, বিশেষত এমন মডেলগুলির জন্য যেগুলির একটি জটিল এলোমেলো প্রভাব কাঠামো রয়েছে (যেমন, অনেকগুলি এলোমেলো slালু, ক্রস এলোমেলো প্রভাব ইত্যাদি) effects আমার প্রথম পরামর্শটি হ'ল সরলিকৃত এলোমেলো প্রভাবগুলির কাঠামো দিয়ে আবার চেষ্টা করা। তবে, আপনি যদি কেবল একটি এলোমেলো ইন্টারসেপ্ট মডেল নিয়ে এই সমস্যাটি অনুভব করছেন তবে আপনার সমস্যাটি কেবল মামলার সংখ্যা হতে পারে, এক্ষেত্রে আপনাকে বড় ডেটার জন্য বিশেষ কিছু সরঞ্জাম চেষ্টা করতে হবে।
প্যাট্রিক এস ফোরসচার

এটি 50 এর পরিবর্তে 2 গোষ্ঠীগুলির সাথে একই সমস্যা রয়েছে Also এছাড়াও, কলামগুলির একটি ছোট সংখ্যার সাথে পরীক্ষা করে দেখে মনে হচ্ছে যে পুনরাবৃত্তির সংখ্যা মোটামুটি কলামের সংখ্যায় রৈখিক ... সেখানে কি অপ্টিমাইজেশন পদ্ধতি রয়েছে যা এখানে আরও ভাল করবে? ?
বেন কুহান

উত্তর:


12

একটি জিনিস যা আপনি চেষ্টা করতে পারেন তা হ'ল অপটিমাইজারটি পরিবর্তন করা। এই গিথুব ইস্যুতে বেন বলকারের মন্তব্য দেখুন । ববাইকের এনলপট বাস্তবায়ন সাধারণত ডিফল্টের চেয়ে অনেক দ্রুত হয় (কমপক্ষে যখনই আমি এটি চেষ্টা করি)।

library(nloptr)
defaultControl <- list(algorithm="NLOPT_LN_BOBYQA",xtol_rel=1e-6,maxeval=1e5)
nloptwrap2 <- function(fn,par,lower,upper,control=list(),...) {
    for (n in names(defaultControl)) 
      if (is.null(control[[n]])) control[[n]] <- defaultControl[[n]]
    res <- nloptr(x0=par,eval_f=fn,lb=lower,ub=upper,opts=control,...)
    with(res,list(par=solution,
                  fval=objective,
                  feval=iterations,
                  conv=if (status>0) 0 else status,
                  message=message))
}

system.time(test.model <- glmer(test.formula, data=test.case, 
family='binomial', verbose=TRUE))

system.time(test.model2 <- update(test.model,
control=glmerControl(optimizer="nloptwrap2"))

এছাড়াও, আরও বিকল্পগুলির জন্য এই উত্তরটি দেখুন এবং এই থ্রেডটি আর-সিগ-মিশ্র-মডেলগুলি (যা আপনার সমস্যার সাথে আরও প্রাসঙ্গিক বলে মনে হচ্ছে) থেকে দেখুন।

সম্পাদনা: আমি আপনাকে সম্পর্কিত কিছু পুরানো তথ্য দিয়েছি nloptr। ইন lme4 1.1-7এবং আপ, nloptrস্বয়ংক্রিয়ভাবে আমদানি করা হয় (দেখুন ?nloptwrap)। আপনাকে যা করতে হবে তা হ'ল অ্যাড

control = [g]lmerControl(optimizer = "nloptwrap") # +g if fitting with glmer

আপনার আহ্বানে


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

ওয়েল, এটা অবশ্যই দ্রুত ছিল, কিন্তু এটি একটি ত্রুটির সঙ্গে বন্ধ করে দিয়েছিঃ PIRLS step-halvings failed to reduce deviance in pwrssUpdate। এখানে কি হতে পারে আপনার কোনও ধারণা আছে? ত্রুটির বার্তাটি ঠিক স্বচ্ছ নয় ...
বেন কুহান

কিক্সের জন্য, আপনি এনএজিকিউ = 0 সেট করার চেষ্টা করতে পারেন (আরও কয়েকটি ধারণার জন্য আমি যুক্ত থ্রেডটি দেখুন)। পিআরএলএস ত্রুটির কারণ কী তা আমি মনে করি না তবে আমি চারপাশে তাকাব।
alexforrence

অনেক ধন্যবাদ! আপনি কি আমাকে এমন কোনও উত্সের দিকে নির্দেশ করতে পারেন যেখানে আমি এই পদ্ধতিগুলির বিবরণ সম্পর্কে আরও জানতে পারি যাতে ভবিষ্যতে আমি নিজের মতো সমস্যার সমাধান করতে পারি? অপ্টিমাইজেশন এই মুহূর্তে আমার কাছে কালো যাদুটির মতো মনে হচ্ছে feels
বেন কুহান

2
nAGQ = 0 আমার জন্য আপনার পরীক্ষার উদাহরণটিতে ডিফল্ট ববাইকা (15 ডলারে দৌড়ে), এবং 11 সেকেন্ডে nloptrববাইকার সাথে কাজ করেছিল । জন সি ন্যাশ (দ্য প্যাকেজস এবং প্যাকেজগুলির সহ-লেখক ) এর সাথে একটি সাক্ষাত্কার এখানে দেওয়া হয়েছে যেখানে তিনি অনুকূলকরণের একটি উচ্চ-স্তরের ব্যাখ্যা করেন does আপনি যদি সন্ধান করেন বা সিআরএএন দেখুন, তাদের সম্পর্কিত রেফারেন্স ম্যানুয়ালগুলি আপনাকে সিনট্যাক্স সম্পর্কে আরও জানাবে। এছাড়াও একটি ভাইনেট উপলব্ধ আছে, যা বিস্তারিত কিছুটা এগিয়ে যায়। optimoptimxoptimxnloptrnloptr
alexforrence
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.