randomForest और चर महत्व बग?


10

मैं rfobject$importanceऔर importance(rfobject)MeanDecreaseAccuracy कॉलम में अंतर नहीं पाता।

उदाहरण:

> data("iris")
> fit <- randomForest(Species~., data=iris, importance=TRUE)
> fit$importance
                  setosa  versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.027078501 0.019418330 0.040497602           0.02898837         9.173648
Sepal.Width  0.008553449 0.001962036 0.006951771           0.00575489         2.472105
Petal.Length 0.313303381 0.291818815 0.280981959           0.29216790        41.284869
Petal.Width  0.349686983 0.318527008 0.270975757           0.31054451        46.323415
> importance(fit)
               setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 1.277324   1.632586  1.758101            1.2233029         9.173648
Sepal.Width  1.007943   0.252736  1.014141            0.6293145         2.472105
Petal.Length 3.685513   4.434083  4.133621            2.5139980        41.284869
Petal.Width  3.896375   4.421567  4.385642            2.5371353        46.323415
> 

मुझे अलग-अलग मीनड्रेकसैक्युअलिटीज मिलते हैं, लेकिन वेरिएबल्स की अहमियत ( fit$importanceसाथ ही साथ importance(fit)) के लिए भी यही क्रम है :

  1. Petal.Width

  2. Petal.Length

  3. Sepal.Length

  4. Sepal.Width

लेकिन अन्य डेटासेट में मुझे कभी-कभी अलग-अलग ऑर्डर मिलते हैं। क्या कोई समझा सकता है कि यहां क्या हो रहा है? क्या यह संभवतः एक बग है?


संपादित करें ( मार्टिन ओ'लेरी के जवाब में )

ठीक है शुक्रिया! मैंने कुछ और देखा।

rfcv()फ़ंक्शन पर एक नज़र डालते हुए मैंने देखा कि लाइन:

impvar <- (1:p)[order(all.rf$importance[, 1], decreasing = TRUE)]

इस पंक्ति के साथ हम पहले कॉलम को चुनते हैं, all.rf$importanceजो हमें कक्षा-विशिष्ट ( पहले कारक के लिए ) उपायों का क्रम देता है, जिन्हें केवल सटीकता में अवरोही के रूप में गणना किया जाता है। यह हमेशा सभी वर्गों ( MeanDecreaseAccuracy) पर सटीकता में औसत अवरोही के रूप में एक ही क्रम नहीं है । बेहतर होगा कि MeanDecreaseAccuracyया तो MeanDecreaseGiniकॉलम या कॉलम को चुनना बेहतर होगा , या importance()स्केल किए गए मूल्यों के लिए -function का उपयोग करना बेहतर होगा ? इसलिए हमारे पास क्रमिक रूप से कम होने वाले भविष्यवक्ताओं की संख्या परिवर्तनीय महत्व (सभी वर्गों पर) होती है और न केवल प्रथम श्रेणी के लिए चर महत्व से रैंक की जाती है।

जवाबों:


13

नहीं, यह बग नहीं है। दिए गए मान बिना fit$importanceबिके हुए हैं, जबकि दिए गए मान importance(fit)मानक विचलन (जैसा कि दिया गया है fit$importanceSD) के संदर्भ में व्यक्त किए गए हैं । यह आमतौर पर एक अधिक सार्थक उपाय है। यदि आप "कच्चे" मान चाहते हैं, तो आप उपयोग कर सकते हैं importance(fit, scale=FALSE)

सामान्य तौर पर, किसी फिट ऑब्जेक्ट के आंतरिक विवरण पर भरोसा करना बहुत बुरा विचार है, जब कोई एक्स्ट्रेक्टर फ़ंक्शन प्रदान करता है। सामग्री के रूप में कोई गारंटी नहीं है fit$importance- वे नोटिस के बिना संस्करण से संस्करण में काफी बदल सकते हैं। जब यह प्रदान किया जाता है तो आपको हमेशा एक्स्ट्रेक्टर फ़ंक्शन का उपयोग करना चाहिए।


संपादित करें: हाँ, यह पंक्ति rfcv()बग या कम से कम अनपेक्षित व्यवहार की तरह दिखाई देती है। यह वास्तव में काफी अच्छा उदाहरण है कि आपको चीजों की सामग्री पर भरोसा क्यों नहीं करना चाहिए fit$importance। फिट प्रतिगमन वन के लिए है, के पहले स्तंभ fit$importanceहै %IncMSE, के बराबर importance(fit, type=1)। हालाँकि, यह वर्गीकरण मामले में नहीं है, जहाँ आपके पास प्रत्येक कारक स्तर के लिए अतिरिक्त कॉलम हैं।

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