元生技データサイエンティストのメモ帳

勉強したことの備忘録とか雑記とか

エントロピーとジニ不純度の比較

こんにちは、sue124です。
昔書いた「Python実践データ分析100本ノック」に関して書いた記事で、「決定木のモデル作成には平均情報量(エントロピーを使っている」と書いたものの、書籍の中で使用している「sklearn.tree.DecisionTreeClassifier」のモジュールではCARTというアルゴリズムジニ不純度を指標にして決定木を構築していることがわかったので、今回はエントロピーとジニ不純度の違いをまとめてみました。

決定木の基本的なことは以前書いた以下の記事を参照願います。

sue124.hatenablog.com


ノード t内でクラス i(全 c個)に属するサンプル数を n_{i}とするとクラス iに属するサンプルの割合を以下のように書くとします。

{ \displaystyle
 p(i|t) = \frac{n_{i}}{n}
}

このとき、エントロピー、ジニ不純度の定義はそれぞれ以下の通りとなります。

エントロピー
{ \displaystyle
 I_{H} = -\sum_{i=1}^{c} p(i|t)\ log\ p(i|t)
}

<ジニ不純度>
{ \displaystyle
 I_{G} = 1 - \sum_{i=1}^{c}p(i|t)^{2}
}


ここで以下の場合を考えてみます。

  • ノード tに単一のクラスしか入っていない場合(最も不純度が低い状態)

エントロピー
{ \displaystyle
 I_{H} = -\sum_{i=1}^{1}\frac{n}{n} \ log\ (\frac{n}{n}) = 0
}

<ジニ不純度>
{ \displaystyle
 I_{G} = 1 - \sum_{i=1}^{1}(\frac{n}{n})^{2} = 0
}

いずれの場合も0になります。

  • ノード tの全てのサンプルが異なるクラスである場合(最も不純度が高い状態)

エントロピー
{ \displaystyle
 I_{H} = -\sum_{i=1}^{c}\frac{1}{c} \ log\ (\frac{1}{c}) = log\ c
}

<ジニ不純度>
{ \displaystyle
 I_{G} = 1 - \sum_{i=1}^{c}(\frac{1}{c})^{2} = 1 - \frac{1}{c}
}

それぞれの上限はクラス数 c次第。


ここで簡単の為にクラスが2個の場合を考え、片方のクラスのデータ数を xとおくと、
エントロピー
{ \displaystyle
 I_{H}(x) = -\frac{x}{n}\ log\ \frac{x}{n} - \frac{n-x}{n}\ log\ \frac{n-x}{n}
}

<ジニ不純度>
{ \displaystyle
 I_{G}(x) = 1 - (\frac{x}{n})^{2} - (\frac{n-x}{n})^{2} = \frac{2nx-2x^{2}}{n^{2}}
}


これらを x微分すると、
エントロピー

{ \displaystyle \frac{d}{dx}I_{H}(x) = -\frac{2}{n}\ log\ \frac{x}{n} + \frac{2}{n}\ log\ \frac{n-x}{n}
}

<ジニ不純度>
{ \displaystyle
 \frac{d}{dx}I_{G}(x) = \frac{2-4x}{n^{2}}
}


これらから、ともに 0\leq x <\frac{1}{2}n で単調増加、 \frac{1}{2} < x \leq nで単調減少となることがわかります。
{ \displaystyle \frac{d}{dx}I_{H}(x)} x=0,nで∞となるので、このエントロピーの方が 0,n周辺での立ち上がりが急になりますね。

以上、エントロピーとジニ不純度の違いを比べてみました。
数式に若干の違いはあれど、表しているものの意味としては大差のない印象でした。