आर

2013-11-04 10 views
15

में यादृच्छिक वन/क्रॉस सत्यापन करने के लिए कैसे करें मैं एक प्रतिगमन यादृच्छिक वन मॉडल पर क्रॉस सत्यापन करने का कोई तरीका नहीं ढूंढ पा रहा हूं जिसे मैं उत्पादन करने की कोशिश कर रहा हूं।आर

तो मेरे पास एक प्रतिक्रिया चर (प्रतिधारण समय) के साथ 1664 स्पष्टीकरण चर (विभिन्न रासायनिक गुण) युक्त डेटासेट है। मैं अपने अवधारण समय के कुछ के रासायनिक गुणों की भविष्यवाणी करने में सक्षम होने के लिए एक प्रतिगमन यादृच्छिक वन मॉडल का उत्पादन करने की कोशिश कर रहा हूं।

ID RT (seconds) 1_MW 2_AMW 3_Sv 4_Se 
4281 38 145.29 5.01 14.76 28.37 
4952 40 132.19 6.29 11 21.28 
4823 41 176.21 7.34 12.9 24.92 
3840 41 174.24 6.7 13.99 26.48 
3665 42 240.34 9.24 15.2 27.08 
3591 42 161.23 6.2 13.71 26.27 
3659 42 146.22 6.09 12.6 24.16 

यह मेरे पास तालिका का एक उदाहरण है। मैं मूल रूप से 1 एमडब्लू, आदि (1664 चर तक) के खिलाफ आरटी प्लॉट करना चाहता हूं, इसलिए मुझे पता चल सकता है कि इनमें से कौन सा चर महत्वपूर्ण है और जो नहीं हैं।

मुझे क्या करना: -

r = randomForest(RT..seconds.~., data = cadets, importance =TRUE, do.trace = 100) 
varImpPlot(r) 

जो मुझसे कहता है जो चर महत्व के नहीं हैं और क्या है, जो बहुत अच्छा है। हालांकि, मैं अपने डेटासेट को विभाजित करने में सक्षम होना चाहता हूं ताकि मैं उस पर क्रॉस सत्यापन कर सकूं। मुझे एक ऑनलाइन ट्यूटोरियल मिला जो समझाता है कि इसे कैसे किया जाए, लेकिन प्रतिगमन के बजाय वर्गीकरण मॉडल के लिए।

मैं समझता हूँ कि तुम क्या: -

k = 10 
n = floor(nrow(cadets)/k) 
i = 1 
s1 = ((i-1) * n+1) 
s2 = (i * n) 
subset = s1:s2 

कितने पार परतों आप क्या करना चाहते परिभाषित करने के लिए, और प्रत्येक गुना के आकार, और उप-समूह की प्रारंभ और समाप्ति मान सेट करने के। हालांकि, मुझे नहीं पता कि बाद में क्या करना है। मुझे लूप के बारे में बताया गया था लेकिन मुझे ईमानदारी से यह नहीं पता कि यह कैसे करना है। न ही मुझे पता है कि सटीकता/त्रुटि के स्तर को दर्शाने के लिए सत्यापन सेट और परीक्षण ग्राफ़ को उसी ग्राफ़ पर कैसे प्लॉट करना है।

यदि आप कृपया मेरी मदद कर सकते हैं तो मैं हमेशा बहुत आभारी रहूंगा, धन्यवाद!

+0

