決定木構造生成
参考注意
学習プロセスを期待して、完全な例の世代の次の記事では、私の学習過程で多くの混乱をもたらしていない、この文書は、完全な決定木を生成するプロセスを示し、紙の以下の二つのソースを参照してください。我々は助けます:
- タイムオタク:「データ分析45戦闘ストレス」:17,18,19話
- ズハウ・ジワ:「機械学習」:第四章決定木
サンプル・データ・テーブル
得られたデータセット、17講演「真のデータ分析は45を強調」として使用記事
天気 | 温度 | 湿度 | 風の吹きます | バスケットボールをプレイするかどうか |
---|---|---|---|---|
明確な | 高いです | で | ノー | ノー |
明確な | 高いです | で | それはあります | ノー |
陰 | 高いです | 高いです | ノー | それはあります |
小雨 | 高いです | 高いです | ノー | それはあります |
小雨 | 低いです | 高いです | ノー | ノー |
晴れた日 | で | で | それはあります | それはあります |
曇りの日 | で | 高いです | それはあります | ノー |
関連概念を説明しました
ディシジョン・ツリー
上記の表のデータには、例えば、私たちはバスケットボールをプレイするかどうかを検討するなど、天候を見てすることは曇りのない、曇り、そして無風の外で、無風と、私たちは行って、風が行くことはありません。私たち上記の決定木は、ツリー状の構造であるチャートに編成背後にあるロジックを決定することです。
ID3、C4.5、CART
3周知のアルゴリズムの決定木がある:ID3、C4.5、CARTは、ID3情報ゲインアルゴリズムであり、利得比を用いて算出C4.5は、CARTジニ係数は、その中に、以下の簡単なアルゴリズムを使用して計算されます。 、完全に理解されていない、ここで必要な、走査線が印象を持って、後者の例では、計算例があり、理解しておく必要がありバインディングバックを参照してください。
エントロピ
情報理論では、不確実性の離散確率事象の発生確率は、そのような情報の不確実性を測定するために、情報シャノンの父親は、エントロピーの概念とエントロピーを計算する数式を導入しました。
Entopy(t)=-Σp(i|t)log2p(i|t)
情報利得
情報利得の分割を指すエントロピーダウン増大純度と関連しています。その式はエントロピー父ノードマイナスすべての子ノードのエントロピーです。情報ゲイン式は次のように表すことができます。
Gain(D,a)=Entropy(D)- Σ|Di|/|D|Entropy(Di)
情報利得比
情報利得比=情報ゲイン/プロパティエントロピ。エントロピーは、天候、曇っ及び雨天として計算属性エントロピー、3 / 7,2 / 7,2 / 7と各として、各属性のエントロピーです。
H(天气)= -(3/7 * log2(3/7) + 2/7 * log2(2/7) + 2/7 * log2(2/7))
ジニ係数
経済にジニ係数は、富視差ことを示す。ジニ指数より大きい0.4国民所得ギャップの一般的に使用される指標を測定することができる。0.2~0.4の間のジニ係数を割り当て、ない富ギャップを正当化する。また、下読み出しますジニ係数
ジニ係数は、不確実性自体サンプルを反映する。試料と説明差は不確実性の小さい、低い程度である場合にジニ係数が小さいです。
CARTアルゴリズム分類ツリーを構築する際に、分割属性として最小の属性ジニ係数を選択します。
次のようにジニ係数が計算されます。
Gini = 1 – Σ (Pi)2 for i=1 to number of classes
イラスト
以下は、完全なツリー構造生成過程で、我々は例えば、完全なデータの最初に与えられています
ルートノードを選択します
4つの属性の情報ゲイン比、ジニ係数の利得を計算するために必要な天候、気温、湿度、風の情報:これは、上記のリストに4つの属性を有しています。
データの7セットは、バスケットボール3を再生、4は、バスケットボールをバスケットボールノー確率4/7をプレイしていないわけではないが、バスケットボールの3/7確率、ルートノードは、情報エントロピーの式に基づいて求めることができますエントロピー:
Ent(D)=-(4/7 * log2(4/7) + 3/7 * log2(3/7))=0.985
天気
次のデータテーブル:
気象条件 | バスケットボールの数 | 数量はバスケットボールをしません。 | トータル |
---|---|---|---|
明確な | 1 | 2 | 3 |
陰 | 1 | 1 | 2 |
小雨 | 1 | 1 | 2 |
情報利得の計算
財産部門などの気象場合は、次の3つのリーフノードがあります:晴れ、曇り、雨、バスケットボール、1つのバスケットボールをしていない晴れたそのうちの2つは、バスケットボールをして曇りの日は、1がバスケットボールをしません。霧雨1バスケットボール、バスケットボールをプレイするものではありません、対応するそれぞれのエントロピーは次のとおりです。
D(晴天)=-(1/3 * log2(1/3) + 2/3 * log2(2/3)) = 0.981
D(阴天)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
D(雨天)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
3つのデータ晴れ、曇った二つのデータを有するデータセットにおいて、二つのデータ雨があり、3 / 7,2 / 7,2 / 7の対応する確率は、次いで、子供は、正規化エントロピーがあるノード。
3/7 * 0.918 + 2/7 * 1.0 * 2/7 * 1.0 = 0.965
彼らの情報利得は次のようになります。
Gain(天气)=0.985 - 0.965 = 0.020
情報利得比計算
3つのオプションの天候があり、3つのデータ晴れ、曇りの二つのデータがあり、エントロピープロパティに対応する二つのデータ雨、3 / 7,2 / 7,2 / 7の対応する確率は、あります。
H(天气)=-(3/7 * log2(3/7) + 2/7 * log2(2/7) + 2/7 * log2(2/7)) = 1.556
これは、情報利得ました:
Gain_ratio(天气)=0.020/1.556=0.012
ジニ係数の計算
- (1/3)2 - - (2/3)^ 2 = 1 - 1/9 - = 4/9 4/9ジニ(=晴れの天気は、1)=
- (1/2)2 - - (1/2)^ 2 = 1 - 1/4 - ジニ(=曇りの天候は、1)= 1/4 = 0.5
- ジニ(雨の天候=)= 1 - (1/2)2 - (1/2)^ 2 = 1 - 4分の1〜4分の1 = 0.5
- ジニ(天候)=(3/7)+ 4/9 *(2/7)* 0.5 +(2/7)* 0.5 = 1/7 + 1/7 + 4/21 = 10/21
温度
次のデータテーブル:
温度状態 | バスケットボールの数 | 数量はバスケットボールをしません。 | トータル |
---|---|---|---|
高いです | 2 | 2 | 4 |
で | 1 | 1 | 2 |
低いです | 0 | 1 | 1 |
情報利得の計算
次のようにエントロピー、それぞれの場合は、以下のとおりです。
D(高)=-(2/4 * log2(2/4) + 2/4 * log2(2/4)) = 1.0
D(中)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
D(低)=-(0/1 * log2(0/1) + 1/1 * log2(1/1)) = 0.0
子ノードの正規化情報エントロピーとして:
4/7 * 1.0 + 2/7 * 1.0 * 1/7 * 0.0 = 0.857
彼らの情報利得は次のようになります。
Gain(温度)=0.985 - 0.857 = 0.128
情報利得比計算
プロパティのエントロピー:
H(温度)=-(4/7 * log2(4/7) + 2/7 * log2(2/7) + 1/7 * log2(1/7)) = 1.378
これは、情報利得ました:
Gain_ratio(温度)=0.128/1.378=0.0928
ジニ係数の計算
- (2/4)2 - - (2/4)^ 2 = 1 - 1/4 - ジニ(=高温)1 = 1/4 = 0.5
- (1/2)2 - - (1/2)^ 2 = 1 - 1/4 - ジニ(=温度)1 = 1/4 = 0.5
- ジニ(=低温)= 1 - (0/1)2 - (1/1)= 2 ^ 1--0--1 = 0
- ジニ(温度)= 4/7 * 0.5 * 0.5 + 2/7 + 1/7 * 3/7 = 0
湿度ジニ係数の計算
次のデータテーブル:
湿度状態 | バスケットボールの数 | 数量はバスケットボールをしません。 | トータル |
---|---|---|---|
高いです | 2 | 2 | 4 |
で | 2 | 1 | 3 |
情報利得の計算
次のようにエントロピー、それぞれの場合は、以下のとおりです。
D(高)=-(2/4 * log2(2/4) + 2/4 * log2(2/4)) = 1.0
D(中)=-(2/3 * log2(2/3) + 1/3 * log2(1/3)) = 0.918
子ノードの正規化情報エントロピーとして:
4/7 * 1.0 + 3/7 * 0.918 = 0.964
彼らの情報利得は次のようになります。
Gain(湿度)=0.985 - 0.964 = 0.021
情報利得比計算
プロパティのエントロピー:
H(湿度)=-(4/7 * log2(4/7) + 3/7 * log2(3/7) = 0.985
これは、情報利得ました:
Gain_ratio(湿度)=0.021/0.985=0.021
ジニ係数の計算
- (2/4)2 - - (2/4)^ 2 = 1 - 1/4 - ジニ(=高湿度は、1)= 1/4 = 0.5
- (2/3)2 - - (1/3)^ 2 = 1 - 4/9 - = 4/9 1/9ジニ(=湿度は、1)=
- ジニ(湿度)=(4/7)+ 0.5×(3/7)= 2/7 * 4/9 + 4/21 = 10/21〜0.47619
ジニ係数算出風が強いです
次のデータテーブル:
ウィンディ状態 | バスケットボールの数 | 数量はバスケットボールをしません。 | トータル |
---|---|---|---|
それはあります | 1 | 2 | 3 |
ノー | 2 | 2 | 4 |
情報利得の計算
次のようにエントロピー、それぞれの場合は、以下のとおりです。
D(是)=-(2/3 * log2(2/3) + 1/3 * log2(1/3)) = 0.918
D(否)=-(2/4 * log2(2/4) + 2/4 * log2(2/4)) = 1.0
子ノードの正規化情報エントロピーとして:
3/7 * 1.0 + 4/7 * 0.918 = 0.964
彼らの情報利得は次のようになります。
Gain(刮风)=0.985 - 0.964 = 0.021
情報利得比計算
プロパティのエントロピー:
H(刮风)=-(4/7 * log2(4/7) + 3/7 * log2(3/7) = 0.985
これは、情報利得ました:
Gain_ratio(刮风)=0.021/0.985=0.021
ジニ係数の計算
- ジニ(風= YES)= 1 - (2/3)2 - (1/3)^ 2 = 1 - 4/9 - = 4/9 1/9
- (2/4)2 - - (2/4)^ 2 = 1 - 1/4 - ジニ(風= NOは、1)= 1/4 = 0.5
- (風)ジニ=(4/7)*(3/7)+ 0.5 = 2/7 * 4/9 + 4/21 = 10/21〜0.47619
ルートノードを選択します
、情報のために第1のゲイン、ゲイン比のために第2の情報を次のようにすべてのインターフェイスが要約され、そして第三はジニ係数です。前記情報利得と利得比情報が最大、最小ジニ係数の選択を選択します。温度:以下の結果から選択することができます
- ゲイン(天候)= 0.985から0.965 = 0.020
- ゲイン(温度)= 0.985から0.857 = 0.128
- ゲイン(湿度)= 0.985から0.964 = 0.021
ゲイン(風)= 0.985から0.964 = 0.021
- Gain_ratio(天候)= 0.020 / 1.556 = 0.012
- Gain_ratio(温度)= 0.128 / 1.378 = 0.0928
- Gain_ratio(湿度)= 0.021 / 0.985 = 0.021
Gain_ratio(風)= 0.021 / 0.985 = 0.021
- ジニ(天候)=(3/7)+ 4/9 *(2/7)* 0.5 +(2/7)* 0.5 = 0.47619
- ジニ(温度)= * 0.5 * 0.5 + 2/7 + 1/7 0 = 0.42857 4/7 *
- ジニ(湿度)=(4/7)+ 0.5×(3/7)= 2/7 * 4/9 + 4/21 = 10/21〜0.47619
(風)ジニ=(4/7)*(3/7)+ 0.5 = 2/7 * 4/9 + 4/21 = 10/21〜0.47619
実質的に有するノードを決定した後、高い木構造、低エネルギーの温度決意の結果を、以下の残りのデータから再び選択されるさらなる分割属性する必要があります。
- ルート
- さらに:(なるように選択高温子ノード)
- 温度:(サブノードをさらに選択すること)
- 葉の温度が低いです。(直接バスケットボールをプレーしないと判断)バスケットボールをしていません
高温、選択した子ノード
以下、残りのデータセット、温度もはや参加しているノードは、次のように選択されました。
天気 | 温度(部門に参加しません) | 湿度 | 風の吹きます | バスケットボールをプレイするかどうか |
---|---|---|---|---|
明確な | 高いです | で | ノー | ノー |
明確な | 高いです | で | それはあります | ノー |
陰 | 高いです | 高いです | ノー | それはあります |
小雨 | 高いです | 高いです | ノー | それはあります |
計算式は、高エントロピー温度情報エントロピーの子ノードを得ることができます。
Ent(D)=-(2/4 * log2(2/4) + 2/4 * log2(2/4)) = 1.0
天気
次のデータテーブル:
気象条件 | バスケットボールの数 | 数量はバスケットボールをしません。 | トータル |
---|---|---|---|
明確な | 1 | 1 | 2 |
陰 | 1 | 0 | 1 |
小雨 | 1 | 0 | 1 |
情報利得の計算
対応するエントロピーは次のとおりです。
D(晴天)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
D(阴天)=-(1/1 * log2(1/1) + 0/1 * log2(0/1)) = 0.0
D(雨天)=-(1/1 * log2(1/1) + 0/1 * log2(0/1)) = 0.0
正規の情報エントロピー:
2/4 * 1.0 + 1/4 * 0.0 * 1/4 * 0.0 = 0.5
彼らの情報利得は次のようになります。
Gain(天气)=1.0 - 0.5 = 0.5
情報利得比計算
に対応するエントロピーのプロパティ:
H(天气)=-(2/4 * log2(2/4) + 1/4 * log2(1/4) + 1/4 * log2(1/4)) = 1.5
これは、情報利得ました:
Gain_ratio(天气)=0.5/1.5=0.33333
ジニ係数の計算
- (1/2)2 - - (1/2)^ 2 = 1 - 1/4 - ジニ(=晴れの天気は、1)= 1/4 = 0.5
- ジニ(=曇り天候)= 1 - (1/1)2 - (0/1)= 2 ^ 0
- Gini(天气=小雨)=1 - (1/1)^2 - (0/1)^2 = 0
- Gini(天气)=2/4 * 0.5 + 1/4 * 0 + 1/4 * 0 = 0.25
湿度的基尼系数计算
其数据表格如下:
湿度状态 | 打篮球数量 | 不打篮球数量 | 总数 |
---|---|---|---|
高 | 2 | 0 | 2 |
中 | 0 | 2 | 2 |
信息增益计算
各情况的信息熵如下:
D(高)=-(2/2 * log2(2/2) + 0/2 * log2(0/2)) = 0.0
D(中)=-(0/2 * log2(0/2) + 2/2 * log2(2/2)) = 0.0
作为子节点的归一化信息熵为:
2/4 * 0.0 + 2/4 * 0.0 = 0.0
其信息增益为:
Gain(湿度)=1.0 - 0.0 = 1.0
信息增益率计算
属性熵为:
H(湿度)=-(2/4 * log2(2/4) + 2/4 * log2(2/4) = 1.0
则其信息增益率为:
Gain_ratio(湿度)=1.0/1.0=1.0
基尼系数计算
- Gini(湿度=高)=1 - (2/2)^2 - (0/2)^2 = 0
- Gini(湿度=中)=1 - (0/2)^2 - (2/2)^2 = 0
- Gini(湿度)=(2/4) * 0 + (2/4) * 0 = 0
刮风计算
其数据表格如下:
刮风状态 | 打篮球数量 | 不打篮球数量 | 总数 |
---|---|---|---|
是 | 0 | 1 | 1 |
否 | 2 | 1 | 3 |
信息增益计算
各情况的信息熵如下:
D(是)=-(0/1 * log2(0/1) + 1/1 * log2(1/1)) = 0
D(否)=-(2/3 * log2(2/3) + 1/3 * log2(1/3)) = 0.918
作为子节点的归一化信息熵为:
1/4 * 0.0 + 3/4 * 0.918 = 0.688
其信息增益为:
Gain(刮风)=1.0 - 0.688 = 0.312
信息增益率计算
属性熵为:
H(刮风)=-(1/3 * log2(1/3) + 2/3 * log2(2/3) = 0.918
则其信息增益率为:
Gain_ratio(刮风)=0.312/0.918=0.349
基尼系数计算
- Gini(刮风=是)=1 - (0/1)^2 - (1/1)^2 = 0
- Gini(刮风=否)=1 - (2/3)^2 - (1/3)^2 = 1 - 4/9 - 1/9 = 4/9
- Gini(刮风)=(1/4) * 0 + (3/4) * 4/9 = 1/3 = 0.333333
子节点温度高的选择
如下汇总所有接口,第一个为信息增益的,第二个为信息增益率的,第三个为基尼系数的。其中信息增益和信息增益率选择最大的,基尼系数选择最小的。从下面的结果可以得到选择为:湿度
- Gain(天气)=1.0 - 0.5 = 0.5
- Gain(湿度)=1.0 - 0.0 = 1.0
Gain(刮风)=1.0 - 0.688 = 0.312
- Gain_ratio(天气)=0.5/1.5=0.33333
- Gain_ratio(湿度)=1.0/1.0=1.0
Gain_ratio(刮风)=0.312/0.918=0.349
- Gini(天气)=2/4 * 0.5 + 1/4 * 0 + 1/4 * 0 = 0.25
- Gini(湿度)=(2/4) * 0 + (2/4) * 0 = 0
Gini(刮风)=(1/4) * 0 + (3/4) * 4/9 = 1/3 = 0.333333
确定跟节点以后,大致的树结构如下,选择湿度作为分裂属性后能直接确定结果:
- 根节点
- 子节点温度高
- 叶节点湿度高:打篮球
- 叶节点湿度中:不打篮球
- 子节点温度中:(待进一步进行选择)
- 叶节点温度低:不打篮球(能直接确定为不打篮球)
- 子节点温度高
子节点温度中的选择
其剩下的数据集如下,温度不再进行下面的节点选择参与:
天气 | 温度(不参与此次分裂) | 湿度 | 刮风 | 是否打篮球 |
---|---|---|---|---|
晴天 | 中 | 中 | 是 | 是 |
阴天 | 中 | 高 | 是 | 否 |
根据信息熵的计算公式可以得到子节点温度高的信息熵为:
Ent(D)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
天气
其数据表格如下:
天气状态 | 打篮球数量 | 不打篮球数量 | 总数 |
---|---|---|---|
晴 | 1 | 0 | 1 |
阴 | 0 | 1 | 1 |
信息增益计算
相应的信息熵如下:
D(晴天)=-(1/1 * log2(1/1) + 0/1 * log2(0/1)) = 0.0
D(阴天)=-(0/1 * log2(0/1) + 1/1 * log2(1/1)) = 0.0
归一化信息熵为:
1/2 * 0.0 + 1/2 * 0.0 = 0
其信息增益为:
Gain(天气)=1.0 - 0 = 1.0
信息增益率计算
对应的属性熵为:
H(天气)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
则其信息增益率为:
Gain_ratio(天气)=1.0/1.0=1.0
基尼系数计算
- Gini(天气=晴)=1 - (1/1)^2 - (0/1)^2 = 0
- Gini(天气=阴)=1 - (0/1)^2 - (1/1)^2 = 0
- Gini(天气)=1/2 * 0.0 + 1/2 * 0.0 = 0
湿度的基尼系数计算
其数据表格如下:
湿度状态 | 打篮球数量 | 不打篮球数量 | 总数 |
---|---|---|---|
高 | 0 | 1 | 1 |
中 | 1 | 0 | 1 |
信息增益计算
各情况的信息熵如下:
D(高)=-(0/1 * log2(0/1) + 1/1 * log2(1/1)) = 0.0
D(中)=-(1/1 * log2(1/1) + 0/1 * log2(0/1)) = 0.0
作为子节点的归一化信息熵为:
1/2 * 0.0 + 1/2 * 0.0 = 0
其信息增益为:
Gain(湿度)=1.0 - 0.0 = 1.0
信息增益率计算
属性熵为:
H(湿度)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
则其信息增益率为:
Gain_ratio(湿度)=1.0/1.0=1.0
基尼系数计算
- Gini(湿度=高)=1 - (0/1)^2 - (1/1)^2 = 0
- Gini(湿度=中)=1 - (1/1)^2 - (0/1)^2 = 0
- Gini(湿度)=1/2 * 0.0 + 1/2 * 0.0 = 0
刮风计算
其数据表格如下:
刮风状态 | 打篮球数量 | 不打篮球数量 | 总数 |
---|---|---|---|
是 | 1 | 1 | 2 |
信息增益计算
各情况的信息熵如下:
D(是)=-(1/2 * log2(1/2) + 1/2 * log2(1/2)) = 1.0
作为子节点的归一化信息熵为:
1/1 * 1.0 = 1.0
其信息增益为:
Gain(刮风)=1.0 - 1.0 = 0
信息增益率计算
属性熵为:
H(刮风)=-(2/2 * log2(2/2) = 0.0
则其信息增益率为:
Gain_ratio(刮风)=0/0 = 0
基尼系数计算
- Gini(刮风=是)=1 - (1/2)^2 - (1/2)^2 = 0.5
- Gini(刮风)=2/2 * 0.5 = 0.5
子节点温度中的选择
如下汇总所有接口,第一个为信息增益的,第二个为信息增益率的,第三个为基尼系数的。其中信息增益和信息增益率选择最大的,基尼系数选择最小的。从下面的结果可以得到天气和湿度是一样好的,我们随机选天气吧
- Gain(天气)=1.0 - 0 = 1.0
- Gain(湿度)=1.0 - 0.0 = 1.0
Gain(刮风)=1.0 - 1.0 = 0
- Gain_ratio(天气)=1.0/1.0=1.0
- Gain_ratio(湿度)=1.0/1.0=1.0
Gain_ratio(刮风)=0/0 = 0
- Gini(天气)=1/2 * 0.0 + 1/2 * 0.0 = 0
- Gini(湿度)=1/2 * 0.0 + 1/2 * 0.0 = 0
Gini(刮风)=2/2 * 0.5 = 0.5
确定跟节点以后,大致的树结构如下,选择天气作为分裂属性后能直接确定结果:
- 根节点
- 子节点温度高
- 叶节点湿度高:打篮球
- 叶节点湿度中:不打篮球
- 子节点温度中
- 叶节点天气晴:打篮球
- 叶节点天气阴:不打篮球
- 叶节点温度低:不打篮球(能直接确定为不打篮球)
- 子节点温度高
最终的决策树
在上面的步骤已经进行完整的演示,得到当前数据一个完整的决策树:
- 根节点
- 子节点温度高
- 叶节点湿度高:打篮球
- 叶节点湿度中:不打篮球
- 子节点温度中
- 叶节点天气晴:打篮球
- 叶节点天气阴:不打篮球
- 叶节点温度低:不打篮球(能直接确定为不打篮球)
- 子节点温度高
思考
在构造的过程中我们可以发现,有可能同一个属性在同一级会被选中两次,比如上面的决策树中子节点温度高中都能选中温度作为分裂属性,这样是否合理?
完整的构造整个决策树后,发现整个决策树的高度大于等于属性数量,感觉决策树应该是构造时间较长,但用于决策的时候很快,时间复杂度也就是O(n)
话外
周志华的《机器学习》是本好书,极客专栏感兴趣的可以去看看