デシジョンツリー
記事ディレクトリ
序文
デシジョン ツリーの概念:デシジョン ツリーは、人間が意思決定の問題に直面したときの意思決定メカニズムに似た、ツリー構造に基づく意思決定メカニズムです。デシジョン ツリーは、機械学習手法の一般的なクラスです。
バイナリ分類タスクを例にとると、与えられたトレーニング データ セットからモデルを学習して、新しいサンプルを分類したいと考えています。このサンプルを分類するタスクは、「現在のサンプルは陽性クラスに属しているか?」という質問に対する意思決定または判断プロセスとみなすことができます。
決定木学習の目的: 強い汎化能力、つまりまだ見たことのない例に対処できる強い決定木を生成すること。
1.基本的な流れ
意思決定プロセスの最終的な結論は、私たちが望む判断結果に対応しており、意思決定プロセスで提起される各判断問題は、ある属性に対する「テスト」であり、各テスト結果は、導き出される最終結論、またはさらに導き出される判断問題であり、その考慮範囲は、最後の判断結果の限られた範囲内にあります。
一般に、デシジョン ツリーには、ルート ノード、いくつかの内部ノード、およびいくつかのリーフ ノードが含まれます。リーフ ノードは決定結果に対応し、他の各ノードは属性テストに対応します。各ノードに含まれるサンプル セットは、属性テストの結果に従って対応するサブノードに分割されます。ルート ノードにはサンプルの完全なセットが含まれます。
ルート ノードから各リーフ ノードへのパスは、一連の決定テストに対応します。
その基本的なフローは、以下の図に示すように、シンプルで直感的な「分割統治」戦略に従います。
以c语言形式的表现
Node TreeGenerate(D,A){ //输入为一个样本集合D和一个属性集合A;输出是一个结点
Node node;
if(D中样本全部属于同一类别C){ //递归结束出口,如果运行到某处,比如:判定一个西瓜为好瓜坏瓜的决策树,对当前传过来的样本集都是好瓜,则此node设为好瓜的叶结点;并返回
将node标记为C类叶结点;
return;
}
if( A = ∅ | D中样本在A上取值相同){ //递归结束的出口,仍以西瓜为例,当从某一分支判定到最后,没有属性可以划分,剩余样本大部分是好瓜,将node设为好瓜的叶结点;或者D中样本在当前A属性上都取值为同一个值,那就不用再向下划分了。比如都是好瓜,则直接将node设为好瓜叶结点,无需向下寻找划分属性。
将node设为叶结点,类别标记为D中样本最多的类;
return;
}
从A中选择最优划分属性a*; //a*如何获得会在下一节提到
for(a*的每一个值a*v ){ //比如当前寻找到最优划分属性为根蒂,对根蒂属性有弯的和直的,那就进行两次循环,生成两个分支;
为node生成一个分支;
令Dv表示D中在a*上取值为a*v的样本子集; //例如,在根蒂属性上取值为好瓜的样本集合就是Dv,根蒂=好瓜就是a*v
if (Dv为空 ){ //如果在根蒂属性上取值为好瓜的样本集合是空的,无法继续划分,也无法判定,将其设为D中最多的类别,判定成功率较高
将分支节点标记为叶结点,其类别标记为D中样本最多的类;return;
}
else { //子集不为空集合,则继续向下划分,直至遇见函数出口
TreeGenerate(Dv,A\{a*}) //A\{a*}表示属性集合A去除a*后的属性集合
}
}
}
決定木の生成は再帰的なプロセスです。基本的なデシジョン ツリー アルゴリズムでは、再帰リターンにつながる状況が 3 つあります。
(1) 現在のノードに含まれるサンプルはすべて同じカテゴリに属しており、分割する必要はありません。(2) 現在の
属性セットが空であるか、すべてのサンプルがすべての属性で同じ値を持っているため、分割できません。(3) 現在
のノードに含まれるサンプル セットが空で、分割できません。
(2) の場合、現在のノードをリーフ ノードとしてマークし、そのカテゴリをドロップ ポイントで最も多くのサンプルを含むカテゴリとして設定します。(3) の場合、現在のノードもリーフ ノードとしてマークしますが、そのカテゴリは親ノード内で最も多くのサンプルを含むカテゴリとして配置されます。これら 2 つのケースの処理の意味が異なることに注意してください。ケース (2) では現在のノードの事後分布が使用され、ケース (3) では親ノードのサンプル分布が現在のノードの事前分布として使用されます。
2. パーティションの選択
最初のセクションのアルゴリズムでは、最適なパーティション プロパティを扱いました。これについては、このセクションで詳しく説明します。最適な分割属性の要件:分割プロセスが継続するにつれて、デシジョン ツリーの分岐ノードに含まれるサンプルは可能な限り同じカテゴリに属します。つまり、ノードの「純度」はますます高くなります。
1. 情報の獲得
情報エントロピー:
「情報エントロピー」は、サンプル セットの純度を測定するために最も一般的に使用される指標です。
E nt ( D ) = − ∑ k = 1 ∣ y ∣ pklog 2 pk Ent(D) = - \sum_{k=1}^{|y|} p_k log_2 p_kエント( D ) _ _=−∑k = 1∣ y ∣pkログ_ _2pk
このうち、p k はサンプルセット D 内の k 番目のクラスサンプルの割合です。(k=1,2,...,|y|)。情報エントロピー Ent(D) の値が小さいほど、D の純度は高くなります。
定義:
G ゲイン ( D , a ) = E nt ( D ) − ∑ v = 1 VD v DE nt ( D v ) Gain(D,a)= Ent(D) - \sum_{v=1}^V \frac{D^v}{D} Ent(D^v)ゲイン(D 、_ _ _)_=エント( D ) _ _−∑v = 1VDDvエント( D _ _v )属性aの
v の値を取る D 内のすべてのサンプル (数値) を含む v 番目の分岐ノードです。 式の解釈: サンプルセット D を属性 a で分割することによって得られる情報ゲイン Gain ( D , a )Gain (D, a)
ゲイン(D 、_ _ _a ) = サンプルセット D の情報エントロピーEnt ( D v ) Ent(D^v)エント( D _ _v )-∑ 属性 a の各可能な値から属性 a の現在の可能な値に対応するサンプル サブセットの数∣ D v ∣ サンプル セットの数 D∣ D ∣ \sum_{属性 a の可能な各値}\frac{属性 a の現在の可能な値に対応するサンプル サブセットの数|D^v|}{サンプル セットの数 D|D|}∑属性aの可能な各値サンプルセットの数D ∣ D ∣属性a∣D _ _ _の現在可能な値に対応するサンプルサブセットの数v ∣対応するサンプル サブセットの情報エントロピーEnt ( D v ) Ent(D^v)エント( D _ _v )
一般に、属性 a を使って除算することで得られる「純度の向上」は、得られる情報が大きいほど大きくなります。したがって、情報ゲインを使用して、決定木の分割属性、つまり決定木アルゴリズムで言及されている最適な分割属性を選択できます。
2. ゲインレート
背景: 情報ゲインには、多数の可能な値を持つ属性に対する優先順位があります。この優先順位による悪影響を軽減するために、有名な C4.5 デシジョン ツリー アルゴリズムでは、情報ゲインを直接使用せず、ゲイン率を使用して最適なパーティション属性を選択します。
ゲイン比の式を次のように定義します。
G ainratio ( D , a ) = Gain ( D , a ) IV ( a ) Gain_ratio(D,a) = \frac{Gain(D,a)}{IV(a)}ゲイン_ _ _rat i o ( D , _)_=I V ( a )ゲイン( D , a ) _ _ _
ここで、
IV ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ IV(a) = -\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{| D|}IV (a )_=−∑v = 1V∣ D ∣∣D _v ∣ログ_ _2∣ D ∣∣D _v ∣
IV(a) は属性 a の「固有値」と呼ばれます。属性 a の取り得る値が多いほど (つまり、V が大きいほど)、IV(a) の値は大きくなります。
ゲイン レート基準では、取り得る値の数が少ない属性が優先されることに注意してください。そのため、C4.5 アルゴリズムでは、最大のゲイン レートを持つ属性を候補パーティション属性として直接計算するのではなく、ヒューリスティックを使用します。つまり、最初に候補パーティション属性から平均レベルよりも高い情報ゲインを持つ属性を見つけ出し、次に最も高いゲイン レートを持つ属性を選択します。
3. ジニ指数
CART デシジョン ツリーは、「Gini インデックス」を使用してパーティション属性を選択します。データセット D の純度は、Gini 値によって測定できます。
G ini ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ ≠ kpkpk ′ = 1 − ∑ k = 1 ∣ y ∣ pk 2 Gini(D) = \sum_{k=1}^{|y|} \sum_{k'≠k}p_ kp_{k'}= 1 - \sum_{k =1}^{|y|}p_k^2ジニ( D ) _ _ _=∑k = 1∣ y ∣∑k』= kpkpk「=1−∑k = 1∣ y ∣pk2
このうち、p k はサンプルセット D 内の k 番目のクラスサンプルの割合です。
直感的には、Gini(D) は、データ セット D からランダムに抽出された 2 つのサンプルが一貫性のないクラス ラベルを持つ確率を反映します。したがって、Gini(D) が小さいほど、データセット D の純度は高くなります。
属性 a のジニ インデックスは次のように定義されます。
G ini _index ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ( D v ) Gini\_index(D,a) = \sum_{v=1}^{V} \frac{|D^v|}{|D|}Gini(D^v)G i n i _インデックス( D , _ _ _ _)_=∑v = 1V∣ D ∣∣D _v ∣ジニ(D)_ _v )
したがって、候補属性集合Aにおいて、分割後のジニ指数が最小となる属性を最適な分割属性として選択する。
3.剪定処理
枝刈りは、「過剰適合」に対処するための決定木学習アルゴリズムの主な手段です。
決定木枝刈りの基本戦略は「前枝刈り」と「後枝刈り」です。
1. 事前枝刈りとは、決定木の生成プロセスにおいて、分割前に各ノードを推定することを意味します。現在のノードの分割によって決定木の汎化パフォーマンスを改善できない場合、分割は停止され、現在のノードはリーフ ノードとしてマークされます。 2. 事後枝刈りは、トレーニング セットから完全な決定木を生成し、次に非リーフ ノードを下から上に検査します。ノードに対応するサブツリーをリーフ ノードに置き換えることで決定木の汎化パフォーマンスが向上する場合は、サブツリーを次のように置き換えます。リーフノード
。
一般に、決定木のパフォーマンスが向上したかどうかを判断するには、このシリーズの第 2 章で説明したパフォーマンス評価が使用されます。
1. 事前剪定
利点: 事前枝刈りにより、デシジョン ツリーの多くの分岐が「拡張」されなくなり、オーバーフィッティングのリスクが軽減されるだけでなく、デシジョン ツリーのトレーニング時間のオーバーヘッドとテスト時間のオーバーヘッドも大幅に削減されます。
短所: 一部のブランチの現在の分割では汎化パフォーマンスを向上させることはできず、汎化パフォーマンスの低下につながる可能性さえありますが、それに基づくその後の分割はパフォーマンスの大幅な向上につながる可能性があります。事前枝刈りは「貪欲な」性質に基づいており、特定の枝の拡張を禁止するため、枝刈り前のデシジョン ツリーにアンダーフィットするリスクが生じます。
デシジョン ツリーを事前に枝刈りすると、「デシジョン スタンプ」とも呼ばれる、分割レベルが 1 つだけのデシジョン ツリーが生成される場合があります。
2. 剪定後の作業
枝刈り後のデシジョン ツリーは通常、枝刈り前のデシジョン ツリーよりも多くの枝を保持します。
利点: 一般に、枝刈り後のデシジョン ツリーにはアンダーフィッティングのリスクがほとんどなく、汎化パフォーマンスは枝刈り前のデシジョン ツリーよりも優れていることがよくあります。
短所: 枝刈り後のプロセスは、完全なデシジョン ツリーが生成された後に実行され、すべての非リーフ ノードが下から上に 1 つずつ検査されるため、トレーニング時間のオーバーヘッドは、枝刈りされていないデシジョン ツリーや枝刈り前のデシジョン ツリーよりもはるかに大きくなります。
4. 連続値と欠損値
1. 連続値処理
この前に、離散属性に基づく決定木の生成について説明しました。連続属性は現実世界ではよく遭遇します。連続属性の取り得る値の数は無限であるため、連続属性の取り得る値に従ってノードを直接分割することはできません。この問題に対処するために、連続属性の離散化技術が使用されます。最も単純なストラテジストは、二分法 (C4.5 デシジョン ツリー アルゴリズムで使用されるメカニズム) を使用して連続属性を扱います。
処理:
1. 並べ替えます。サンプルセットと連続属性 a が与えられ、 a が D 上で n 個の異なる値を持つと仮定して、これらの値を小さいものから大きいものまで並べ替えて、それらを { a 1 , a 2 , … , ana^1,a^2,…,a^n として記録します 。
ある1、ある2、…、あるn }。(たとえば、属性 a は密度 ∈ [0,1]、サンプルでは 0.996、0.874、0.235、0.238、0.374 が表示され、ソート後は 0.235、0.238、0.374、0.874、0.996 になります)。
2. 分割点と分割点候補。分割点 t を基準にD をD t − と D t + D_t^- と D_t^+ にDt−そしてDt+2 つのサブセットD t − D_t^-Dt−属性 a の値が分割点 t、 D t + D_t^+以下のサンプルが含まれます。Dt+属性 a の値が分割点 t より大きいサンプルが含まれます。分割点の取得: ソートされた属性 a の値のうち、隣接する 2 つの値の中点が分割点候補として使用されます (たとえば、最初の 2 つの値 0.235、0.238 の場合、分割点候補 t1 は 0.236、切り捨てられます)。n 個の値に対して、2 つの隣接する分割が実行され、n-1 個の分割候補点が存在します。
3. 分割候補点を調査します。分割点の候補が決定したら、これらの分割点を離散的な属性値と同様に調べ、サンプル セットを分割するための最適な分割点を選択します。前のセクションでは、情報ゲインを通じて最適な分割点を選択し、連続属性値の分割における情報ゲインの式に特定の変更を加えました。 Gain ( D , a ) = maxt ∈ T a G ain ( D , a , t ) = maxt ∈ T a E nt ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E nt ( D t λ ) Gain(D ,a) = max_{t∈T_a}Gain(D,a,t)= max_{t∈T_a}Ent(D) - \sum_{λ∈\{-,+}\} \frac{|D_t^λ|}{|D|}Ent(D_t^λ
)ゲイン( D 、_ _ _)_=マックス_ _t ∈ Tあゲイン( D 、_ _ _、_t )=マックス_ _t ∈ Tあエント( D ) _ _−∑λ ∈ {
− , +}∣ D ∣∣D _t私∣エント( D _ _t私)
そのうち、Gain ( D , a , t ) Gain(D,a,t)ゲイン( D 、_ _ _、_t )はサンプル集合 d を分割点 t に基づいて 2 つに分割した後の情報利得です。分割点は修正された情報ゲインによって選択されます。
注: 離散属性とは異なり、現在のノードのパーティション属性が連続属性の場合、この属性は子孫ノードのパーティション属性として引き続き使用できます。
2. 欠損値の処理
背景:
実際のタスクでは、不完全なサンプル、つまりサンプルの一部の属性が欠落していることがよくあります。不完全なサンプルを単純に破棄し、欠落イベントのないサンプルのみを学習に使用すると、データ情報が大幅に無駄になることは明らかです。そのため、属性値が欠落している学習例を学習に利用することを検討する必要があります。
解決する必要がある 2 つの問題:
1. 属性値が欠落している場合にパーティション属性を選択する方法は?
2. 分割属性が与えられた場合、この属性のサンプルの値が欠落している場合、サンプルをどのように分割するか?
解決策:
質問 1:明らかにD ~ \tilde{D}
のみを使用できます。D~属性 a の長所と短所を判断します。
トレーニング セット D と属性 a が与えられた場合、D ~ \tilde{D}D~ は、属性 a に欠損値がない D のサンプルのサブセットを表します。属性 a に V 個の可能な値があるとします。{ a 1 , a 2 , … , a V a^1,a^2,…,a^V
ある1、ある2、…、あるV } (サンプルセットに現れる属性 a の値)、D ~ v \tilde{D}^vD~v はD ~ \チルダ{D}を意味しますD~ではava^vあるvのサンプルサブセットD ~ k \tilde{D}_kD~kD ~ \チルダ{D}を意味しますD~ k 番目のクラス (k=1,2,..., |y|) に属するサンプルのサブセット、明らかにD ~ \tilde{D}D~ =∪ k = 1 ∣ y ∣ D ~ k ∪_{k=1}^{|y|}\チルダ{D}_k∪k = 1∣ y ∣D~k (欠損値のない部分集合 = 各クラスの欠損値のない部分集合の合計) , D ~ \tilde{D}D~ =∪ v = 1 ∣ V ∣ D ~ v ∪_{v=1}^{|V|}\チルダ{D}^v∪v = 1∣ V ∣D~v (欠損値のないサブセット = 属性 a の各値の非欠損値サブセットの合計)。各サンプル x に重みwx w_xw×、次の要素を定義します:
欠損値のないサンプルの割合:
ρ = ∑ x ∈ D ~ wx ∑ x ∈ D wx ρ=\frac{\sum_{x∈\tilde{D}}w_x}{\sum_{x∈D}w_x}r=∑x ∈ Dw×∑× ∈D~w×
非価値サンプルにおけるクラス K の割合:
ρ ~ k = ∑ x ∈ d ~ kwx ∑ x ∈ d ~ wx (1 ≤ k ≤ ∣ y ∣) \ tilde {ρ} _k = \ frac {\ sum_ {x∈ \ t_x}} w_x} {\ s} {\ s} um_ {x t \チルダ {d}} w_x} (1≤k≤ | y |)r~k=∑× ∈D~w×∑× ∈D~kw×( 1≤k≤∣ y ∣ )
欠損値のないサンプルは、 属性 aava^vあるvのサンプルの割合
: r ~ v = ∑ x ∈ D ~ vwx ∑ x ∈ D ~ wx ( 1 ≤ v ≤ ∣ V ∣ ) \tilde{r}_v=\frac{\sum_{x∈\tilde{D}^v}w_x}{\sum_{x∈\tilde{D}}w_x}(1≤v) ≤|V|)r~v=∑× ∈D~w×∑× ∈D~vw×( 1≤v≤∣ V ∣ )
上記の 3 つの要素に基づいて、情報ゲインの式を次のように一般化します。
Gain ( D , a ) = ρ × Gain ( D ~ , a ) Gain(D,a) =ρ×Gain(\tilde{D},a)ゲイン( D 、_ _ _)_=r×ゲイン( _ _ _D~、a )
= ρ × ( E nt ( D ~ ) − ∑ v = 1 V r ~ v E nt ( D ~ v ) ) =ρ×(Ent(\tilde{D})-\sum_{v=1}^V\tilde{r}_vEnt(\tilde{D}^v))=r×(エント( _ _D~)−∑v = 1Vr~vエント( _ _D~v ))
このうち、
E nt ( D ~ ) = − ∑ k = 1 ∣ y ∣ ρ ~ klog 2 ρ ~ k Ent(\tilde{D}) = -\sum_{k=1}^{|y|}\tilde{ρ}_klog_2\tilde{ρ}_kエント( _ _D~)=−∑k = 1∣ y ∣r~kログ_ _2r~k
一般化された情報利得公式によれば、属性値が存在しない場合でもパーティション属性選択が実行されることが計算によって得られ、つまり、問題1が解決される。
質問 2 の場合:
分割属性 a のサンプル x の値がわかっている場合、x をその値に対応するサブノードに分割し、サンプルの重みはサブノード内の wx w_x のままになります。w×。分割属性 a のサンプル x の値が不明な場合、x をすべての子ノードに同時に分割し、サンプルの重みは属性値 ava^ vに等しくなります。あるvに対応する子ノードはr ~ v ⋅ wx \tilde{r}_v·w_xr~v⋅w×; 直感的には、同じサンプルを異なる確率で異なるサブノードに割り当てることです。
質問2は解決しました。
C4.5 アルゴリズムは上記の解決策を使用します。
5. 多変量デシジョン ツリー
多変量デシジョン ツリーは、その名前が示すとおり、意思決定プロセス中の意思決定生成に複数の変数を使用するツリー構造です。斜分割を実装する多変量デシジョン ツリーを例に挙げます。このタイプのデシジョン ツリーでは、非リーフ ノードは特定の属性だけでなく、属性の線形結合にも対応します。言い換えれば、各非リーフ ノードは線形分類子です
。
多変量決定木の学習プロセスでは、各非葉ノードの最適な分割属性を見つける代わりに、適切な線形分類器を構築しようとします。
要約する
決定木学習アルゴリズムの最も有名な代表は、ID3、C4.5、および CART です。
この章では、デシジョン ツリーの生成、デシジョン ツリー パーティションの選択、枝刈り戦略、連続値と欠損値の処理、多変量デシジョン ツリーのプロセスについて説明します。
決定木分割の選択では、情報利得、利得率、ジニ指数、その他の基準が一般的に分割に使用されます。これらの基準は、決定木のサイズに大きな影響を与えますが、汎化パフォーマンスには限定的な影響しか与えません。
この章では、決定木の枝刈りの基本戦略を紹介します。枝刈りの方法と程度は、決定木の汎化パフォーマンスに大きな影響を与えます。