2013-05-19 12 views
5

के शैनन एन्ट्रॉपी को समझना मैं Machine Learning In Action पढ़ रहा हूं और निर्णय पेड़ अध्याय के माध्यम से जा रहा हूं। मैं समझता हूं कि निर्णय पेड़ इस प्रकार बनाए गए हैं कि डेटा सेट को विभाजित करने से आपको अपनी शाखाओं और पत्तियों को ढांचा बनाने का एक तरीका मिल जाता है। यह आपको पेड़ के शीर्ष पर अधिक संभावित जानकारी देता है और आपको कितने निर्णय लेने की आवश्यकता है, इस सीमा को सीमित करता है।डेटा सेट

पुस्तक एक समारोह किसी डेटा सेट की शैनन एन्ट्रापी का निर्धारण करने से पता चलता:

def calcShannonEnt(dataSet): 
    numEntries = len(dataSet) 
    labelCounts = {} 
    for featVec in dataSet: #the the number of unique elements and their occurance 
     currentLabel = featVec[-1] 
     if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 
     labelCounts[currentLabel] += 1 
    shannonEnt = 0.0 
    for key in labelCounts: 
     prob = float(labelCounts[key])/numEntries 
     shannonEnt -= prob * log(prob,2) #log base 2 
    return shannonEnt 

कहाँ इनपुट डेटा सेट सरणियों की एक सरणी जहां प्रत्येक सरणी एक संभावित वर्गीकृत करने योग्य सुविधा का प्रतिनिधित्व करता है:

dataSet = [[1, 1, 'yes'], 
    [1, 1, 'yes'], 
    [1, 0, 'no'], 
    [0, 1, 'no'], 
    [0, 1, 'no']] 

मुझे क्या नहीं मिलता है इस पुस्तक में शैनन एन्ट्रॉपी फ़ंक्शन केवल फीचर सरणी में अंतिम तत्व को देख रहा है? ऐसा लगता है कि यह केवल "हां" या "नहीं" वस्तुओं के लिए एन्ट्रॉपी की गणना करता है, न कि अन्य सुविधाओं की एंट्रॉपी?

enter image description here

यह क्योंकि इस डेटा के लिए एन्ट्रापी सेट

dataSet = [[1, 1, 'yes'], 
    [1, 'asdfasdf', 'yes'], 
    [1900, 0, 'no'], 
    [0, 1, 'no'], 
    ['ddd', 1, 'no']] 

ऊपर एन्ट्रापी के रूप में ही है मेरे लिए कोई मतलब नहीं है, भले ही यह एक बहुत अधिक विविध डेटा है।

डेटा सेट की कुल एन्ट्रॉपी देने के लिए अन्य फीचर तत्वों को भी गिना नहीं जाना चाहिए, या क्या मैं गलत समझ रहा हूं कि एन्ट्रॉपी गणना क्या करना चाहिए?

यदि कोई उत्सुक है, तो पुस्तक के लिए पूर्ण स्रोत (जहां यह कोड आया है) अध्याय 03 फ़ोल्डर के तहत here है।

उत्तर

8

यहां संभावित अस्पष्टता यह है कि जिस डेटासेट में आप देख रहे हैं, उनमें दोनों विशेषताएं और परिणाम चर शामिल हैं, परिणाम चर अंतिम कॉलम में है। जिस समस्या को आप हल करने का प्रयास कर रहे हैं वह है "क्या फीचर 1 और फीचर 2 मुझे परिणाम की भविष्यवाणी करने में मदद करता है"?

यह कहने का एक और तरीका यह है कि, यदि मैं सुविधा 1 के अनुसार अपना डेटा विभाजित करता हूं, तो क्या मुझे परिणाम पर बेहतर जानकारी मिलती है?

इस मामले में, बिना विभाजन के, परिणाम परिवर्तनीय है [हाँ, हाँ, नहीं, नहीं, नहीं]। अगर मैं फ़ीचर 1 पर विभाजित है, मैं 2 समूहों मिलती है: फ़ीचर 1 = 0 -> परिणाम है [नहीं, नहीं] फ़ीचर 1 = 1 -> Ouctome है [हाँ, हाँ, नहीं]

विचार यहाँ है यह देखने के लिए कि क्या आप उस विभाजन के साथ बेहतर हैं। प्रारंभ में, आपके पास एक निश्चित जानकारी थी, जिसे शैनन एंट्रॉपी द्वारा वर्णित किया गया था [हां, हां, नहीं, नहीं, नहीं]। विभाजन के बाद, आपके पास समूह के लिए "बेहतर जानकारी" के साथ दो समूह हैं, जहां फ़ीचर 1 = 0: आप उस मामले में जानते हैं कि परिणाम नहीं है, और इसे [नहीं, नहीं] की एंट्रॉपी द्वारा मापा जाता है।

दूसरे शब्दों में, दृष्टिकोण यह पता लगाने के लिए है कि क्या आपके पास उपलब्ध सुविधाओं में से एक है, यदि कोई उपयोग किया जाता है, तो आपकी जानकारी में वृद्धि हुई है, यानी परिणाम परिवर्तक। वृक्षारोपण लालच से प्रत्येक चरण में उच्चतम जानकारी लाभ के साथ सुविधा ले जाएगा, और फिर देखें कि परिणामस्वरूप समूहों को आगे बढ़ाने के लायक है या नहीं।

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