आर

2012-02-13 10 views
8

में रीग्रेशन के लिए यादृच्छिकता मैं आर और यादृच्छिक पैकेज के साथ प्रयोग कर रहा हूं, मुझे एसवीएम और तंत्रिका नेट के साथ कुछ अनुभव है। मेरा पहला परीक्षण कोशिश करना और वापसी करना है: पाप (एक्स) + गाऊशियन शोर। तंत्रिका नेट और एसवीएम के साथ मैं पाप (x) का "अपेक्षाकृत" अच्छा अनुमान प्राप्त करता हूं, इसलिए शोर फ़िल्टर किया जाता है और सीखने वाले एल्गोरिदम अधिक नहीं होते हैं। (सभ्य मानकों के लिए) यादृच्छिक रूप से ऐसा करने पर मेरे पास एक पूरी तरह से अतिरंजित समाधान है। मैं बस का उपयोग (आर 2.14.0, 2.14.1 पर भी कोशिश की, सिर्फ मामले में):आर

library("randomForest") 
x<-seq(-3.14,3.14,by=0.00628) 
noise<-rnorm(1001) 
y<-sin(x)+noise/4 
mat<-matrix(c(x,y),ncol=2,dimnames=list(NULL,c("X","Y"))) 
plot(x,predict(randomForest(Y~.,data=mat),mat),col="green") 
points(x,y) 

मुझे लगता है कि वहाँ इसे सही ढंग से काम करने के लिए randomForest में एक जादू विकल्प है, मैं कुछ है, लेकिन मैं करने की कोशिश की खींचने के लिए सही लीवर नहीं मिला ...

उत्तर

3

आप पेड़ों के आकार को सीमित करने के लिए का उपयोग कर सकते हैं, मैनुअल में उदाहरणों के रूप में।

r <- randomForest(Y~.,data=mat, maxnodes=10) 
plot(x,predict(r,mat),col="green") 
points(x,y) 
+0

यह मैंने कोशिश की एक विकल्प में से एक था, यह थोड़ा बेहतर परिणाम देता है लेकिन यह अभी भी svm और nn की तुलना में बहुत बुरा लगता है ... विकल्प का एक बेहतर सेट होना चाहिए ... – user1206729

+2

दिलचस्प बातों में से एक मशीन सीखना यह है कि एक आकार-फिट नहीं है-सभी विधि। विभिन्न प्रकार के डेटा के लिए कुछ प्रकार के अल्गो बेहतर होते हैं। दुर्भाग्यवश मुझे एक स्रोत रूपरेखा नहीं मिली है कि कौन सी विधि सर्वोत्तम है जिसके लिए डेटा सेट है और इस प्रकार परीक्षण और त्रुटि पर लगभग पूरी तरह निर्भर है। – screechOwl

1

तुम बहुत बेहतर कर सकते हैं (RMSE ~ 0.04, $ आर^2 $> 0.99) छोटे नमूनों या bites पर अलग-अलग पेड़ों प्रशिक्षण के द्वारा के रूप में Breiman उन्हें

कहा जाता है के बाद से एक बड़ी मात्रा में होती है प्रशिक्षण डेटा में शोर, यह समस्या वास्तव में सामान्यीकरण के बजाय चिकनाई के बारे में है। सामान्य मशीन सीखने के नियमों में इसे नियमितकरण में वृद्धि की आवश्यकता होती है। कलाकार सीखने के लिए इसका मतलब विविधता के लिए व्यापार शक्ति है।

यादृच्छिकता की विविधता प्रति विभाजन (mtry आर) में प्रति उम्मीदवार की संख्या को कम करके या प्रत्येक पेड़ के प्रशिक्षण सेट (sampsize आर) में कम करके बढ़ सकती है। चूंकि केवल 1 इनपुट डायमेंशन हैं, mtrysampsize छोड़कर, मदद नहीं करता है। इससे डिफ़ॉल्ट सेटिंग्स पर आरएमएसई में 3.5x सुधार होता है और शोर प्रशिक्षण डेटा पर 6x सुधार होता है। चूंकि बढ़े हुए विभाजन का मतलब व्यक्तिगत शिक्षार्थियों की भविष्यवाणी में भिन्नता है, इसलिए हमें भीड़ की भविष्यवाणी को स्थिर करने के लिए पेड़ों की संख्या में वृद्धि करने की आवश्यकता है।

छोटे बैग, अधिक से अधिक पेड़ :: RMSE = 0.04:

>sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2, 
         replace=FALSE, ntree=5000), 
      mat) 
    - sin(x)) 
[1] 0.03912643 

डिफ़ॉल्ट सेटिंग्स :: RMSE = 0.14: शोर के कारण

> sd(predict(randomForest(Y~.,data=mat),mat) - sin(x)) 
[1] 0.1413018 

त्रुटि प्रशिक्षण सेट में :: rmse = 0 में मूल्यांकन से ऊपर, प्रशिक्षण सेट के खिलाफ किया जा रहा है के रूप में यह मूल प्रश्न में है .25

> sd(y - sin(x)) 
[1] 0.2548882 

त्रुटि शोर के कारण से

noise<-rnorm(1001) 
y<-sin(x)+noise/4 

पाठ्यक्रम स्पष्ट की है।के बाद से इस मुद्दे को नहीं बल्कि सामान्यीकरण से चौरसाई है, इस के रूप में प्रबल यह लग सकता है के रूप में नहीं है, लेकिन यह देखने के लिए कि बैग मूल्यांकन से बाहर आश्वस्त है समान सटीकता पता चलता है:

> sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2, 
          replace=FALSE, ntree=5000)) 
    - sin(x)) 
[1] 0.04059679 
0

मेरे अंतर्ज्ञान है कि:

  • यदि आपके पास 1 आयामी वक्र एफ (एक्स) फिट करने के लिए एक साधारण निर्णय पेड़ था, जो सीढ़ियों के फ़ंक्शन के साथ फिट होने के बराबर होगा (आवश्यक रूप से समान दूरी वाले कूदों के साथ नहीं)
  • यादृच्छिक जंगलों के साथ आप एक रैखिक संयोजन करेंगे सीढ़ियों के कार्यों के

एक सीढ़ी समारोह के लिए एफ (एक्स) का एक अच्छा अनुमानक होने के लिए, आप एक्स अक्ष पर पर्याप्त कदम चाहते हैं, लेकिन प्रत्येक चरण में पर्याप्त अंक होना चाहिए ताकि उनका मतलब एफ (x) और कम का अच्छा अनुमान हो शोर से प्रभावित

तो मेरा सुझाव है कि आप नोडसाइज़ पैरामीटर को ट्यून करें। यदि आपके पास 1 निर्णय पेड़ और एन अंक हैं, और nodesize = n है, तो आपके सीढ़ी समारोह में एन/एन चरण होंगे। एन बहुत छोटा करने के लिए लाता है।

r <- randomForest(Y~.,data=mat, nodesize=30) 
plot(x,predict(r,mat),col="green") 
points(x,y) 

सूचना है कि RMSE अगर आप एन ले छोटे हो जाता है '= 10 * एन और एन' = 10 * n: मैं ~ 30 (RMSE ~ 0.07) n के साथ अच्छा परिणाम मिला है।