Вычисление энтропии определенного атрибута?
Это очень просто, но я изучаю деревья решений и алгоритм ID3. Я нашел сайт, который очень полезен, и я следил за энтропией и получением информации, пока не добрался до
Я не понимаю, как рассчитывается энтропия для каждого отдельного атрибута (солнечно, ветрено, дождливо), в частности, как рассчитывается p-sub-i. Кажется, он отличается от того, как он рассчитывается для энтропии (S). Кто-нибудь может объяснить процесс, стоящий за этим расчетом?
2 ответа
Calc пропорция, которую солнечный представляет на множестве S, т. Е. | SunnyInstances| / |S| = 3/10 = 0,3.
Примените формулу энтропии, учитывая только солнечную энтропию. Theres 3 солнечных случая, разделенные на 2 класса, 2 солнечных, связанных с теннисом, и 1, связанных с кино. Таким образом, формула энтропии для солнечного выглядит примерно так: -2/3 log2(2/3) - 1/3 log2(1/3) = 0,918
И так далее.
Чтобы разделить узел на два разных дочерних узла, один из методов состоит в разделении узла по переменной, которая может максимизировать ваш информационный прирост. Когда вы достигаете чистого конечного узла, прирост информации равен 0 (потому что вы не можете получить какую-либо информацию, разделив узел, содержащий только одну переменную - logic
).
В вашем примере Entropy(S) = 1.571
ваша текущая энтропия - та, что у вас есть до расщепления. Давайте назовем это HBase
, Затем вы вычисляете энтропию в зависимости от нескольких разделяемых параметров. Чтобы получить информационный прирост, вы должны вычесть энтропию своих дочерних узлов в 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
Цель - получить максимум информации!
Надеюсь это поможет!:)