বহুজাতিক [বন্ধ] গ্ল্যামনেট চালানোর সময় ত্রুটি


9

এই প্রশ্নটিতে উল্লিখিত সমস্যাটি আর প্যাকেজ গ্ল্যামনেটের ১.7.৩ সংস্করণে স্থির হয়েছে।

পারিবারিক = বহুদিনের সাথে গ্ল্যামনেট চালাতে আমার কিছুটা সমস্যা হচ্ছে এবং আমি ভাবছিলাম যে এই জাতীয় কিছু ঘটেছে বা আমি কী ভুল করছি তা আমাকে বলতে সক্ষম হতে পারে।

আমি যখন আমার নিজস্ব ডামি ডেটা রাখি তখন ত্রুটিটি "প্রয়োগের ক্ষেত্রে ত্রুটি (এনজেড, 1, মিডিয়ান): দৌড়ানোর সময় ম্লান (এক্স) এর অবশ্যই একটি ইতিবাচক দৈর্ঘ্য থাকতে হবে" রিপোর্ট করা হয় cv.glmnetযা "এটি কাজ করে না" বলা বাদে আমার কাছে খুব তথ্যপূর্ণ ছিল না।

y=rep(1:3,20) #=> 60 element vector
set.seed(1011)
x=matrix(y+rnorm(20*3*10,sd=0.4),nrow=60) # 60*10 element matrix
glm = glmnet(x,y,family="multinomial")   #=> returns without error
crossval = cv.glmnet(x,y,family="multinomial")   #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
crossval = cv.glmnet(x,y,family="multinomial",type.measure="class")   #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
crossval = cv.glmnet(x,y,family="multinomial",type.measure="mae")   #=> Error in apply(nz, 1, median) : dim(X) must have a positive length
cvglm = cv.glmnet(x,y,family="multinomial",lambda=2)   #=> Error in apply(nz, 1, median) : dim(X) must have a positive length

সমস্যাটি সমাধান করার জন্য আমি গ্ল্যামনেট পাওয়ার চেষ্টা করছিলাম তার একটি চাক্ষুষ বর্ণনা এখানে রয়েছে:

my_colours = c('red','green','blue')
plot(x[,1],x[,2],col=my_colours[y])

আমি প্যাকেজ ডক্স থেকে উদাহরণ কোডটি চালাতে সক্ষম হয়েছি, যা আমাকে সন্দেহজনক করে তোলে যে আমি হয় কিছু ভুল বুঝছি বা গ্ল্যামনেটে কোনও বাগ রয়েছে।

library(glmnet)
set.seed(10101)
n=1000;p=30
x=matrix(rnorm(n*p),n,p) #=> 1000*30 element matrix
beta3=matrix(rnorm(30),10,3)
beta3=rbind(beta3,matrix(0,p-10,3))
f3=x%*% beta3
p3=exp(f3)
p3=p3/apply(p3,1,sum)
g3=rmult(p3) #=> 1000 element vector
set.seed(10101)
cvfit=cv.glmnet(x,g3,family="multinomial")

এটি আর সংস্করণ 2.13.1 (2011-07-08) এবং গ্ল্যামনেট 1.7.1 ব্যবহার করছে, যদিও আমি আর 2.14.1 তে একই সমস্যা তৈরি করতে পারি। কোন ধারণা মানুষ?

উত্তর:


11

একটি সূক্ষ্ম বাগ আছে।

যা ঘটছে তা নিম্নরূপ: আপনার কৃত্রিম ডেটা সেটে, তিনটি গ্রুপের অর্থ একটি লাইনে রয়েছে এবং অপেক্ষাকৃত ছোট স্ট্যান্ডার্ড বিচ্যুতি ব্যবহারের সাথে, তিনটি গোষ্ঠী আপনার 10-মাত্রিক স্থানে রৈখিকভাবে পৃথক হয়ে যায়। ফলস্বরূপ, দ্বিতীয় গ্রুপের সাথে সম্পর্কিত সমস্ত পরামিতিগুলি জন্যλ 0 হিসাবে অনুমান করা হয় । চেক

coef(glm)

অভ্যন্তরীণভাবে প্রতিটি -শূন্য-সহগের সংখ্যা নির্ধারণের জন্য cv.glmnetএকটি কল রয়েছে । চেষ্টাpredictλ

predict(glm, type = "nonzero")

কাঠামোটি cv.glmnetকোড পড়া থেকে শুরু করে তালিকার একটি তালিকা বলে মনে করা হয়, তবে তালিকার দ্বিতীয় এন্ট্রিটি NUL, এবং কোনও তালিকা নয়! এর ফলে ত্রুটি হয়। কোডের এই ব্লকে এটি থেকে ঘটেcv.glmnet

