機能の重要性に照らしてディシジョンツリーを解釈する


9

私は、sklearnで構築された決定木分類モデルの決定プロセスを完全に理解する方法を理解しようとしています。私が見ている2つの主な側面は、ツリーのgraphviz表現と機能の重要度のリストです。私が理解していないのは、ツリーのコンテキストで機能の重要度がどのように決定されるかです。たとえば、これは私の機能の重要性のリストです:

機能のランク:1. FeatureA(0.300237)

  1. FeatureB(0.166800)

  2. FeatureC(0.092472)

  3. FeatureD(0.075009)

  4. FeatureE(0.068310)

  5. FeatureF(0.067118)

  6. FeatureG(0.066510)

  7. FeatureH(0.043502)

  8. フィーチャーI(0.040281)

  9. FeatureJ(0.039006)

  10. FeatureK(0.032618)

  11. FeatureL(0.008136)

  12. FeatureM(0.000000)

しかし、ツリーの一番上を見ると、次のようになっています。ツリースニペット

実際、「最も重要」にランク付けされた機能の一部は、ツリーのずっと下まで表示されません。ツリーの上部は、最も低いランクの機能の1つであるFeatureJです。私の素朴な仮定は、最も重要な機能が最大の影響を与えるためにツリーの上部近くにランク付けされるということです。それが正しくない場合、機能を「重要」にするのは何ですか?


1
最初のノードの左右にいくつのサンプルが割り当てられますか?
oW_

回答:


4

フィーチャが重要であるほど、そのノードがデシジョンツリーの上位にある必要はありません。

これは、これら2つのケース(分割と重要性)のそれぞれで異なる基準(たとえば、ジニ不純物、エントロピー情報ゲイン、MSEなど)を使用できるためです。

たとえばSkLearn、エントロピー情報ゲイン基準(criterion'entropy'を参照SkLearn)に従って決定木でノードを分割することを選択できますが、機能の重要性はGiniの平均減少であるGini Importanceによって与えられますランダムフォレストのすべてのツリーにわたる特定の変数の不純物(feature_importances_at SkLearnおよびhereを参照)。

私が正しい場合SkLearn、Giniの不純物とGiniの重要性は同一ではないため、機能の重要性はGiniの重要性によって与えられているが、Giniの不純物基準に従ってディシジョンツリーでノードの分割を選択した場合でも同じです。 (Gini Importanceに関するStackoverflowのこれこれも参照してください)。


すでに@oW_は元の質問に対してかなり正しい答えを出しましたが、読者にとってより簡潔で明快な方法でそれを書くことは良いと思いました。
追放

3

scikit-learnでは、機能の重要性はノードの不純物の減少です。重要なのは、ノードレベルでのみ重要性を測定することです。次に、すべてのノードは、そのノードに到達するサンプルの数によって重み付けされます。

したがって、最初の分割後にいくつかのサンプルだけが左側のノードに到達する場合、左側のノードのゲインはごく少数のサンプルにしか影響しないため、Jが最も重要な機能であるとは限りません。各ノードのサンプル数をさらに出力すると、何が起こっているかをよりよく把握できる場合があります。


2

ノードがツリーの下位にあるからといって、必ずしも重要性が低いとは限りません。sci-kitlearnの機能の重要性は、ノードがクラスを純粋に分離する方法(Giniインデックス)によって計算されます。トリミングされたツリーでも、AはJの1回と比較して3回分割され、エントロピースコア(Giniと同様の純度の尺度)はJよりもAノードでやや高いことがわかります。

ただし、1つのノードしか選択できない場合は、Jを選択します。これにより、最良の予測が得られます。しかし、多くのノードにいくつかの異なる決定をさせるオプションがある場合は、Aが最良の選択です。


簡単に言えば、考えられる分類が2つしかない(それらを0と1と呼ぶことにする)と仮定すると、ツリーのベースにある機能は、サンプルを2つのグループに分割するのに最適な機能になります(つまり、分割の最良の仕事) 1はツリーの片側にあり、0は反対側にあります)。それは正確ですか?このコンテキストで0と1を分離するのが最善ではない場合、どの機能の重要度がランク付けされるかについては、まだ完全に明確ではありません
Tim Lindsey

-2

変数の重要度は、変数が削除されたときのモデルの精度の低下によって測定されます。変数なしの新しいモデルで作成された新しい決定木は、元のツリーとは非常に異なって見える可能性があります。ダイアグラムでの分割の決定は、モデル内のすべての変数を考慮しながら行われます。

ルート(および他のノード)で分割する変数は、不純物によって測定されます。優れた純度(たとえば、左のブランチのすべてが同じ目標値を持っている)は、優れた精度の保証ではありません。あなたのデータは歪んでいるかもしれません、あなたの右の枝はあなたの左の枝より多くの応答を持っています。したがって、左のブランチを正しく分類するだけでは意味がなく、右のブランチも考慮する必要があります。したがって、分割変数は、モデル全体の精度にとって重要な変数である場合とそうでない場合があります。

変数の重要度は、変数の選択に適した尺度です。


2
それがscikit-learnでの実装方法だとは思いません。そこで、機能の重要度は「ジニの重要度」、つまり、ノードに到達するサンプルの割合によって重み付けされたノードの不純物の総減少として測定されます。
oW_

「特徴の重要度は、その特徴によってもたらされる基準の(正規化された)全体の削減として計算されます。ジニの重要度とも呼ばれます。」- scikit-learn.org/stable/modules/generated/...
霊感
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.