GLMNET থেকে পরিবর্তনশীল গুরুত্ব importance


18

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

আমার প্রশ্ন হ'ল আমি "উল্লেখযোগ্য" ভেরিয়েবলগুলির একটি গ্রুপ পাচ্ছি তবে আমি কি প্রতিটিটির তুলনামূলক গুরুত্ব অনুমান করার জন্য এইগুলিকে ক্রম করতে পারি? সহগগুলি কি পরম মানের দ্বারা র‌্যাঙ্কের এই উদ্দেশ্যে মানক করা যেতে পারে (আমি বুঝতে পারি যে তারা coefফাংশনের মাধ্যমে মূল ভেরিয়েবল স্কেলে প্রদর্শিত হবে )? যদি তাই হয়, কি ভাবে সেটি (x এবং y স্ট্যান্ডার্ড ডেভিয়েশন ব্যবহার করে) করতে প্রমিত রিগ্রেশন কোএফিসিয়েন্ট

কোডের উদাহরণ:

    library(glmnet)

    #data comes from

#http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)

    datasetTest <- read.csv('C:/Documents and Settings/E997608/Desktop/wdbc.data.txt',head=FALSE)


#appears to use the first level as the target success
   datasetTest$V2<-as.factor(ifelse(as.character(datasetTest$V2)=="M","0","1"))


#cross validation to find optimal lambda
#using the lasso because alpha=1

    cv.result<-cv.glmnet(       
              x=as.matrix(dataset[,3:ncol(datasetTest)]),
              y=datasetTest[,2],        
              family="binomial",        
              nfolds=10,        
              type.measure="deviance",       
              alpha=1      
              )

#values of lambda used

    histogram(cv.result$lambda)

#plot of the error measure (here was deviance)
#as a CI from each of the 10 folds
#for each value of lambda (log actually)

    plot(cv.result) 

#the mean cross validation error (one for each of the
#100 values of lambda

    cv.result$cvm

#the value of lambda that minimzes the error measure
#result: 0.001909601

    cv.result$lambda.min
    log(cv.result$lambda.min)

#the value of lambda that minimzes the error measure
#within 1 SE of the minimum
#result: 0.007024236

    cv.result$lambda.1se

#the full sequence was fit in the object called cv.result$glmnet.fit
#this is same as a call to it directly.
#here are the coefficients from the min lambda

    coef(cv.result$glmnet.fit,s=cv.result$lambda.1se)

উত্তর:


14

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

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

আশাকরি এটা সাহায্য করবে..


2
ধন্যবাদ। আমি বিশ্বাস করি যে কোফটি মূল স্কেলে ফিরে আসবে। সুতরাং তাদের পুনরায় স্কেল করা দরকার (আমি উদাহরণস্বরূপ পোস্ট করা কৌশলটি ব্যবহার করে ধরে নিই)।
বি_মিনার 18

user6129 ঠিক আছে! আপনি নির্বাচিত ভেরিয়েবলগুলি র‌্যাঙ্কিংয়ের কোনও উপায় পাবেন না। এটি গবেষণার একটি সক্রিয় ক্ষেত্র।
সানকুলসু

3
@ বি_মিনার: আপনি ঠিক বলেছেন, যদি "স্ট্যান্ডার্ডাইজ = ট্রু" বলা হয় গ্ল্যামনেট মূল স্কেলে সহগগুলি ফেরত দেয়। এর কাছাকাছি যাওয়ার একটি উপায় হ'ল বাইরের ব্যাখ্যামূলক ভেরিয়েবলগুলি মানক করা (যেমন "স্কেল ()" ফাংশন ব্যবহার করে) এবং "স্ট্যান্ডার্ডাইজড = ফলস" দিয়ে গ্ল্যামনেট কল করা। ফলস্বরূপ সহগগুলি তার গুরুত্ব বিচার করার জন্য তত্কালীনতার সাথে র‌্যাঙ্ক করা যেতে পারে।
ইয়েভজেনি

@suncoolsu: Pls আমার আপডেট উত্তর উপরে দেখুন
Yevgeny

@ ইয়েজগেনি আমার একটি প্রশ্ন আছে। তারপরে প্রযুক্তিগতভাবে, পারফরম্যান্সের ফলাফলগুলি (যেমন বক্ররেখার নিচে অঞ্চল) একই হওয়া উচিত কিনা আমরা 'স্ট্যান্ডার্ডাইজড = ফলস' সেট করি এবং ভেরিয়েবলগুলি নিজেরাই মানিক করে থাকি বা আমরা কেবল 'স্ট্যান্ডার্ডাইজড = ট্রু' ব্যবহার করি? (কেবলমাত্র বিটা সহগগুলি পৃথক হবে)। আমি তাত্ত্বিকভাবে এটি মনে করি তবে বাস্তবে আমি যখন 'স্ট্যান্ডার্ডাইজড = ট্রু' ব্যবহার করি তখন কিছুটা ভাল ফলাফল পাই। সুতরাং, সহগ এবং অভিনয় উভয়ই আলাদা both এভাবে কি হওয়া উচিত?
মিশেল 6

7

এমন কোনও জায়গায় সহগ পাওয়ার জন্য যা আপনাকে সরাসরি তাদের গুরুত্বের সাথে তুলনা করতে দেয়, আপনাকে সেগুলি মানক করতে হবে। লজিস্টিক রিগ্রেশন সহগের মানিককরণের বিষয়ে আলোচনা করতে আমি থিঙ্কল্যাবে একটি নোট লিখেছিলাম ।

(খুব) দীর্ঘ গল্প সংক্ষিপ্ত, আমি অগ্র্রেতি পদ্ধতিটি ব্যবহার করার পরামর্শ দিচ্ছি :

# if X is the input matrix of the glmnet function,
# and cv.result is your glmnet object:
sds <- apply(X, 2, sd)
cs <- as.matrix(coef(cv.result, s = "lambda.min"))
std_coefs <- coefs[-1, 1] * sds

যদি আপনি গ্ল্যামনেট (ডিফল্ট বিকল্প standardize = TRUE) দ্বারা অভ্যন্তরীণ মানককরণের উপর নির্ভর করেন তবে মূল স্থানে গ্ল্যামনেট দ্বারা পুনঃপ্রবর্তনের আগে এই মানকযুক্ত সহগগুলি প্রকৃতপক্ষে উপযুক্ত পদক্ষেপের ফলে তৈরি হয় ( অন্য নোট দেখুন :-))।


2
std_coefs <- coefs[-1, 1] * sds
b=bσx

এন্টোইন - আপনি এখানে নিশ্চিত করতে পারেন যে গুণটি এবং বিভাগটি যথাযথ নয়?
বি_মিনার

1
σx+bx+=+(bσx)(xμ)/σx+bσx=x

হ্যাঁ, এটি একটি টাইপো (কোডটি চালা না করে উদাহরণ কখনও টাইপ করার জন্য আর একটি অনুস্মারক ;-)) এটি ধরার জন্য ধন্যবাদ, এটি ঠিক হয়ে গেছে।
এন্টোইন লিজি

এটা সঠিক মান কোফিসিয়েন্টস দেয়, কিনা glmnetবস্তুর সঙ্গে তৈরি করা হয়েছে standardize = TRUEবা standardize = FALSEহ্যাঁ?
জেমস হিরশর্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.