R: मैं gbm और randomForest के आंशिक निर्भरता भूखंडों में क्या देखते हैं?


14

दरअसल, मुझे लगा कि मैं समझ गया था कि आंशिक निर्भरता की साजिश के साथ कोई क्या दिखा सकता है, लेकिन एक बहुत ही सरल काल्पनिक उदाहरण का उपयोग करते हुए, मैं बल्कि हैरान रह गया। कोड की निम्न हिस्सा में मैं तीन स्वतंत्र चर (उत्पन्न एक , , ) और एक आश्रित चर ( y ) के साथ के साथ एक करीबी रैखिक संबंध दिखा y है, जबकि एक और के साथ uncorrelated हैं y । मैं आर पैकेज का उपयोग करके एक बढ़ाया प्रतिगमन पेड़ के साथ एक प्रतिगमन विश्लेषण करता हूं gbm:

a <- runif(100, 1, 100)
b <- runif(100, 1, 100)
c <- 1:100 + rnorm(100, mean = 0, sd = 5)
y <- 1:100 + rnorm(100, mean = 0, sd = 5)
par(mfrow = c(2,2))
plot(y ~ a); plot(y ~ b); plot(y ~ c)
Data <- data.frame(matrix(c(y, a, b, c), ncol = 4))
names(Data) <- c("y", "a", "b", "c")
library(gbm)
gbm.gaus <- gbm(y ~ a + b + c, data = Data, distribution = "gaussian")
par(mfrow = c(2,2))
plot(gbm.gaus, i.var = 1)
plot(gbm.gaus, i.var = 2)
plot(gbm.gaus, i.var = 3)

नहीं आश्चर्यजनक रूप से, चर के लिए एक और आंशिक निर्भरता भूखंडों की औसत के आसपास क्षैतिज लाइनों उपज एक । क्या पहेली मुझे चर के लिए साजिश है । मैं श्रेणियों के लिए क्षैतिज लाइनों मिल <40 और > 60 और y- अक्ष का मतलब के करीब मान के लिए प्रतिबंधित है y । चूंकि a और b पूरी तरह से y से असंबंधित हैं (और इस प्रकार मॉडल में चर महत्व 0 है), मुझे उम्मीद थी कि cअपने मूल्यों की एक बहुत ही सीमित सीमा के लिए उस सिग्मॉइड आकृति के बजाय इसकी पूरी सीमा के साथ आंशिक निर्भरता दिखाएगा। मैंने फ्रीडमैन (2001) "लालची फ़ंक्शन सन्निकटन: एक ढाल बूस्टिंग मशीन" और हस्ती एट अल में जानकारी खोजने की कोशिश की। (२०११) "एलिमेंट ऑफ़ स्टैटिस्टिकल लर्निंग", लेकिन इसमें सभी समीकरणों और सूत्रों को समझने के लिए मेरे गणितीय कौशल बहुत कम हैं। इस प्रकार मेरा प्रश्न: वेरिएबल c के लिए आंशिक निर्भरता प्लॉट का आकार क्या निर्धारित करता है ? (कृपया एक गैर-गणितज्ञ के लिए समझदार शब्दों में समझाएं!)

17 अप्रैल 2014 को जोड़ा गया:

प्रतिक्रिया की प्रतीक्षा करते समय, मैंने R- पैकेज के विश्लेषण के लिए उसी उदाहरण डेटा का उपयोग किया randomForest। रैंडम फ़ॉरस्टेस्ट की आंशिक निर्भरता भूखंडों से बहुत कुछ मिलता जुलता है जो मुझे gbm भूखंडों से उम्मीद थी: व्याख्यात्मक चरों की आंशिक निर्भरता a और b यादृच्छिक रूप से और लगभग 50 भिन्न होती है, जबकि व्याख्यात्मक चर c अपनी पूरी सीमा (और लगभग) पर आंशिक निर्भरता दिखाता है y की पूरी श्रृंखला )। क्या में आंशिक निर्भरता भूखंडों के इन अलग अलग आकार के लिए कारण हो सकते हैं gbmऔर randomForest?

gbm और randomForest के आंशिक प्लॉट

यहाँ भूखंडों की तुलना करने वाला संशोधित कोड:

a <- runif(100, 1, 100)
b <- runif(100, 1, 100)
c <- 1:100 + rnorm(100, mean = 0, sd = 5)
y <- 1:100 + rnorm(100, mean = 0, sd = 5)
par(mfrow = c(2,2))
plot(y ~ a); plot(y ~ b); plot(y ~ c)
Data <- data.frame(matrix(c(y, a, b, c), ncol = 4))
names(Data) <- c("y", "a", "b", "c")

library(gbm)
gbm.gaus <- gbm(y ~ a + b + c, data = Data, distribution = "gaussian")

library(randomForest)
rf.model <- randomForest(y ~ a + b + c, data = Data)