if (inherits(glmnet.object, "multnet")) {
    nz = predict(glmnet.object, type = "nonzero")
    nz = sapply(nz, function(x) sapply(x, length))
    nz = ceiling(apply(nz, 1, median))
}

দুটি নেস্টেড sapplyকল থেকে প্রাপ্ত ফলাফলটি শেষ কলটিতে প্রত্যাশার মতো কোনও ম্যাট্রিক্স নয় apply। এটি ত্রুটি উত্পন্ন করে।

অনুশীলনে ত্রুটিটি চালানো খুব সম্ভব নাও হতে পারে তবে কোডটি অবশ্যই চরম ক্ষেত্রে দৃ rob় হওয়া উচিত। আপনার সমস্যাটি রক্ষণাবেক্ষণকারী, ট্রেভর হাস্টি (তার ইমেলটি লিঙ্কটিতে তালিকাভুক্ত করা আছে) কাছে রিপোর্ট করা উচিত ।


চিন্তাশীল এবং দ্রুত জবাব দেওয়ার জন্য ধন্যবাদ। আপনার বলা বেশিরভাগ জিনিসগুলি সঠিক বলে মনে হচ্ছে তবে আমি নিশ্চিত নই যে কারণটি অগত্যা সেগুলি পৃথক পৃথক ble আপনি যদি ইনপুটগুলিতে রনরমের এসডি বাড়িয়ে দেন তবে ত্রুটিটি চলে যায়:
বেনজেডউডক্রফট

1
এনআরএইচ: একটি ধারণা সম্পর্কিত নয় - আমি সন্দেহ করি যে অধ্যাপক হাস্টি আপনার স্পষ্টতাকে স্প্যামকে আমন্ত্রণ জানায় এমনভাবে আপনার ইমেলটি সরল পাঠ্যে রাখার প্রশংসা করতে পারে না (যদিও এটি অবশ্যই বলা অবশ্যই অসম্ভব)। আপনার উত্তরটি খুব সহায়ক হওয়ায় আমার কাছে কঠোর শব্দ করা উচিত নয় ...
বেনজেডউডক্রফট

2
@ বেনজেউডক্রফট, এটি লিনিয়ার পৃথকীকরণের মতো নয় যা ত্রুটিটিকে ট্রিগার করে তবে একটি লাইনের সাথে তিনটি দলের জ্যামিতিক সংগঠন। রৈখিক পৃথকীকরণ নমুনাযুক্ত ডেটাতে এই সংগঠনটিকে আরও সুস্পষ্ট করে তোলে এবং যদি আপনি যথেষ্ট পরিমাণে প্রমিত বিচ্যুতি বৃদ্ধি করেন তবে গ্ল্যামনেট সংস্থাটি "আবিষ্কার" করে না। আপনার দ্বিতীয় উদাহরণটি যেমন দেখায়, আপনার আসলে লিনিয়ার পৃথকীকরণের দরকার নেই। আপনি ইমেল ঠিকানা সম্পর্কে ঠিক বলেছেন, ধন্যবাদ।
এনআরএইচ

3
আমি এই ত্রুটিটি গ্ল্যামনেট ১.৯.৮ এবং আর ৩.১.১ এর সাথে উপরের কোডের পাশাপাশি নমুনা ডেটা সহ ভিগনেটে প্রদত্ত কোডের সাথেও পাচ্ছি।
ব্যবহারকারী 2030668

1
উইন্ডোজ এবং গ্ল্যামনেট ২.০-২ এ আর.২.২.১ ব্যবহার করে বাস্তব-বিশ্বের ডেটা সহ এই ত্রুটিটিটি দেখছি। প্রশিক্ষণ তথ্য 229 পূর্বাভাসীদের 449 পর্যবেক্ষণ আছে। প্রতিক্রিয়া ভেরিয়েবলের 9 স্তর রয়েছে। কীভাবে এগিয়ে যাওয়া যায় সে সম্পর্কে কোনও পরামর্শই স্বাগত।
কেন্ট জনসন

-1

প্রথমে আপনার ম্যাট্রিক্স উদাহরণস্বরূপ রূপান্তর করুন

সংখ্যাগুলিতে প্রতিক্রিয়া ছাড়াই এক্স। এর পরে উল্লেখযোগ্য সহগ (গুলি) যা অনুসন্ধান কাঠামাগুলি বা রওনামগুলি দ্বারা ডেটা স্ট্রাকচারের মতো ভেরিয়েবলগুলি হিসাবে সন্ধান করে the

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