ক্যারেট প্যাকেজটি ব্যবহার করে নির্দিষ্ট প্রান্তিক মানগুলির জন্য বিভ্রান্তির ম্যাট্রিক্স পাওয়া সম্ভব?


13

আমি একটি লজিস্টিক রিগ্রেশন মডেল (মাধ্যমে প্রাপ্ত থাকেন train) একটি বাইনারি প্রতিক্রিয়ার জন্য, এবং আমি মাধ্যমে লজিস্টিক বিভ্রান্তির ম্যাট্রিক্স প্রাপ্ত থাকেন confusionMatrixমধ্যে caret। এটি আমাকে লজিস্টিক মডেল কনফিউশন ম্যাট্রিক্স দেয়, যদিও আমি নিশ্চিত নই যে এটির প্রাপ্তির জন্য কি দোরের ব্যবহার করা হচ্ছে। আমি ব্যবহার নির্দিষ্ট থ্রেশহোল্ড মানের জন্য বিভ্রান্তির ম্যাট্রিক্স কিভাবে প্রাপ্ত না confusionMatrixমধ্যে caret?


আমার কোনও উত্তর নেই, তবে প্রায়শই এই জাতীয় প্রশ্নের উত্তর সহায়তা ফাইলে দেওয়া হয়। যদি এটি ব্যর্থ হয় তবে আপনি উত্স কোডটি নিজেই দেখতে পারেন। আপনি প্রথম confusionmatrixবন্ধনী ছাড়াই টাইপ করে কনসোলটিতে উত্সটি মুদ্রণ করতে পারেন ।
শ্যাডএলকার

আপনি ঠিক কী করেছেন তা এটি পরিষ্কার নয়। আপনি কি প্যাকেজ glmথেকে ফাংশনটি কল করেছিলেন statsএবং এর ফলাফলটি পাস করেছেন confusionMatrix? আমি জানতাম না যে কেউ এটি করতে পারে এবং ম্যানুয়ালটি পড়ে এটি পরিষ্কার হয় না যে এটি মোটেও পারে। নাকি predictকিছু করেছে? একটি সংক্ষিপ্ত উদাহরণ সাহায্য করবে।
ক্যালিমো

1
@ ক্যালিমো আমি মডেলটি ফিট করার জন্য trainফাংশনটি ব্যবহার করেছি caret, যা আমাকে এটি দ্বিপদী পরিবারের সাথে একটি গ্ল্যাম হিসাবে নির্দিষ্ট করতে দেয়। আমি তখন এর predictমাধ্যমে উত্পন্ন বস্তুটিতে ফাংশনটি ব্যবহার করেছি train
কালো দুধ

উত্তর:


11

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

glmএকই. সহ caret, ব্যবহার predict(object, newdata)আপনাকে পূর্বাভাসীকৃত শ্রেণি দেয় এবং predict(object, new data, type = "prob")আপনাকে শ্রেণি-নির্দিষ্ট সম্ভাবনা দেয় (যখন objectকখন উত্পন্ন হয় train)।

আপনি নিজের মডেলটি সংজ্ঞায়িত করে এবং আপনার পছন্দসই কাটঅফ প্রয়োগ করে জিনিসগুলি আলাদাভাবে করতে পারেন। caret ওয়েবসাইট এছাড়াও একটি হয়েছে উদাহরণস্বরূপ যে সম্ভাবনা কর্তক নিখুত রীস্যাম্পেলিং ব্যবহার করে।

TL; ড

confusionMatrix পূর্বাভাসীকৃত ক্লাস এবং এইভাবে একটি 50% সম্ভাবনা কাট অফ ব্যবহার করে

ম্যাক্স


14

ধরে নিলাম একটি খুব সহজ উপায় আছে tune <- train(...):

probsTest <- predict(tune, test, type = "prob")
threshold <- 0.5
pred      <- factor( ifelse(probsTest[, "yes"] > threshold, "yes", "no") )
pred      <- relevel(pred, "yes")   # you may or may not need this; I did
confusionMatrix(pred, test$response)

স্পষ্টতই, আপনি যা চেষ্টা করতে চান বা "সেরা" বাছাই করতে চান তার দ্বার নির্ধারণ করতে পারেন, যেখানে সর্বোত্তম মানে সর্বাধিক সম্মিলিত নির্দিষ্টতা এবং সংবেদনশীলতা:

library(pROC)
probsTrain <- predict(tune, train, type = "prob")
rocCurve   <- roc(response = train$response,
                      predictor = probsTrain[, "yes"],
                      levels = rev(levels(train$response)))
plot(rocCurve, print.thres = "best")

সর্বাধিক পোস্ট হওয়া উদাহরণটি দেখার পরে, আমি নিশ্চিত না যে আমার পরিপ্রেক্ষিতে কম পছন্দসই করে এমন কোনও পরিসংখ্যানিক সূক্ষ্মতা আছে কিনা I'm


আউটপুটযুক্ত রকুরিভ প্লটে তিনটি মান বলতে কী বোঝায়? যেমন আমার ডেটাতে এটি 0.289 (0.853, 0.831) বলে। 0.289 কি বাইনারি ফলাফলের সীমা নির্ধারণের জন্য সর্বোত্তম প্রান্তিক চিহ্নটি ব্যবহার করা উচিত? উদাহরণস্বরূপ, পূর্বাভাসপ্রাপ্ত সম্ভাব্যতার প্রতিটি ক্ষেত্রে> ০.২৯৯ "1" কোডিং হবে এবং প্রতিবেদনের সম্ভাব্যতার সাথে প্রতিটি কেস caretপ্যাকেজের 0.5 ডিফল্ট থ্রেশহোল্ডের পরিবর্তে "0" কোডিং হবে ?
coip

2
হ্যাঁ ঠিক তা সঠিক, এবং বন্ধনীগুলির অন্যান্য 2 টি মান হ'ল সংবেদনশীলতা এবং নির্দিষ্টতা (সত্য কথা, তবে আমি যা ভুলে যাই)
efh0888

2
এছাড়াও, তখন থেকে আমি বুঝতে পেরেছি যে আপনি এটি রক বক্ররেখার সাহায্যে বের করতে পারেন rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]যা আপনাকে চাইলে তাদের আলাদাভাবে ওজন করার নমনীয়তা দেয় ... যদি আপনি চান তবে একটি সর্বশেষ বিষয় হ'ল বাস্তববাদী, আপনি সম্ভবত দ্বারটি টিউন করতে চান (যেমন যদি আপনি কোন মডেল hyperparameter সঙ্গে would) সর্বোচ্চ বর্ণনা যেমন এখানে
efh0888
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.