मैं बाइनरी वर्गीकरण के लिए यादृच्छिक वन मॉडल बनाने के लिए कैरट का उपयोग करने की कोशिश कर रहा हूं। मैंने अतीत में ऐसा करने के लिए यादृच्छिक स्रोत पैकेज का उपयोग किया है और यह ठीक काम किया है, लेकिन कैरट का उपयोग करके मेरा उत्पादन द्विआधारी है, फिर संभावना है। टाइप = 'प्रोब' के साथ, यह त्रुटि देता है
[.data.frame
में त्रुटि (बाहर, अवलोकन, ड्रॉप = FALSE): अपरिभाषित कॉलम चयनित
मैं दोनों के लिए एक ही वाक्यविन्यास (मुझे आशा है) का उपयोग कर रहा हूं। यह वही है जो मैं स्रोत randomForest पैकेज के साथ प्राप्त करता था।
>fit = randomForest(x = a[,-1], y = as.factor(a[,1]),ntree=120)
>head(predict(fit, newdata = test_data[,-c(1:2)], type = "prob")[,2])
1 2 3 4 5 6
0.04166667 0.03333333 0.55833333 0.80000000 0.87500000 0.04166667
अब, कैरट का उपयोग करके मैं ऐसा ही करने की कोशिश कर रहा हूं, लेकिन इसकी भविष्यवाणी में "टाइप = 'प्रोब" स्वीकार नहीं कर रहा हूं, मुझे त्रुटि दे रहा है
>rf_model<-train(x = a[,-1], y = as.factor(a[,1]),method="rf",ntree=120)
>head(predict(rf_model, test_data[,-c(1:2)], type="prob"))
Error in `[.data.frame`(out, , obsLevels, drop = FALSE) :
undefined columns selected
बल्कि जब मैं "प्रकार" निकालता हूं, तो यह मुझे देता है
>head(predict(rf_model, test_data[,-c(1:2)]))
[1] 0 0 1 1 1 0
Levels: 0 1
मैं संभावनाओं में आउटपुट कैसे प्राप्त करूं?
मुझे इसके बाद कई एल्गोरिदम बनाने की आवश्यकता है और मुझे लगता है कि कैरट ऐसा करने के लिए अधिक सजातीय होगा। मुझे यकीन है कि मैं यहां कुछ याद कर रहा हूं, लेकिन कैरट के लिए नया होने के कारण मुझे नहीं पता कि क्या है।
4 जवाब
अद्यतन: मैंने यहां के माध्यम से समाधान पाया। जाहिर है, लक्ष्य चर में 0 और 1 बाइनरी क्लास मान को संभालने के साथ कैरेट की ट्रेन अच्छी नहीं है। उन्हें किसी भी स्ट्रिंग ('आर' और 'एस') में बदलना पूरी तरह से काम करता है।
> a$dv<-gsub('0','r',a$dv)
> a$dv<-gsub('1','s',a$dv)
> rf_model<-train(x = a[,-c(1:2)], y = as.factor(a[,2]),method="rf",ntree=120)
> head(predict(rf_model, test_data[,-c(1:2)], type="prob"))
r s
1 0.9750000 0.025000000
2 0.9916667 0.008333333
3 0.2583333 0.741666667
4 0.2833333 0.716666667
5 0.1583333 0.841666667
6 1.0000000 0.000000000
type = "prob"
रखने की कोशिश करें, ताकि भविष्यवाणियां होंगी:
prd <- predict(rf_model, test_data[,-c(1:2)], type="prob")
लेकिन कैरट में जो भी करें:
as.factor(as.numeric(prd >= .5))
यह कैरेट v6.0-41 के साथ ठीक काम करता है:
library(caret)
set.seed(1)
rf_model <- train(x = iris[,-5], y = as.factor(iris[,5]), method="rf", ntree=120)
tail(predict(rf_model, iris[, -5], type="prob"))
setosa versicolor virginica
145 0 0.000000000 1.0000000
146 0 0.000000000 1.0000000
147 0 0.008333333 0.9916667
148 0 0.000000000 1.0000000
149 0 0.000000000 1.0000000
150 0 0.025000000 0.9750000
R संस्करण 3.0.3 (2014-03-06) प्लेटफ़ॉर्म: x86_64-w64-mingw32 / x64 (64-बिट)
मुझे लगता है कि समस्या आपके प्रशिक्षण डेटा ( a, - 1] ) और परीक्षण डेटा ( test_data [, - c (1: 2)] ) से नहीं होती है। एक ही कॉलम।
आपने शायद बहुत पहले ही इसे हल कर लिया है ... लेकिन कैरेट के वर्तमान सुधार पर, टाइप 2 के लिए 2 स्तर कारक आउटपुट के लिए "प्रोब" टाइप करें 2 कॉलम: 0 की संभावना, 1 की संभावना (या जो भी आपके 2 स्तर हैं)।