Um einen Knoten in zwei verschiedene untergeordnete Knoten aufzuteilen, besteht eine Methode darin, den Knoten entsprechend der Variablen aufzuteilen, die Ihren Informationsgewinn maximieren kann. Wenn Sie einen reinen Blattknoten erreichen, ist der Informationsgewinn gleich 0 (weil Sie keine Informationen erhalten können, indem Sie einen Knoten aufteilen, der nur eine Variable enthält - logic
).
In Ihrem Beispiel Entropy(S) = 1.571
ist Ihre aktuelle Entropie - die, die Sie vor dem Aufteilen haben. Nennen wir es HBase
. Dann berechnen Sie die Entropie in Abhängigkeit von mehreren spaltbaren Parametern. Ihre Informationsgewinn zu erhalten, subtrahieren Sie die Entropie Ihres Kindes Knoten HBase
->gain = Hbase - child1NumRows/numOfRows*entropyChild1 - child2NumRows/numOfRows*entropyChild2
def GetEntropy(dataSet):
results = ResultsCounts(dataSet)
h = 0.0 #h => entropy
for i in results.keys():
p = float(results[i])/NbRows(dataSet)
h = h - p * math.log2(p)
return h
def GetInformationGain(dataSet, currentH, child1, child2):
p = float(NbRows(child1))/NbRows(dataSet)
gain = currentH - p*GetEntropy(child1) - (1 - p)*GetEntropy(child2)
return gain
Das Ziel ist es, die beste aller Informationen Gewinne zu erhalten!
Hoffe, das hilft! :)