2016-04-06 10 views
1

決定木を構築するときには、各ノードで最良の特徴を選択し、その特徴の最適な分割位置を選択します。 しかし、現在のノード/セット内のサンプルについて、最良のフィーチャの値がすべて0である場合、私は何をしますか?すべてのサンプルは片側(< = 0ブランチ)にグループ化され続け、無限ループが発生します。たとえば :...決定木の構築

ただ、参考のために、私は次の擬似コードを、その後

#left: 1500, #right: 0 

#left: 1500, #right: 0 

というように、次のよ。

GrowTree(S) 
if (y_i = C for all i in S and some class C) then { 
return new leaf(C)        
} else { 
choose best splitting feature j and splitting point beta (*) 
I choose the one that gives me the max entropy drop 
S_l = {i : X_ij < beta}       
S_r = {i : X_ij >= beta} 
return new node(j, beta, GrowTree(S_l), GrowTree(S_r)) 

}

+0

ツリーを構築するためのコードを表示できますか? – Reti43

+0

私の質問を編集しました。 – Jobs

+0

"但し、最高の特徴のためのすべての値がサンプルのために0である"。このノードに到達するすべてのサンプルが同じクラスであるようです(確認できますか?)。もしそうなら、ノードは役に立たず、作成されてはいけません。 –

答えて

2

これは単に不可能です。モデル確信度の最大の恩恵を受けるしきい値を選択することになっています。すべてのインスタンスを同じブランチに置くスレッショルドを使用すると、モデル確信度が0になります。したがって、は最良の分割ではありませんです。これは、不純物/エントロピーが既にこの機能で0である場合にのみ起こるはずですが、それは決定木で葉を作成するための停止基準です。

+0

私は上記の決定木を使ってスパム検出を行っています。私が現在持っている唯一の特徴は、いくつかの単語数です。 「単語の袋」がどのように機能として使用できるか説明できますか?確率や何かの機能を追加/追加しますか? – Jobs

+0

別の質問をする – lejlot

+0

ちょっとしたこと:http://stackoverflow.com/questions/36469548/bag-of-words-feature-for-spam-detection-decision-tree – Jobs