デシジョンツリーを構築する方法は?
デシジョンツリーはフローチャートのようなツリーメカニズムであり、各内部ノードは属性のテストを示し、各部門はテストの結果を定義し、リーフノードはクラスまたはクラス分布を記述します。ツリーで最大のノードはルートノードです。
デシジョンツリーの構築の問題は、再帰的に定義できます。まず、ルートノードに配置する属性を選択し、可能な値ごとに1つのブランチを作成します。これにより、サンプルセットがサブセットに分割されます(属性の値ごとに1つ)。この手順は、部門に到達するインスタンスのみを利用して、すべてのブランチに対して再帰的に繰り返すことができます。ノードの一部のインスタンスが同様の分類を持っている場合は、ツリーのその要素の作成を停止します。
使用する純度の尺度は情報と呼ばれ、ビットと呼ばれる単位で測定されます。ツリーの各ノードに関連付けられており、インスタンスがそのノードに到達した場合に、新しいインスタンスを「はい」または「いいえ」に分類するかどうかを指定するために必要となると予想される情報量を表します。
剪定は、決定木のサイズを小さくする手順です。これは、木のサイズを説明したり、電力がほとんど供給されない木の領域を削除したりすることで、過剰適合のリスクを軽減するために使用されます。剪定は、ノイズまたは外れ値のためにトレーニングデータの異常を追跡する部門をトリミングすることによって提供され、ツリーの一般化の有効性を向上させる方法で初期ツリーを提供します。
いくつかの方法では、統計的尺度を使用して信頼性の低い部門を削除することが多く、その結果、分類が高速化され、独立したテストデータを正確に分類するツリーの機能が強化されます。
決定木を学習するためのアルゴリズム
アルゴリズム −指定されたトレーニング情報から決定木を作成します。
入力 −トレーニングサンプル、離散値属性によって記述されたサンプル。学生の属性のセット、属性リスト。
出力 −決定木。
方法
-
ノードNを作成します;
-
サンプルが同じクラスの場合、Cはしたがって
-
クラスC
でラベル付けされたリーフノードとしてNを返します。 -
属性リストがnullの場合、
-
サンプルで最も頻繁なクラスでラベル付けされたリーフノードとしてNを返します。 //多数決
-
情報ゲインが最大の属性リスト間の属性であるtest-attributeを選択します。
-
ノードNにテスト属性のラベルを付けます。
-
既知の値ごとにai oftest-attribute//サンプルを分割します。
-
条件test-attribute=a iのノードNからブランチを成長させます 。
-
s i test-attribute =a iであるサンプルのサンプルのセットである 。
-
s iの場合 空の場合
-
サンプルで最も一般的なクラスでラベル付けされた葉にリンクできます。
-
それ以外の場合は、決定木の生成によって返されたノードをアタッチします(s i 、attribute-list --test-attribute)
-
Pythonでバイナリツリーから文字列を構築する
バイナリツリーがあると仮定します。文字列は、前順序トラバース方法を使用して、バイナリツリーからの括弧と整数で構成されます。 nullノードは、空の括弧のペア「()」で表されます。また、文字列と元の二分木の間の1対1のマッピング関係に影響を与えない空の括弧のペアをすべて省略する必要があります。 したがって、入力が次のような場合 その場合、出力は5(6()(8))(7)になります。 これを解決するには、次の手順に従います- ans:=空白の文字列 関数pot()を定義します。これはノードを取ります、s nullの場合、 空白の文字列を返す ノードの左側または右側がnullの
-
Pythonでプレオーダーおよびポストオーダートラバーサルからバイナリツリーを構築する
PreorderとPostorderの2つのトラバーサルシーケンスがあるとすると、これら2つのシーケンスからバイナリツリーを生成する必要があります。したがって、シーケンスが[1,2,4,5,3,6,7]、[4,5,2,6,7,3,1]の場合、出力はになります。 これを解決するには、次の手順に従います- ans:=値pre [0]を取得してツリーノードを作成し、スタック:=空のスタックを作成し、ansを挿入します i:=1およびj:=0 whilei<前の長さとj<後の長さ スタックの最上位値=post[j]の場合、jを1増やし、スタックからポップして、次の反復に進みます n