विकर्ण पार आरओसी वक्र


12

मैं इस समय बाइनरी क्लासिफायरियर चला रहा हूं। जब मैं आरओसी वक्र की साजिश करता हूं तो मुझे शुरुआत में एक अच्छी लिफ्ट मिलती है, फिर यह दिशा बदलता है और विकर्ण को पार करता है, फिर निश्चित रूप से वक्र को आकार की तरह झुका हुआ एस बनाता है।

इस आशय की व्याख्या / व्याख्या क्या हो सकती है?

धन्यवाद


1
आपने आरओसी वक्र के बारे में क्या परवाह की है? प्रत्यक्ष संभावना मॉडल के बजाय आपने एक क्लासिफायर का चयन क्या किया?
फ्रैंक हरेल

जवाबों:


18

आपको एक अच्छा सममित आरओसी प्लॉट तभी मिलता है जब दोनों परिणामों के लिए मानक विचलन समान होते हैं। यदि वे अलग-अलग हैं, तो आप वास्तव में आपके द्वारा वर्णित परिणाम प्राप्त कर सकते हैं।

निम्नलिखित Mathematica कोड इसे प्रदर्शित करता है। हम मानते हैं कि एक लक्ष्य प्रतिक्रिया स्थान में एक सामान्य वितरण देता है, और यह शोर एक सामान्य वितरण भी देता है, लेकिन एक विस्थापित। आरओसी मापदंडों को गॉसियन घटता के नीचे के क्षेत्र द्वारा निर्णय की कसौटी के बाईं या दाईं ओर निर्धारित किया जाता है। इस मानदंड के अनुसार आरओसी वक्र का वर्णन करता है।

Manipulate[
 ParametricPlot[{CDF[NormalDistribution[4, \[Sigma]], c], 
                 CDF[NormalDistribution[0, 3], c]
                }, {c, -10, 10}, 
                Frame -> True, 
                Axes -> None, PlotRange -> {{0, 1}, {0, 1}}, 
                Epilog -> Line[{{0, 0}, {1, 1}}]], 
 {{\[Sigma], 3}, 0.1, 10, Appearance -> "Labeled"}]

यह समान मानक विचलन के साथ है: यहाँ छवि विवरण दर्ज करें

यह अलग-अलग लोगों के साथ है:

यहाँ छवि विवरण दर्ज करें

या कुछ और मापदंडों के साथ खेलने के लिए:

Manipulate[
 ParametricPlot[{CDF[NormalDistribution[\[Mu]1, \[Sigma]1], c], 
   CDF[NormalDistribution[\[Mu]2, \[Sigma]2], c]}, {c, -100, 100}, 
  Frame -> True, Axes -> None, PlotRange -> {{0, 1}, {0, 1}}, 
  Epilog -> Line[{{0, 0}, {1, 1}}]], {{\[Mu]1, 0}, 0, 10, 
  Appearance -> "Labeled"},
 {{\[Sigma]1, 4}, 0.1, 20, Appearance -> "Labeled"},
 {{\[Mu]2, 5}, 0, 10, Appearance -> "Labeled"},
 {{\[Sigma]2, 4}, 0.1, 20, Appearance -> "Labeled"}]

यहाँ छवि विवरण दर्ज करें


1

उच्च FPR के साथ वक्र के भाग में नकारात्मक उदाहरणों की एक स्ट्रिंग होने से इस तरह का वक्र बन सकता है। यह ठीक है जब तक आप आरओसी वक्र बनाने के लिए सही एल्गोरिदम का उपयोग कर रहे हैं।

ऐसी स्थिति जहां आपके पास 2 मी अंक का एक सेट होता है, जिनमें से आधे सकारात्मक होते हैं और आधे नकारात्मक होते हैं। यदि अंक के आधार पर अंकों को छांटते समय (आरओसी प्लॉटिंग में मानक प्रक्रिया) सभी नकारात्मक उदाहरण पहले सामने आए हैं, तो इससे आपका आरओसी वक्र फ्लैट रहेगा और दाईं ओर ले जाएगा। इस तरह के मुद्दों की देखभाल करने के लिए पेपर पर बात करता है। :

