में minsplit और असमान भार का उपयोग करके मानदंड में मानदंड कैसे शामिल करते हैं, जब वजन असमान होते हैं? वजन घटाने के लिए minsplit
थ्रेसहोल्ड के लिए मुझे कोई रास्ता नहीं मिला, और जब वजन असमान होता है तो यह एक मुद्दा बन जाता है, जैसा कि निम्न उदाहरण दिखाता है। मेरा वर्तमान वर्कअराउंड डेटा को विस्तारित करना है जिसमें प्रत्येक पंक्ति एक अवलोकन है, लेकिन यह दोनों समय और स्मृति में अपमानजनक लगता है (और मुझे संदेह है कि मैं असली डेटासेट रख सकता हूं, मुझे अपने विस्तारित रूप में मेमोरी में काम करने की ज़रूरत है), इस प्रकार - मदद के लिए मोड़। आपकी मदद के लिए अग्रिम धन्यवाद, -Sararrpart
निम्नलिखित कोड दिखाता है कि समस्या क्या है; पहले 3 पेड़ समान हैं, लेकिन निम्नलिखित दो (असमान भार के साथ) अलग-अलग हो जाते हैं:
## playing with rpart weights
require(rpart)
dev.new()
par(mfrow=c(2,3), xpd=NA)
data(kyphosis)
fitOriginal <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=rpart.control(minsplit=15))
plot(fitOriginal)
text(fitOriginal, use.n=TRUE)
# this dataset is the original data repeated 3 times
kyphosisRepeated <- rbind(kyphosis, kyphosis, kyphosis)
fitRepeated <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisRepeated, control=rpart.control(minsplit=45))
plot(fitRepeated)
text(fitRepeated, use.n=TRUE)
# instead of repeating, use weights
kyphosisWeighted <- kyphosis
kyphosisWeighted$myWeights <- 3
fitWeighted <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisWeighted, weights=myWeights,
control=rpart.control(minsplit=15)) ## minsplit has to be adjusted for weights...
plot(fitWeighted)
text(fitWeighted, use.n=TRUE)
# uneven weights don't works the same way
kyphosisUnevenWeights <- rbind(kyphosis, kyphosis)
kyphosisUnevenWeights$myWeights <- c(rep(1,length.out=nrow(kyphosis)), rep(2,length.out=nrow(kyphosis)))
fitUneven15 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=15))
plot(fitUneven15)
text(fitUneven15, use.n=TRUE)
fitUneven45 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=45))
plot(fitUneven45)
text(fitUneven45, use.n=TRUE)
## 30 works, but seems like a special case
fitUneven30 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=30))
plot(fitUneven30)
text(fitUneven30, use.n=TRUE)
मैं एक सामान्य डेटासेट पर असंतुलित भार और minsplit के साथ काम करने की कोशिश कर रहा हूं, और उदाहरण से पता चलता है कि यह काम नहीं करता है। वजन को संतुलित करना एक सामान्य समाधान नहीं है, इसके परिणामस्वरूप एक डेटासेट हो सकता है जो बहुत बड़ा है। – Saar
@ सायर, मैं क्षमा चाहता हूं अगर मुझे कुछ स्पष्ट याद आ रही है। आप कहते हैं कि उदाहरण दिखाते हैं कि "यह काम नहीं करता है"। यह किस तरह से काम नहीं करता है? जब मैंने उदाहरणों का परीक्षण किया, तो उनमें से प्रत्येक में कोई पेड़ बिना किसी त्रुटि के बढ़ गया। क्या पेड़ों में से एक जिस तरह से आप उम्मीद नहीं करते थे? – Ben
सभी 6 उदाहरणों में डेटा एक ही डेटा है, जो विभिन्न तरीकों से प्रदर्शित होता है (पहले उदाहरण को छोड़कर): यह या तो प्रत्येक अवलोकन तीन बार दोहराया जाता है, एक बार दिखाई देता है लेकिन 3 का वजन होता है, या वजन के साथ दो बार दिखाई देता है जो 3 तक जोड़ता है मैं उन वृक्षों की अपेक्षा करता हूं जो इसे एक ही पेड़ (उसी डेटा, एक ही एल्गोरिदम, एक ही आउटपुट के समान होना चाहिए) के लिए बनाया गया है। विशेष रूप से, पांचवां उदाहरण मुझे दूसरे और तीसरे उदाहरण के समान पेड़ देना चाहिए। यह नहीं है यह रन टाइम त्रुटियों के बारे में नहीं है, यह गलत उत्तरों को वापस पाने के बारे में है ... – Saar