2013-05-19 28 views
5

Przeczytam Machine Learning In Action i przechodzę przez rozdział drzewa decyzji. Rozumiem, że drzewa decyzyjne są zbudowane w taki sposób, że dzielenie zestawu danych daje sposób na uporządkowanie gałęzi i liści. Daje to bardziej prawdopodobne informacje na górze drzewa i ogranicza liczbę decyzji, które trzeba przejść.Zrozumienie entropii Shannon zestawu danych

Książka pokazuje funkcję określającą entropii shannon zestawu danych:

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 

przypadku gdy zestaw danych wejściowych jest szereg tablic, gdzie każda tablica przedstawia potencjalny, sklasyfikowane funkcję:

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

Czego nie rozumiem, dlaczego funkcja entropii shannon w tej książce tylko patrzy na ostatni element w tablicy cech? Wygląda na to, że oblicza ona tylko entropię dla elementów "tak" lub "nie", a nie entropię jakiejkolwiek innej cechy?

enter image description here

To nie ma sensu do mnie, bo entropia dla tego zestawu danych

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

jest taka sama jak entropii powyższym, mimo że ma dużo więcej różnych danych.

Czy nie należy również liczyć innych elementów elementów, aby podać całkowitą entropię zestawu danych, czy też nie rozumiem, co ma robić obliczenie entropii?

Jeśli ktoś jest ciekawy, pełne źródło (z którego pochodzi ten kod) do książki, jest here w folderze Chapter03.

Odpowiedz

8

Potencjalna niejednoznaczność polega na tym, że analizowany zestaw danych zawiera zarówno cechy, jak i zmienną wyniku, zmienną wyniku będącą w ostatniej kolumnie. Problem, który próbujesz rozwiązać, to "Czy funkcja 1 i funkcja 2 pomagają mi przewidzieć wynik?"

Innym sposobem na stwierdzenie tego jest, czy jeśli podzielę dane według funkcji 1, czy otrzymam lepsze informacje na temat wyniku?

W tym przypadku, bez podziału, zmienna wynikowa to [tak, tak, nie, nie, nie]. Jeśli podzielić na cechy 1, mam 2 grupy: Feature 1 = 0 -> wynik jest [no, no] Feature 1 = 1 -> Ouctome jest [tak, tak, no]

Chodzi o to, aby sprawdzić, czy lepiej Ci się z tym podzielić. Początkowo miałeś pewną informację, opisaną przez Shannon Entropy [tak, tak, nie, nie, nie]. Po podziale masz dwie grupy, z "lepszą informacją" dla grupy, w której Cecha 1 = 0: wiesz w tym przypadku, że Wynik to nie, a to mierzone jest Entropią [nie, nie].

Innymi słowy, chodzi o to, aby dowiedzieć się, czy z dostępnych funkcji istnieje taki, który, jeśli jest używany, zwiększył informacje o tym, na czym Ci zależy, czyli o zmiennej Wybieg. Budowanie drzewa będzie chciwie wybierać cechę z najwyższym zyskiem informacji na każdym kroku, a następnie sprawdzić, czy warto podzielić jeszcze bardziej grupy wynikowe.

Powiązane problemy