두 개의 다른 하위 노드로 노드를 분할하려면 정보 이득을 최대화 할 수있는 변수에 따라 노드를 분할하는 방법이 있습니다. 순수 리프 노드에 도달하면 정보가 0이됩니다 (하나의 변수 만 포함하는 노드를 분할하여 정보를 얻을 수 없으므로 logic
).
예시에서 Entropy(S) = 1.571
은 현재의 엔트로피 즉 분할 전의 엔트로피입니다. 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
목적은 모든 정보 이득의 최고를 얻을 수 있습니다 - 은 정보 이득을 얻으려면, 당신은 HBase
에 자식 노드의 엔트로피를 빼지!
희망이 도움이됩니다. :)