
17.3
分割のエントロピー
■
237
def class_probabilities(labels: List[Any]) -> List[float]:
total_count = len(labels)
return [count / total_count
for count in Counter(labels).values()]
def data_entropy(labels: List[Any]) -> float:
return entropy(class_probabilities(labels))
assert data_entropy(['a']) == 0
assert data_entropy([True, False]) == 1
assert data_entropy([3, 4, 4, 4]) == entropy([0.25, 0.75])
17.3
分割のエントロピー
ここまでに行ったのは、ラベル付けされたデータのエントロピー(不確かさ)の計算
です。決定木の各階層では、質問に対する回答がデータを
1
つか(望ましくは)複数の
部分集合に分割します。例えば、「足は
5
本以上ありますか?」という質問は、
5
本以上
の足を持つ動物(例えば、蜘蛛)と、そうでない動物(例えば、ハリモグラ)に分割しま
す。
これに対応して、エントロピーを使ったデータの分割方法が必要となります。分割
により低いエントロピーを持つ(つまり確度の高い)部分集合にデータが分割されるな
ら、この分割は低い