मुझे लगता है कि यह एक पुराना सवाल है, लेकिन मुझे लगता है कि अधिक जोड़ा जाना चाहिए। जैसा कि @Manoel Galdino ने टिप्पणियों में कहा, आमतौर पर आप अनदेखी डेटा पर भविष्यवाणियों में रुचि रखते हैं। लेकिन यह सवाल प्रशिक्षण डेटा पर प्रदर्शन के बारे में है और सवाल यह है कि यादृच्छिक वन प्रशिक्षण डेटा पर खराब प्रदर्शन क्यों करता है ? जवाब बैगेज क्लासिफायर के साथ एक दिलचस्प समस्या को उजागर करता है जिसने मुझे अक्सर परेशान किया है: मतलब के लिए प्रतिगमन।
समस्या यह है कि बेतरतीब जंगल जैसे क्लासीफायर, जो आपके डेटा सेट से बूटस्ट्रैप के नमूने लेकर बनाए जाते हैं, चरम सीमा में खराब प्रदर्शन करते हैं। क्योंकि चरम सीमा में बहुत अधिक डेटा नहीं है, वे आसानी से निकल जाते हैं।
अधिक विस्तार से, याद रखें कि प्रतिगमन के लिए एक यादृच्छिक जंगल बड़ी संख्या में क्लासिफायर का पूर्वानुमान लगाता है। यदि आपके पास एक एकल बिंदु है जो दूसरों से बहुत दूर है, तो कई क्लासिफायरियर इसे नहीं देखेंगे, और ये अनिवार्य रूप से एक आउट-ऑफ-सैंपल भविष्यवाणी कर रहे हैं, जो बहुत अच्छा नहीं हो सकता है। वास्तव में, ये आउट-ऑफ-सैंपल भविष्यवाणियां समग्र बिंदु की ओर डेटा बिंदु के लिए भविष्यवाणी खींचने की कोशिश करेंगे।
यदि आप एकल निर्णय ट्री का उपयोग करते हैं, तो आपको अत्यधिक मानों के साथ समस्या नहीं होगी, लेकिन फिट किए गए प्रतिगमन या तो बहुत रैखिक नहीं होंगे।
यहाँ आर में एक चित्रण है। कुछ डेटा उत्पन्न होता है जिसमें y
पाँच x
चर का एक परिपूर्ण लाइनर संयोजन होता है। फिर एक रैखिक मॉडल और एक यादृच्छिक जंगल के साथ भविष्यवाणियां की जाती हैं। फिर y
प्रशिक्षण डेटा के मूल्यों को भविष्यवाणियों के खिलाफ साजिश रची जाती है। आप स्पष्ट रूप से देख सकते हैं कि यादृच्छिक जंगल चरम सीमा में बुरी तरह से कर रहे हैं क्योंकि बहुत बड़े या बहुत छोटे मूल्यों वाले डेटा y
दुर्लभ हैं।
आप अनदेखी डेटा पर भविष्यवाणियों के लिए एक ही पैटर्न देखेंगे जब रेजीमेंट के लिए यादृच्छिक जंगलों का उपयोग किया जाता है। मुझे यकीन नहीं है कि इससे कैसे बचा जा सकता है। randomForest
आर में समारोह एक कच्चे पूर्वाग्रह सुधार का विकल्प है corr.bias
जो पूर्वाग्रह पर रेखीय प्रतीपगमन का उपयोग करता है, लेकिन यह वास्तव में काम नहीं करता है।
सुझावों का स्वागत है!
beta <- runif(5)
x <- matrix(rnorm(500), nc=5)
y <- drop(x %*% beta)
dat <- data.frame(y=y, x1=x[,1], x2=x[,2], x3=x[,3], x4=x[,4], x5=x[,5])
model1 <- lm(y~., data=dat)
model2 <- randomForest(y ~., data=dat)
pred1 <- predict(model1 ,dat)
pred2 <- predict(model2 ,dat)
plot(y, pred1)
points(y, pred2, col="blue")