आर

2016-01-03 9 views
5

में एक सांख्यिकीय मॉडल का मूल्यांकन करना मेरे पास एक बहुत बड़ा डेटा सेट है (ds)। इसके कॉलम में से एक Popularity है, factor ('हाई'/'लो') टाइप करें।आर

प्रशिक्षण सेट (ds_tr) और एक परीक्षण सेट (ds_te) बनाने के लिए मैंने डेटा को 70% और 30% तक विभाजित किया।

mdl <- glm(formula = popularity ~ . -url , family= "binomial", data = ds_tr) 

तो मैं एक predict वस्तु बनाया (ds_te के लिए इसे फिर से करना होगा)

y_hat = predict(mdl, data = ds_tr - url , type = 'response') 

मैं सटीक मूल्य लगाना चाहते हैं:

मैं निम्नलिखित मॉडल एक रसद प्रतिगमन उपयोग कर बनाई गई है जो 0.5 के कटऑफ थ्रेसहोल्ड से मेल खाता है और 0.5 का कटऑफ थ्रेसहोल्ड से मेल खाता है, इसलिए मैंने किया:

library(ROCR) 
pred <- prediction(y_hat, ds_tr$popularity) 
perf <- performance(pred, "prec", "rec") 

परिणाम कई मूल्यों

str(perf) 

Formal class 'performance' [package "ROCR"] with 6 slots 
    [email protected] x.name  : chr "Recall" 
    [email protected] y.name  : chr "Precision" 
    [email protected] alpha.name : chr "Cutoff" 
    [email protected] x.values :List of 1 
    .. ..$ : num [1:27779] 0.00 7.71e-05 7.71e-05 1.54e-04 2.31e-04 ... 
    [email protected] y.values :List of 1 
    .. ..$ : num [1:27779] NaN 1 0.5 0.667 0.75 ... 
    [email protected] alpha.values:List of 1 
    .. ..$ : num [1:27779] Inf 0.97 0.895 0.89 0.887 ... 

मैं 0.5 के एक कटऑफ सीमा के लिए इसी विशिष्ट परिशुद्धता और याद मूल्यों कैसे प्राप्त कर सकता की एक तालिका है?

+0

स्पष्टीकरण में सुधार है और अनुरोध किया मूल्य प्राप्त करने के लिए तरीके की व्याख्या। – PereG

उत्तर

1

(सूची + @ के संयोजन के माध्यम से) Acces प्रदर्शन वस्तु के स्लॉट हम सभी संभव मूल्यों के साथ एक डाटासेट बनाने के लिए:

probab.cuts <- data.frame([email protected][[1]], [email protected][[1]], [email protected][[1]]) 

आप सभी जुड़े मूल्यों

देख सकते हैं
probab.cuts 

यदि आप selec करना चाहते हैं टी अनुरोध किया मूल्यों, यह करने के लिए मामूली बात है:

tail(probab.cuts[probab.cuts$cut > 0.5,], 1) 

मैनुअल जांच

tab <- table(ds_tr$popularity, y_hat > 0.5) 
tab[4]/(tab[4]+tab[2]) # recall 
tab[4]/(tab[4]+tab[3]) # precision 
+0

धन्यवाद, लेकिन परीक्षण सेट (ds_te) पर मॉडल का मूल्यांकन करने का प्रयास करते समय मुझे अभी भी एक समस्या है क्योंकि y_hat लंबाई में भिन्न है तो ds_te $ लोकप्रियता। कोई विचार? – user2878881

+0

वास्तव में, परीक्षण डेटा का उपयोग मॉडल का आकलन करने के लिए यह अधिक सही है। तो, अनुमान लगाएं और उपयोग करें: "y_hat_test <- भविष्यवाणी (mdl, data = ds_te - url, type = 'response')" और नए डेटा के साथ "pred" और "perf" की गणना करें। अंत में, तालिका के फ़ंक्शन में "ds_te $ लोकप्रियता" और नया "y_hat_test" के साथ इस उत्तर के कोड का उपयोग करें। – PereG