फॉसेट | आरओसी घटता प्लॉटिंग


1

(@Sjoerd C. de Vries और @Hrishekesh Ganu के उत्तर सही हैं। मुझे लगा कि मैं फिर भी विचारों को दूसरे तरीके से प्रस्तुत कर सकता हूं, जिससे कुछ लोगों को मदद मिल सकती है।)


आप एक आरओसी प्राप्त कर सकते हैं जैसे कि यदि आपका मॉडल गलत है। नीचे दिए गए उदाहरण (कोडित R) पर विचार करें , जो कि मेरे उत्तर से अनुकूलित है: कैसे बॉक्सप्लेट का उपयोग उस बिंदु को खोजने के लिए किया जाता है जहां विभिन्न परिस्थितियों से आने वाले मूल्यों की अधिक संभावना है?

## data
Cond.1 = c(2.9, 3.0, 3.1, 3.1, 3.1, 3.3, 3.3, 3.4, 3.4, 3.4, 3.5, 3.5, 3.6, 3.7, 3.7,
           3.8, 3.8, 3.8, 3.8, 3.9, 4.0, 4.0, 4.1, 4.1, 4.2, 4.4, 4.5, 4.5, 4.5, 4.6,
           4.6, 4.6, 4.7, 4.8, 4.9, 4.9, 5.5, 5.5, 5.7)
Cond.2 = c(2.3, 2.4, 2.6, 3.1, 3.7, 3.7, 3.8, 4.0, 4.2, 4.8, 4.9, 5.5, 5.5, 5.5, 5.7,
           5.8, 5.9, 5.9, 6.0, 6.0, 6.1, 6.1, 6.3, 6.5, 6.7, 6.8, 6.9, 7.1, 7.1, 7.1,
           7.2, 7.2, 7.4, 7.5, 7.6, 7.6, 10, 10.1, 12.5)
dat    = stack(list(cond1=Cond.1, cond2=Cond.2))
ord    = order(dat$values)
dat    = dat[ord,]  # now the data are sorted

## logistic regression models
lr.model1 = glm(ind~values,             dat, family="binomial")  # w/o a squared term
lr.model2 = glm(ind~values+I(values^2), dat, family="binomial")  # w/  a squared term
lr.preds1 = predict(lr.model1, data.frame(values=seq(2.3,12.5,by=.1)), type="response")
lr.preds2 = predict(lr.model2, data.frame(values=seq(2.3,12.5,by=.1)), type="response")

## here I plot the data & the 2 models
windows()
  with(dat, plot(values, ifelse(ind=="cond2",1,0), 
                 ylab="predicted probability of condition2"))
  lines(seq(2.3,12.5,by=.1), lr.preds1, lwd=2, col="red")
  lines(seq(2.3,12.5,by=.1), lr.preds2, lwd=2, col="blue")
  legend("bottomright", legend=c("model 1", "model 2"), lwd=2, col=c("red", "blue"))

यहाँ छवि विवरण दर्ज करें

यह देखना आसान है कि लाल मॉडल डेटा की संरचना को याद कर रहा है। हम देख सकते हैं कि नीचे प्लॉट किए जाने पर ROC घटता क्या दिखता है:

library(ROCR)  # we'll use this package to make the ROC curve

## these are necessary to make the ROC curves
pred1 = with(dat, prediction(fitted(lr.model1), ind))
pred2 = with(dat, prediction(fitted(lr.model2), ind))
perf1 = performance(pred1, "tpr", "fpr")
perf2 = performance(pred2, "tpr", "fpr")

## here I plot the ROC curves
windows()
  plot(perf1, col="red",  lwd=2)
  plot(perf2, col="blue", lwd=2, add=T)
  abline(0,1, col="gray")
  legend("bottomright", legend=c("model 1", "model 2"), lwd=2, col=c("red", "blue"))

यहाँ छवि विवरण दर्ज करें

80%

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.