私はPythonで意思決定ツリーをプログラミングしています。 tree
は真の枝tb
と偽の枝fb
を持つオブジェクトです。ルートノードのみが属性results
を持っています。意思決定ツリーの再帰的プログラミング
results
は、ノードにおける各目標変数(すなわち従属変数)のカウントを含む辞書である。私はバイナリの分類問題に取り組んでいるので、例は辞書{0: 25, 1: 9}
です。
ツリー内をルートノードまで繰り返し処理する関数findrootnodes(tree)
を作成します。それはリストのルートノードを返すべきです。リストの各要素には辞書が含まれている必要があります。したがって、4つのルートノードを持つ決定木の例は[{0: 25, 1: 9}, {0: 2, 1: 65}, {0: 2, 1: 7}, {0: 52, 1: 4}]
です。
どうすればいいですか?私の現在のコードは以下ですが、問題は常に空のリストを返すことです。関数からルートノードを取り除くと、Pythonはインスタンス化される前にローカル変数のルートノードが参照されていると不満を持ちます。あなたのfindrootnodes
機能で
def findrootnodes(tree):
rootnodes = []
if tree.results != None:
rootnodes += tree.results
else:
findrootnodes(tree.tb)
findrootnodes(tree.fb)
return rootnodes
ありがとうございます。特に、辞書をリストに追加する方法については、 '+ =' – wwl
です。結果は次のようになります:[[{{0.0:10、1.0:11}]、[{0.0:157,1.0: 23}]、[[{0.0:7、1.0:177}]、[{0.0:77、1.0:44}]]] – wwl
入れ子リストを避ける方法はありますか? – wwl