2015-11-04 8 views
7

क्या कोई बता सकता है कि R पैकेज में Cover कॉलम xgb.model.dt.tree फ़ंक्शन में गणना की जाती है?xgboost कवर की गणना कैसे की जाती है?

प्रलेखन में यह कहता है कि कवर "विभाजन द्वारा प्रभावित अवलोकनों की संख्या को मापने के लिए एक मीट्रिक है"

जब आप निम्न कार्य चलाते हैं, तो xgboost इस फ़ंक्शन के लिए प्रलेखन में Cover पेड़ 0 के नोड 0 के लिए 1628.2500 है।

data(agaricus.train, package='xgboost') 

#Both dataset are list with two items, a sparse matrix and labels 
#(labels = outcome column which will be learned). 
#Each column of the sparse Matrix is a feature in one hot encoding format. 
train <- agaricus.train 

bst <- xgboost(data = train$data, label = train$label, max.depth = 2, 
       eta = 1, nthread = 2, nround = 2,objective = "binary:logistic") 

#[email protected][[2]] represents the column names of the sparse matrix. 
xgb.model.dt.tree([email protected][[2]], model = bst) 

ट्रेन डेटासेट में 6513 टिप्पणियों रहे हैं, तो किसी को भी समझा सकता है क्यों पेड़ 0 के नोड 0 के लिए Cover इस संख्या (1628.25) के एक चौथाई है?

इसके अलावा, Cover पेड़ 1 के नोड 1 के लिए 788.852 है - इस संख्या की गणना कैसे की जाती है?

किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद।

उत्तर

12

कवर के रूप में xgboost में परिभाषित किया गया है:

पत्ते को वर्गीकृत प्रशिक्षण डेटा के दूसरे क्रम ढाल का योग है, अगर यह वर्ग नुकसान हुआ है, यह बस उदाहरणों की संख्या है कि शाखा में मेल खाती है । पेड़ एक नोड है में गहरी, कम इस मीट्रिक

https://github.com/dmlc/xgboost/blob/f5659e17d5200bd7471a2e735177a81cb8d3012b/R-package/man/xgb.plot.tree.Rd विशेष रूप से अच्छी तरह से प्रलेखित नहीं ....

हो जाएगा क्रम कवर की गणना करने के लिए, हम कि कम से भविष्यवाणियों जानने की जरूरत पेड़ में इंगित करें, और हानि समारोह के संबंध में दूसरा व्युत्पन्न।

हमारे लिए भाग्यशाली, आपके उदाहरण में 0-0 नोड में प्रत्येक डेटा पॉइंट (उनमें से 6513) की भविष्यवाणी 5 है। यह एक वैश्विक डिफ़ॉल्ट सेटिंग है जिससे आपकी पहली भविष्यवाणी टी = 0 है .5।

base_score [डिफ़ॉल्ट = 0.5] py सभी उदाहरणों की प्रारंभिक भविष्यवाणी स्कोर, वैश्विक पूर्वाग्रह

http://xgboost.readthedocs.org/en/latest/parameter.html

द्विआधारी रसद की ढाल (अपने उद्देश्य समारोह है) है, जहां पी = आपकी भविष्यवाणी, और वाई = सही लेबल।

इस प्रकार, हेसियन (जिसे हमें इसकी आवश्यकता है) पी * (1-पी) है। नोट: हेसियन को वाई, सही लेबल के बिना निर्धारित किया जा सकता है।

तो (इसे घर लाने):

6513 * (.5) * (1 - .5) = 1628,25

दूसरा ट्री में, उस बिंदु पर भविष्यवाणियों अब सभी कर रहे हैं।5, एसपी एक पेड़

p = predict(bst,newdata = train$data, ntree=1) 

head(p) 
[1] 0.8471184 0.1544077 0.1544077 0.8471184 0.1255700 0.1544077 

sum(p*(1-p)) # sum of the hessians in that node,(root node has all data) 
[1] 788.8521 

नोट के बाद पूर्वानुमान प्राप्त करें, रैखिक (चुकता त्रुटि) हेस्सियन प्रतिगमन के लिए हमेशा से एक है की सुविधा देता है, तो कवर इंगित करता है कि कितने उदाहरण है कि पत्ती में कर रहे हैं।

बड़ा अधिग्रहण यह है कि कवर उद्देश्य कार्य के हेसियन द्वारा परिभाषित किया गया है। ढाल पाने के लिए और बाइनरी लॉजिस्टिक फ़ंक्शन के हेसियन के संदर्भ में वहां बहुत सारी जानकारी है।

ये स्लाइड सहायक हैं यह देखकर सहायक है कि वह हेज़ियनों को भार के रूप में क्यों उपयोग करता है, और यह भी समझाता है कि xgboost मानक पेड़ों से अलग कैसे विभाजित होता है। https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

+0

शानदार स्पष्टीकरण। धन्यवाद – dataShrimp

+0

इसके अलावा, मुझे नहीं लगता कि आप इस सवाल पर कुछ प्रकाश डाल सकते हैं? http://stackoverflow.com/questions/33654479/how-is-xgboost-quality-calculated – dataShrimp

+0

@dtfoster मैं उस अन्य प्रश्न के साथ खेल रहा हूं - अभी तक इसे क्रैक नहीं किया है ... कुछ मामूली भारोत्तोलन चल रहा है उस हुड के नीचे जिसमें उसकी स्लाइड से कुछ मामूली मतभेद हैं –

संबंधित मुद्दे