子ノードのジニ減少とジニ不純物


15

ランダムフォレストのGini機能重要度測定に取り組んでいます。したがって、ノードの不純物のGini減少を計算する必要があります。ここに私がそうする方法があり、それは定義との矛盾につながり、私はどこかに間違っている必要があることを示唆しています... :)

二分木の場合、左と右の子の確率を考えると、ノード Gini不純性を計算できます。n

i(n)=1pl2pr2

そして、Giniが減少します。

Δi(n)=i(n)pli(nl)pri(nr)

したがって、ノードに110個の観測があるこの例の場合:

- node (110)
   - left (100)
      - left_left (60)
      - left_right (40)
   - right (10)
      - right_left (5)
      - right_right (5)

次のようにノードのGiniの減少を計算します

i(left=160/100²40/100²=0.48rght=15/10²5/10²=0.50node=1100/110²10/110²=0.16

しかし、Breimanの定義(またはCVに関するこの回答:CARTを使用する場合の「変数重要度」の測定/ランク付け方法ですが、参照された本へのアクセス権はありません)、子孫の不純物基準は親よりも低くなければなりませんノード:

Giniの重要性
変数mでノードの分割が行われるたびに、2つの子孫ノードのGini不純物基準は親ノードよりも小さくなります。フォレスト内のすべてのツリーの個々の変数ごとにginiの減少を加算すると、順列重要度の尺度と非常に一貫性のある変数の重要度が速くなります。

そうでなければ、それはマイナスのジニ減少につながるので...

Δi(node)=i(node)(100/110)i(left)(10/110)i(right)=0.32

だから、誰かが私が間違っている場所を伝えることができれば、ここで明白な何かを見逃しているように見えるので、私は非常に感謝するでしょう...

回答:


16

ターゲットクラス変数をまったく使用しなかっただけです。他のすべての不純物関数としてのジニ不純物は、分割後の出力の不純物を測定します。サンプルサイズのみを使用して何かを測定します。

私はあなたのケースの公式を導き出そうとします。

簡単にするために、バイナリ分類器があるとします。表すとテスト属性、有するクラス属性値。C c +c ACc+,c

分割の初期giniインデックスは、 で与えられます は、クラスの値を持つデータポイントの割合です。変数。 P A +c +

I(A)=1P(A+)2P(A)2
P(A+)c+

これで、左ノードの不純物は ここで、は、クラス変数などに値を持つ左のサブセットからのデータポイントの割合です。 I A r = 1 P A r + 2P A r 2 P A l +A c +

I(Al)=1P(Al+)2P(Al)2
I(Ar)=1P(Ar+)2P(Ar)2
P(Al+)Ac+

これで、GiniGainの最終式は

GiniGain(A)=I(A)pleftI(Al)prightI(Ar)
ここで、は左のサブセットのインスタンスの割合、または(左のサブセットにあるインスタンスの数をからのインスタンスの総数で割ったもの。pleft#|Al|#|Al|+#|Ar|A

表記が改善される可能性があると思うので、後で時間があるときに見ます。

結論

データポイントの数だけでは不十分です。不純というのは、ある機能(テスト機能)が別の機能(クラス機能)の分布をどれだけうまく再現できるかを意味します。特徴分布のテストでは、使用した数(左から右、右から右)が生成されますが、式ではクラスフィーチャーの分布は使用されません。

後で編集-減少する理由を証明する

子ノードのジニインデックスが親ノードよりも常に小さい理由を証明する部分を見逃していることに気付きました。私は完全な証明や検証済みのものは持っていませんが、有効な証拠だと考えています。トピックに関連する他の興味深い事柄については、テクニカルノート:Spliting Criteria-Leo Breimanの一部のプロパティを確認してください。今、それは私の証明に従います。

我々はバイナリの場合には、ノードのすべての値は、完全に対によって記述することができると仮定するの意味を持つ第1のクラスのインスタンス、及び第二クラスのインスタンス。インスタンスがある親ノードでそれを述べることができます。(a,b)ab(a,b)

最適な分割を見つけるために、テスト機能に従ってインスタンスをソートし、可能なすべてのバイナリ分割を試みます。特定の機能によってソートされるのは、実際にはインスタンスの順列であり、クラスは最初のクラスまたは2番目のクラスのインスタンスで始まります。一般性を失うことなく、最初のクラスのインスタンスから始まると仮定します(そうでない場合は、同じ計算でミラープルーフがあります)。

試行する最初の分割は、左側と右側インスタンスです。左および右の子ノードの候補のジニインデックスは、親ノードとどのように比較されますか?明らかに左にます。そのため、左側にあるginiインデックスの値は小さくなっています。適切なノードはどうですか?(1,0)(a1,b)h(left)=1(1/1)2(0/1)2=0

h(parent)=1(aa+b)2(ba+b)2
h(right)=1(a1(a1)+b)2(b(a1)+b)2

が以上であることを考慮と(そうでなければ、左ノードで最初のクラスのインスタンスを分離することができますか?)、簡略化した後、右ノードのジニインデックスの値が親ノード。a0

証明の最後の段階は、データによって決定されるすべての可能な分割ポイントを考慮しながら、最小の集約ジニインデックスを持つものを保持することです。つまり、選択する最適値は私が証明した些細なものは小さい。これにより、最終的にginiインデックスが減少すると結論付けられます。

最終的な結論として、さまざまな分割が親ノードよりも大きな値を与える場合でも、選択するのはそれらの中で最小であり、親giniインデックス値よりも小さいことに注意する必要があります。

それが役に立てば幸い。


本当にありがとう、あなたは私の脳のロックを解除しました...実際、私は回帰木を扱っているので、ターゲットクラス変数の使用は純粋な分類タスクの場合ほど明白ではありませんでした。しかし、今では完全に理にかなっています。
レミメリソン14年

答えを更新して、不足している部分を含めました。
rapaio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.