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?
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.