Вычисление энтропии определенного атрибута?

Это очень просто, но я изучаю деревья решений и алгоритм 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

Цель - получить максимум информации!

Надеюсь это поможет!:)

Другие вопросы по тегам