पहले मैं स्पष्ट करना चाहूंगा कि वास्तव में मीट्रिक का महत्व क्या है।
MeanDecreaseGini प्रशिक्षण के दौरान विभाजन की गणना के लिए उपयोग किए जाने वाले Gini अशुद्धता सूचकांक पर आधारित चर महत्व का एक उपाय है। एक आम गलतफहमी यह है कि चर महत्व का मीट्रिक, मॉडल प्रदर्शन को जोर देने के लिए उपयोग किए जाने वाले गिन्नी को संदर्भित करता है जो एयूसी से निकटता से संबंधित है, लेकिन यह गलत है। यहाँ ब्रेमन और कटलर द्वारा लिखे गए यादृच्छिकतम पैकेज से स्पष्टीकरण दिया गया है:
Gini महत्व
हर बार एक नोड का विभाजन चर m पर बनाया जाता है दो अवरोही नोड के लिए gini अशुद्धता मानदंड मूल नोड से कम है। जंगल में सभी पेड़ों पर प्रत्येक अलग-अलग चर के लिए गिन्नी घटने से एक तेज चर महत्व मिलता है जो अक्सर क्रमिक महत्व के माप के अनुरूप होता है।
गिनी अशुद्धता सूचकांक के रूप में परिभाषित किया गया है
कहाँ लक्ष्य चर और में कक्षाओं की संख्या है इस वर्ग का अनुपात है।एन सी पी मैं
जी = ∑मैं = १nसीपीमैं( 1 - पीमैं)
nसीपीमैं
दो वर्ग की समस्या के लिए, निम्न वक्र में यह परिणाम होता है जो 50-50 नमूने के लिए अधिकतम होता है और सजातीय सेट के लिए न्यूनतम होता है:
तब महत्व की गणना
में की जाती है, जो प्रश्न में भविष्यवक्ता को शामिल करते हुए जंगल में सभी विभाजन पर औसतन होता है। जैसा कि यह एक औसत है, यह आसानी से एक समूह में निहित चर पर सभी विभाजन पर औसतन बढ़ाया जा सकता है।
मैं= जीp a r e n t- जीs p l i t १- जीs p l i t 2
करीब से देखने पर हमें पता है कि प्रत्येक चर महत्व का उपयोग चर पर औसत सशर्त है और समूह का माध्य डीग्रीगिनी सिर्फ इन आयातों का मतलब होगा, इस चर का भार उसी चर में दूसरे चर की तुलना में जंगल में उपयोग किया जाता है। इसका कारण यह है कि टॉवर संपत्ति
ई [ ई [एक्स]| Y] ] = ई [ एक्स]
अब, सीधे आपके प्रश्न का उत्तर देने के लिए यह उतना आसान नहीं है, जितना कि संयुक्त मीन्सड्रेसगिनी को प्राप्त करने के लिए प्रत्येक समूह में सभी आयातों को समेटना है, लेकिन भारित औसत की गणना करने पर आपको वह उत्तर मिल जाएगा जिसकी आपको तलाश है। हमें बस प्रत्येक समूह में परिवर्तनशील आवृत्तियों को खोजने की आवश्यकता है।
आर में यादृच्छिक वन वस्तु से इन्हें प्राप्त करने के लिए एक सरल लिपि है:
var.share <- function(rf.obj, members) {
count <- table(rf.obj$forest$bestvar)[-1]
names(count) <- names(rf.obj$forest$ncat)
share <- count[members] / sum(count[members])
return(share)
}
बस समूह में चर के नाम पर सदस्यों के पैरामीटर के रूप में पास करें।
हम उम्मीद करते है कि यह आपके सवाल का जवाब दे देगा। मैं समूह आयात को सीधे प्राप्त करने के लिए एक फ़ंक्शन लिख सकता हूं यदि यह ब्याज का है।
संपादित करें:
यहाँ एक फ़ंक्शन है जो समूह को एक randomForest
वस्तु और वैक्टर के नामों की सूची के साथ दिया गया महत्व देता है । यह var.share
पहले परिभाषित के रूप में उपयोग करता है। मैंने कोई इनपुट जाँच नहीं की है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आप सही चर नामों का उपयोग करें।
group.importance <- function(rf.obj, groups) {
var.imp <- as.matrix(sapply(groups, function(g) {
sum(importance(rf.obj, 2)[g, ]*var.share(rf.obj, g))
}))
colnames(var.imp) <- "MeanDecreaseGini"
return(var.imp)
}
उपयोग का उदाहरण:
library(randomForest)
data(iris)
rf.obj <- randomForest(Species ~ ., data=iris)
groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"),
Petal=c("Petal.Width", "Petal.Length"))
group.importance(rf.obj, groups)
>
MeanDecreaseGini
Sepal 6.187198
Petal 43.913020
यह अतिव्यापी समूहों के लिए भी काम करता है:
overlapping.groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"),
Petal=c("Petal.Width", "Petal.Length"),
Width=c("Sepal.Width", "Petal.Width"),
Length=c("Sepal.Length", "Petal.Length"))
group.importance(rf.obj, overlapping.groups)
>
MeanDecreaseGini
Sepal 6.187198
Petal 43.913020
Width 30.513776
Length 30.386706