आप आर में सीवी में रुचि रखते हैं, तो अभी भी कम से कम जोड़ी है ] (http://cran.r-project.org/web/packages/cvTools/cvTools.pdf) – topchef

उत्तर

0

यह वास्तव में तेज है और साथ ही साथ साइकेकिट-लर्न लाइब्रेरी (http://scikit-learn.org/stable/modules/cross_validation.html) का उपयोग करके पाइथन में करना आसान है। आप के-फ़ोल्ड सत्यापन कर सकते हैं, स्तरीकृत के-फ़ोल्ड (जो सुनिश्चित करता है कि वर्गों को प्रत्येक गुना में समान रूप से वितरित किया जाता है), एक को छोड़ दें, और अन्य।

आरओसी वक्र, फीचर आयात, और अन्य मूल्यांकन मीट्रिक उत्पन्न करना भी बहुत आसान है।

यहां एक त्वरित उदाहरण है:

y = data[1:, 0].astype(np.float) 
X = data[1:, 1:].astype(np.float) 
cv = StratifiedKFold(y, n_folds = 5) 

precision = [] 
accuracy = [] 
sensitivity = [] 
matthews = [] 
r2   = [] 
f1   = [] 
auroc  = [] 
cm   = [[0, 0], [0, 0]] 

for i, (train, test) in enumerate(cv): 
    probas_  = rf.fit(X[train], y[train]).predict_proba(X[test]) 
    classes  = rf.fit(X[train], y[train]).predict(X[test]) 
    r2   = np.append(r2, (r2_score(y[test], probas_[:, 1]))) 
    precision = np.append(precision, (precision_score(y[test], classes))) 
    auroc  = np.append(auroc, (roc_auc_score(y[test], classes))) 
    accuracy = np.append(accuracy, (accuracy_score(y[test], classes))) 
    sensitivity = np.append(sensitivity, (recall_score(y[test], classes))) 
    f1   = np.append(f1, (f1_score(y[test], classes))) 
    matthews = np.append(matthews, (matthews_corrcoef(y[test], classes))) 
    cma   = np.add(cma, (confusion_matrix(y[test], classes))) 

cma   = np.array(cma) 
r2   = np.array(r2) 
precision = np.array(precision) 
accuracy = np.array(accuracy) 
sensitivity = np.array(sensitivity) 
f1   = np.array(f1) 
auroc  = np.array(auroc) 
matthews = np.array(matthews) 

print("KF Accuracy: %0.2f (+/- %0.2f)" % (accuracy.mean(), accuracy.std() * 2)) 
print("KF Precision: %0.2f (+/- %0.2f)" % (precision.mean(), precision.std() * 2)) 
print("KF Sensitivity: %0.2f (+/- %0.2f)" % (sensitivity.mean(), sensitivity.std() * 2)) 
print("KF R^2: %0.2f (+/- %0.2f)" % (r2.mean(), r2.std() * 2)) 
print("KF F1: %0.2f (+/- %0.2f)" % (f1.mean(), f1.std() * 2)) 
print("KF AUROC: %0.2f (+/- %0.2f)" % (auroc.mean(), auroc.std() * 2)) 
print("KF Matthews: %0.2f (+/- %0.2f)" % (matthews.mean(), matthews.std() * 2)) 
print("Confusion Matrix", cma) 
+5

यह कैसे भी हो स्वीकार किए जाते हैं जवाब, उपयोगकर्ता अनुसंधान का उपयोग कर एक जवाब पूछा सकता है, आप अजगर का उपयोग कर दिए .... –

28
source से

:

बाहर के बैग (OOB) त्रुटि का अनुमान

यादृच्छिक जंगलों में क्रॉस-मान्यता या एक अलग परीक्षण करने के लिए सेट के लिए कोई जरूरत नहीं है परीक्षण सेट त्रुटि का निष्पक्ष अनुमान प्राप्त करें। यह आंतरिक रूप से अनुमान लगाया गया है ... चलाने के दौरान,

विशेष रूप से, predict.randomForest बाहर के बैग भविष्यवाणी लौटाता है यदि newdata नहीं दिया जाता है।

10

topchef pointed out को क्रॉस-मान्यता से अधिक फिटिंग के खिलाफ एक गार्ड के रूप आवश्यक नहीं है। यह यादृच्छिक वन एल्गोरिदम की एक अच्छी विशेषता है।

ऐसा लगता है कि आपका लक्ष्य विशेषता चयन है, इस उद्देश्य के लिए क्रॉस-सत्यापन अभी भी उपयोगी है। RandomForest पैकेज के भीतर rfcv() फ़ंक्शन पर नज़र डालें। दस्तावेज़ीकरण डेटा फ्रेम & वेक्टर के इनपुट को निर्दिष्ट करता है, इसलिए मैं उन्हें आपके डेटा के साथ बनाकर शुरू करूंगा। [कैरट] (http://cran.r-project.org/web/packages/caret/caret.pdf) और [cvTools:

set.seed(42) 
x <- cadets 
x$RT..seconds. <- NULL 
y <- cadets$RT..seconds. 

rf.cv <- rfcv(x, y, cv.fold=10) 

with(rf.cv, plot(n.var, error.cv)) 
+2

क्या यह फ़ंक्शन वास्तव में क्रॉस-सत्यापन कर रहा है? क्या यह इस्तेमाल किए गए चर की मात्रा के संबंध में त्रुटि नहीं दिखा रहा है? – marbel