x11(height = 8, width = 5)
par(mfrow = c(3,2))
par(oma = c(1,1,4,1))
plot(gbm.gaus, i.var = 1)
partialPlot(rf.model, Data[,2:4], x.var = "a")
plot(gbm.gaus, i.var = 2)
partialPlot(rf.model, Data[,2:4], x.var = "b")
plot(gbm.gaus, i.var = 3)
partialPlot(rf.model, Data[,2:4], x.var = "c")
title(main = "Boosted regression tree", outer = TRUE, adj = 0.15)
title(main = "Random forest", outer = TRUE, adj = 0.85)

1
आप वास्तव में हाइपरपरमेट्स को स्पर्श करने के लिए ट्यून कर सकते हैं। मुझे यकीन नहीं है कि पेड़ों की डिफ़ॉल्ट संख्या gbm में क्या है, लेकिन यह इतना छोटा हो सकता है कि एक स्वस्थ वक्रता सीखने का समय न हो।
शिया पार्क्स

@ शिया पार्क - तुम सही हो। पेड़ों की डिफॉल्ट संख्या 100 है जो एक अच्छा मॉडल उत्पन्न करने के लिए पर्याप्त नहीं थी। 2000 पेड़ों के साथ gbm और यादृच्छिक वन के आंशिक निर्भरता भूखंड लगभग समान हैं।
user7417

जवाबों:


7

मैंने कुछ समय बिताने के बाद अपना "आंशिक.फंक्शन-प्लॉटर" लिखने से पहले ही महसूस कर लिया था कि यह आर रैंडमॉर्फेस्ट लाइब्रेरी में पहले से ही बंडल था।

[संपादित करें ... लेकिन फिर मैंने CRAN पैकेज वनफ्लूर बनाने में एक साल बिताया , जो कि मेरी राय से शास्त्रीय आंशिक निर्भरता भूखंडों की तुलना में काफी बेहतर है]

Partial.function कथानक उदाहरणों में महान हैं क्योंकि यह अनुकरण उदाहरण आप यहाँ दिखाते हैं, जहाँ व्याख्या करने वाले चर अन्य चर के साथ बातचीत नहीं करते हैं। यदि प्रत्येक समझाने वाला चर किसी अज्ञात फ़ंक्शन द्वारा लक्ष्य-वाई में योगात्मक योगदान देता है, तो यह विधि उस अनुमानित छिपे हुए फ़ंक्शन को दिखाने के लिए बहुत बढ़िया है। मैं अक्सर आंशिक कार्यों की सीमाओं में इस तरह के चपटे को देखता हूं।

कुछ कारण: randomForsest में एक तर्क होता है जिसे 'nodesize = 5' कहा जाता है, जिसका अर्थ है कि कोई भी पेड़ 5 सदस्यों या उससे कम के समूह को वश में नहीं करेगा। इसलिए प्रत्येक पेड़ आगे की सटीकता के साथ अंतर नहीं कर सकता है। व्यक्तिगत पेड़ों के कई चरण कार्यों को मतदान करके सुनिश्चित करने की चिकनी परत को बूट करना / बूटस्ट्रैप करना - लेकिन केवल डेटा क्षेत्र के बीच में। डेटा का प्रतिनिधित्व अंतरिक्ष की सीमाओं के पास, आंशिक रूप से 'आयाम' गिर जाएगा। नोड्साइज़ = 3 और / या शोर की तुलना में अधिक अवलोकन प्राप्त करना, इस सीमा समतल प्रभाव को कम कर सकता है ... जब रैंडम फ़ॉरेस्ट में ध्वनि अनुपात का संकेत सामान्य रूप से घटता है तो भविष्यवाणियां संघनित हो जाती हैं। इस प्रकार भविष्यवाणियां बिल्कुल सटीक नहीं हैं, लेकिन केवल रैखिक रूप से लक्ष्य के साथ सहसंबद्ध हैं। आप ए और बी मानों को शोर अनुपात के उदाहरण और बेहद कम संकेत के रूप में देख सकते हैं, और इसलिए ये आंशिक कार्य बहुत सपाट हैं। यह यादृच्छिक जंगल की एक अच्छी विशेषता है जो आप पहले से ही प्रशिक्षण सेट की भविष्यवाणियों की सीमा से अनुमान लगा सकते हैं कि मॉडल कितना अच्छा प्रदर्शन कर रहा है। OOB.predictions भी महान है ..

बिना डेटा वाले क्षेत्रों में आंशिक भूखंड का समतल होना वाजिब है: जैसा कि रैंडम फ़ॉरेस्ट और CART डेटा चालित मॉडलिंग हैं, मैं व्यक्तिगत रूप से इस अवधारणा को पसंद करता हूं कि ये मॉडल अतिरिक्त नहीं हैं। इस प्रकार c = 500 या c = 1100 की भविष्यवाणी c = 100 के समान है या अधिकांश उदाहरणों में भी c = 98 है।

