2015-07-31 7 views
5

यह सवाल कुछ अन्य (here, here और here) Stackoverflow पर सवाल करने के लिए समान है, लेकिन काफी अलग ताकि मैं अपने मामले में उन उत्तरों को extrapolate नहीं कर सकता।वस्तु '' नहीं मिला, C5.0 साजिश

मेरे पास एक ऐसा कार्य है जिसमें मैं एक सी 5.0 मॉडल फिट करता हूं और मॉडल को प्लॉट करने की कोशिश करता हूं।

train_d <- globald[train_ind,c(features,21)] 
model <- C5.0(binclass ~ .,data=train_d,trials=10) 

binclass मेरी प्रशिक्षण/परीक्षण डाटा में एक स्तंभ नाम है (globald एक dataframe जहाँ से मैं _ind सूचकांक और कॉलम c(3:12,21), जहां स्तंभ 21 binclass नाम पर है के साथ पंक्तियों उपसमुच्चय है)। फिटिंग अच्छी तरह से काम करता है। हालांकि, जब मैं भी तो लाइन

plot(model,trial=0) 

जोड़ने मैं निम्नलिखित त्रुटि मिलती है: Error in is.data.frame(data) : object 'train_d' not found

यह कैसे संभव है कि मॉडल को फ़िट करते समय train_d सही ढंग से पाया और उपयोग किया जाता है, लेकिन साजिश करते समय, train_d कहीं भी नहीं मिला है? और, इस मुद्दे को हल करने का कोई सुझाव। [आर] में नामस्थान मेरे लिए एक रहस्य बना हुआ है।

एक न्यूनतम चल उदाहरण है निम्नलिखित:

f <- function(){ 
    library(C50) 
    set.seed(1) 
    class = c(1,2) 
    d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class) 
    d$binclass <- as.factor(d$binclass) 
    model <- C5.0(binclass ~ ., data=d) 
    plot(model) 
} 

कॉलिंग f() परिणाम निम्न त्रुटि में: Error in is.data.frame(data) : object 'd' not found

संपादित करें: MrFlick से जवाब के अनुसार, ऐसा लगता है कि इस समस्या के कारण सी 5.0 कोड में एक बग है। पास्कल और श्रीफ्लिक द्वारा कुछ कामकाज संकेत दिए गए हैं।

+3

कौन सा "अन्य प्रश्न"? और एक पुनरुत्पादित उदाहरण के बिना, जवाब पाने के लिए जटिल हो जाएगा। –

+1

यह किसी संभावित स्कोप मुद्दे के रूप में नामस्थान समस्या की तरह नहीं लगता है। हालांकि यह आपके द्वारा प्रदान की गई जानकारी से बहुत स्पष्ट नहीं है। आपको एक [पुनरुत्पादित उदाहरण] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) शामिल करना चाहिए जिससे आप यह स्पष्ट कर सकें कि आप क्या कर रहे हैं। – MrFlick

+0

@ पास्कल: एक न्यूनतम कामकाजी उदाहरण प्रदान किया जाता है। मुझे नहीं पता कि यह एक दायरे के मुद्दे का नामस्थान है या नहीं। यह एक मुद्दा है जिसे मैं हल करना चाहता हूं ... – user989762

उत्तर

3

उचित वातावरण में आदेश का मूल्यांकन करने के लिए कोड में एक बग प्रतीत होता है। समस्या C50::model.frame.C5.0 फ़ंक्शन में प्रतीत होती है। मेरे आस-पास के "साफ-सुथरे" काम को आपके मॉडल में terms संपत्ति जोड़ना था। इससे कार्य वातावरण को समाहित करने में मदद मिलेगी।

f <- function(){ 
    library(C50) 
    set.seed(1) 
    class = c(1,2) 
    d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class) 
    d$binclass <- as.factor(d$binclass) 
    model <- C5.0(binclass ~ ., data=d) 
    model$terms <- eval(model$call$formula) #<---- Added line 
    plot(model) 
} 
+0

ठीक है। तो यह सी 5.0 में एक बग प्रतीत होता है? कामकाज हालांकि काम करता है और कम से कम समस्या को कम करता है। – user989762

0

@MrFlick लगभग यह था लेकिन काफी नहीं था। साजिश के लिए यह समस्या विशेष रूप से परेशान होती है जब सी 50 विधि में मनमानी डेटा और लक्ष्य सुविधाओं को पारित करने का प्रयास किया जाता है। जैसा कि श्रीफ्लिक ने बताया है, इसे नामकरण शर्तों के साथ करना था। विधि कॉल में एक्स और वाई शर्तों का नाम बदलकर साजिश समारोह भ्रमित नहीं होगा।

tree_model$call$x <- data_train[, -target_index] 
tree_model$call$y <- data_train[[target_feature]] 

उदाहरण के लिए, यहां मनमाने ढंग से डेटा और एक लक्ष्य सुविधा में गुजर और अभी भी परिणाम साजिश करने में सक्षम होने के लिए एक विधि है:

boosted_trees <- function(data_train, target_feature, iter_choice) { 

    target_index <- grep(target_feature, colnames(data_train)) 
    model_boosted <- C5.0(x = data_train[, -target_index], y = data_train[[target_feature]], trial=iter_choice) 
    model_boosted$call$x <- data_train[, -target_index] 
    model_boosted$call$y <- data_train[[target_feature]] 
    return(model_boosted) 

} 

मॉडल उपरोक्त विधि द्वारा वापस वस्तु साजिश रची जा सकती है सामान्य रूप में।

model <- boosted_trees(data_train, 'my_target', 10) 
plot(model) 
संबंधित मुद्दे