機械学習とデータ科学決定ツリーガイド


要旨:意思決定ツリーに関する基本的な紹介で、実例で詳しく説明します.
まだどのように選択するかに悩んでいますか?早く決定木(Decision Tree)アルゴリズムを採用して決定してあげましょう.決定ツリーは非常に強力な機械学習モデルであり,高度に解釈可能であると同時に,多くのタスクにおいても高い精度を有する.意思決定ツリーの機械学習モデルの分野での特殊な点は、いくつかの機械学習方法がブラックボックスではなく、その情報表現がはっきりしていることである.これは、意思決定ツリーが訓練で学んだ「知識」を通じて直接階層構造を形成し、このような方法で学んだ知識を保存し、表示し、非専門家でも容易に理解できるからである.
現実生活における意思決定ツリー
現実の生活の中で、私たちはいつも決定木のような方法で自分の生活を決定したことがあります.例えば、週末にどのようなイベントを手配するかを決めます.どのような活動をするかは、友達と一緒に出かけたり、週末を一人で過ごしたり、週末の天気がどうなったりするかなど、いくつかの要因にかかっている可能性があります.この2つの要素があなたの決定に影響を与えると仮定すると、天気が晴れていて、あなたの友达が一緒に参加することができれば、サッカーをしたいかもしれません.雨の日なら、一緒に映画を見に行くかもしれません.友達が用事があって参加できないなら、天気のいかんにかかわらず、本を読んだり、ゲームをしたりするかもしれません.
これが現実の明らかな決定ツリーの例であり、上述したように、順序の階層化された決定のセットをシミュレートするためにツリーが構築され、最終的に結果が得られる.ここでは、木のコンパクトさを保つために、かなり「高級」な意思決定も選びました.たとえば、晴天(25度)、雨(25度)、晴天(26度)、雨(26度)、晴天(27度)など、天気に多くの可能なオプションが設定されている場合......など、木のサイズが大きくなるので、この正確な温度は最後の決定にはあまり関係ありません.外部が雨が降っているかどうかを知りたいだけなので、雨が降っている場合に外出するかどうかを決め、温度の高低は影響が少ないからです.もちろん、極寒極熱の天気は家のほうが気持ちがいいです.
機械学習における意思決定ツリーの概念は上記の考え方と同じであり,階層的意思決定のセットを有するツリーを構築し,最終的に意思決定結果,すなわち分類または回帰予測を与える必要がある.決定ツリーのサイズをできるだけ小さくし、高分類/回帰精度を実現します.
機械学習における意思決定ツリー
決定ツリーモデルの構築は、一般に、帰納(induction)とトリミング(pruning)の2つのステップに分けられる.要約は、実際にツリーを構築するステップです.すなわち、私たちのデータに基づいてすべての階層的な意思決定境界を設定します.しかし,訓練決定ツリーの性質のため,ツリーモデルは深刻なオーバーフィット現象を生じやすい可能性がある.この場合,トリミング処理を採用する必要があり,トリミングは決定ツリーから不要な分岐構造を削除する過程であり,オーバーフィットに対抗する複雑さを効果的に低減し,解釈を容易にする.
まとめ|Induction
上層部から見ると、決定ツリーのまとめには4つの主要なステップが必要です.
  • トレーニングデータセットは、いくつかの特徴変数、分類または回帰出力を有しなければならない.
  • は、データセットの「最適な特徴」を決定し、データを分割する.
  • は、この最適な特徴の可能な値を含むサブセットにデータを分割し、この分割は、基本的にツリー上のノード、すなわち、各ノードがデータ内の特徴に基づく分割点であることを定義する.
  • は、ステップ3から作成されたデータサブセットを使用して、新しいツリーノードを再帰的に生成し、最適化点に達するまで分裂を維持し、この点は、あるメトリックによって最大精度を最適化し、分裂/ノードの数を最小化した.

  • 手順1は簡単で、データセットをよく分析するだけです.ステップ2では、通常、貪欲アルゴリズムを使用して、使用する特徴および特定の分割を選択し、対価関数を最小化する.決定ツリーを構築するときに実行される分割は、フィーチャー空間を分割することに相当します.異なる分割点を反復的に試み,最後に最もコストの低い分割点を選択する.データ・セットの値範囲内でのみ分割することもできます.これにより、計算を無駄にしないで、表現の悪い分割点をテストすることができます.
    回帰ツリーでは、単純な二乗誤差をモデルの対価関数として使用できます.
    ここで、Yは所望の出力であり、Y-hatは予測値であり、データセットのすべてのサンプルを合計して総誤差を得る.分類には、ジニ指数関数(Gini Index Function):
    ここで、pkは、特定の予測ノードにおけるk番目のクラスのトレーニングインスタンスサンプルの割合である.理想的には、ノードのエラー値はゼロであるべきであり、これは、各分割出力のクラスが私たちが望んでいることを意味し、その特定の決定ノードに到達すると、決定境界の側にいても反対側にいても、その出力が決定される.
    データセットに単一の分類を持つ概念を情報利得と呼ぶ.次に例を示します.
    ある区分が選択され、各出力が入力データに基づいてカテゴリを混合する場合、この場合、実際には何の情報も得られません.一方,各出力のクラスに対する分割の正解率が高い場合には,特定の特徴変数に対して特定の方法で分割する情報が得られる.
    その後は木のモデルを数千個の分岐があるまで分裂させますが、これは良いアイデアではありません!このようにして得られる決定ツリーは巨大で緩やかであり、トレーニングデータセットにフィットする.したがって、ツリーの構造を停止するために、予め定義された停止基準を設定する必要があります.
    最も一般的な停止方法は、各リーフノードに割り当てられたトレーニングサンプルの数に対して最小数を使用することである.カウントが最小値より小さい場合は、分割は受け入れられず、そのノードを最終リーフノードとします.すべてのリーフノードが最終ノードになると、トレーニングは停止します.最小数を小さくすると、より詳細な分割と情報が提供されますが、トレーニングデータにフィットしやすくなります.したがって、最小数の値は、各クラスで予想されるサンプルの数に応じて、通常、データセット設定に基づいています.
    トリミング|Pruning
    トレーニング決定ツリーの性質により、深刻なオーバーフィット現象が発生しやすい可能性があります.各ノードの最小インスタンス数の正確な値を設定することは困難です.多くの場合、最適な決定を必要とせずに適切な決定を望んでいるだけかもしれません.従って,最小値を非常に小さくして非常に複雑なツリーを得る必要はなく,多くの分裂が余計であり,モデルの正確性を向上させることはできなかった.
    ツリートリミングは、トリミングツリーに不要な分裂を利用する技術である.上位レベルから、トリムは、ツリーの一部を厳格な決定境界からよりスムーズで汎用的なツリーに圧縮し、ツリーの複雑さを効果的に低減します.決定ツリーの複雑さは、ツリー内の分裂数として定義されます.
    単純で効率的なトリム方法は、ツリー内の各ノードを遍歴し、削除した代価関数の効果を評価することです.削除後、代価関数が大きく変化しない場合は、ノードをトリミングします.
    実例実践
    Scikit Learに組み込まれた関数を用いて分類と回帰の決定ツリーを実現することは非常に容易である.まずデータセットをロードし、決定ツリーを初期化して分類します.
    from sklearn.datasets import load_iris
    from sklearn import tree
    
    # Load in our dataset
    iris_data = load_iris()
    
    # Initialize our decision tree object
    classification_tree = tree.DecisionTreeClassifier()
    
    # Train our decision tree (tree induction + pruning)
    classification_tree = classification_tree.fit(iris_data.data, iris_data.target)

    Scikit.graphvizライブラリを使用して構築されたツリーを可視化することもできます.このツリーには、決定ノードを可視化し、モデルで学んだ内容を分割するオプションが付属しています.次に、フィーチャー名に基づいてノードをシェーディングし、各ノードのクラスとフィーチャー情報を表示します.
    import graphviz 
    dot_data = tree.export_graphviz(classification_tree, out_file=None, 
                         feature_names=iris.feature_names,  
                         class_names=iris.target_names,  
                         filled=True, rounded=True,  
                         special_characters=True)  
    graph = graphviz.Source(dot_data)  
    graph.render("iris") 

    決定ツリーモデルには、Scikit Learnでいくつかのパラメータを設定することもできます.以下は、より良い結果を得るための興味深い試みです.
  • max_depth:ツリーの最大深さは、深さニューラルネットワークにおける最大層数に類似する.浅いとモデルが速くなりますが、正確ではありません.より深いモデルは精度を向上させる可能性があるが、オーバーフィットのリスクも増大し、動作が遅い.
  • min_samples_split:ノードを分割するために必要な最小サンプル数を適切な値に設定すると、オーバーフィットを軽減するのに役立ちます.
  • max_features:最適な分割を検索する際に考慮すべき特徴数は、より高いことはより良い結果を意味する可能性があるが、訓練にもより長い時間がかかる.
  • min_impurity_split:木の成長が早期に停止したしきい値であり、ノードの不純物がしきい値より高い場合、このノードは分裂し、オーバーフィット(高値、小木)と高精度(低値、大木)に対抗するために使用することができる.
  • presort:フィッティングにおける最適な分割の発見を加速させるために、データが予め割り当てられているかどうか.各特徴のデータを事前に並べ替えると、訓練アルゴリズムは適切な分裂値を見つけやすくなる.

  • 実際に意思決定ツリーを適用するテクニック
    次の決定ツリーの長所と短所のまとめは、読者がそれぞれの問題に適しているかどうか、およびそれらを効果的に適用する方法に関するヒントを決定するのに役立ちます.
    メリット|Pros
  • は、モデルがどのような決定を下したかを各ノードで正確に見ることができることを理解し、説明しやすい.実際には,精度と誤差がどこから来たのか,モデルはどのタイプのデータをうまく処理でき,出力がどのように特徴値の影響を受けるかを完全に理解できる.Scikit learnの可視化ツールは、意思決定ツリーの可視化と理解に絶好の選択です.
  • は少ないデータを準備する必要がある:多くの機械学習モデルは大量のデータ前処理、例えば正規化を必要とし、複雑な正規化スキームを必要とする可能性がある.一方、いくつかのパラメータを調整した後、決定ツリーは箱を開けてすぐに使用することができる.
  • 木を用いて推理する計算コストは訓練木のデータセットと対数関係を呈し、これは巨大な優位性であり、より多くのデータを入力することが推理速度に大きな影響を与えるとは限らないことを意味する.

  • 欠点|Cons
  • 訓練の性質のため、オーバーフィットは決定ツリーでよく見られる.通常、ツリーがこのような多くのフィーチャー上の分割を学習する必要がないように、PCAなどの何らかのタイプの下位次元を実行することを推奨します.
  • は、オーバーフィットと同様の理由から、決定ツリーもデータセットで多数を占めるカテゴリに偏りやすく、アンバランスデータに対してある種類のバランス(例えば、クラスウェイト、サンプリング、または専門的な損失関数)操作を行うのが良いアイデアである.

  • 著者:【方向】
    原文を読む
    本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.