यहाँ एक कोड उदाहरण सीमा समतल के साथ कम किया गया है:

मैंने gbm पैकेज की कोशिश नहीं की है ...

यहाँ कुछ उदाहरण कोड अपने eaxample पर आधारित है ...

#more observations are created...
a <- runif(5000, 1, 100)
b <- runif(5000, 1, 100)
c <- (1:5000)/50 + rnorm(100, mean = 0, sd = 0.1)
y <- (1:5000)/50 + rnorm(100, mean = 0, sd = 0.1)
par(mfrow = c(1,3))
plot(y ~ a); plot(y ~ b); plot(y ~ c)
Data <- data.frame(matrix(c(y, a, b, c), ncol = 4))
names(Data) <- c("y", "a", "b", "c")
library(randomForest)
#smaller nodesize "not as important" when there number of observartion is increased
#more tress can smooth flattening so boundery regions have best possible signal to             noise, data specific how many needed

plot.partial = function() {
partialPlot(rf.model, Data[,2:4], x.var = "a",xlim=c(1,100),ylim=c(1,100))
partialPlot(rf.model, Data[,2:4], x.var = "b",xlim=c(1,100),ylim=c(1,100))
partialPlot(rf.model, Data[,2:4], x.var = "c",xlim=c(1,100),ylim=c(1,100))
}

#worst case! : with 100 samples from Data and nodesize=30
rf.model <- randomForest(y ~ a + b + c, data = Data[sample(5000,100),],nodesize=30)
plot.partial()

#reasonble settings for least partial flattening by few observations: 100 samples and nodesize=3 and ntrees=2000
#more tress can smooth flattening so boundery regions have best possiblefidelity
rf.model <- randomForest(y ~ a + b + c, data = Data[sample(5000,100),],nodesize=5,ntress=2000)
plot.partial()

#more observations is great!
rf.model <- randomForest(y ~ a + b + c,
 data = Data[sample(5000,5000),],
 nodesize=5,ntress=2000)
plot.partial()

4

जैसा कि ऊपर टिप्पणी में कहा गया है, gbm मॉडल कुछ पैरामीटर ट्यूनिंग के साथ बेहतर होगा। मॉडल में समस्याओं को हल करने का एक आसान तरीका और ऐसे मापदंडों की आवश्यकता कुछ नैदानिक ​​भूखंडों को उत्पन्न करना है। उदाहरण के लिए, डिफ़ॉल्ट मापदंडों के साथ ऊपर gbm मॉडल के लिए (और प्लॉटो पैकेज का उपयोग करके हमारे पास प्लॉट बनाने के लिए)

gbm.gaus <- gbm(y~., data = Data, dist = "gaussian")
library(plotmo)   # for the plotres function
plotres(gbm.gaus) # plot the error per ntrees and the residuals

जो देता है

भूखंड

बाएं हाथ के भूखंड में हम देखते हैं कि त्रुटि वक्र नीचे नहीं गिरा है। और दाहिने हाथ में भूखंड अवशिष्ट हैं जो हम नहीं चाहते हैं।

यदि हम बड़ी संख्या में पेड़ों के साथ मॉडल का पुनर्निर्माण करते हैं

gbm.gaus1 <- gbm(y~., data = Data, dist = "gaussian",
                 n.trees=5000, interact=3)
plotres(gbm.gaus1)

हमें मिला

भूखंड

हम बड़ी संख्या में पेड़ों के साथ त्रुटि वक्र नीचे देखते हैं, और अवशिष्ट भूखंड स्वस्थ हैं। हम नए gbm मॉडल और यादृच्छिक वन मॉडल के लिए आंशिक निर्भरता भूखंडों की साजिश भी कर सकते हैं

library(plotmo)
plotmo(gbm.gaus1, pmethod="partdep", all1=TRUE, all2=TRUE)
plotmo(rf.model,  pmethod="partdep", all1=TRUE, all2=TRUE)

जो देता है

भूखंड

Gbm और यादृच्छिक वन मॉडल भूखंड अब समान हैं, जैसा कि अपेक्षित था।


3

interaction.depthजब आप अपने बढ़े हुए मॉडल का निर्माण करते हैं तो आपको अपना पैरामीटर अपडेट करना होगा । यह 1 को डिफॉल्ट करता है और यह उन सभी पेड़ों का कारण बनेगा जो gbmएल्गोरिथ्म केवल एक बार विभाजित करने के लिए बनाता है। इसका मतलब यह होगा कि हर पेड़ सिर्फ चर पर बंट रहा है cऔर टिप्पणियों के नमूने पर निर्भर करता है कि वह इसका इस्तेमाल 40 - 60 के आसपास करेगा।

यहां आंशिक भूखंड हैं interaction.depth = 3

यहाँ छवि विवरण दर्ज करें


अच्छी बात है, यह है
सोरेन हवेलुंड वेलिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.