0

以下は、ディシジョン ツリーの属性と値の異なるパスです。すべての組み合わせのツリーを列挙すると、そのツリーは巨大になります。したがって...ツリーの各パスは、葉ノードの個別の属性と値のすべてです。

スコアリングする値のリストが与えられた場合、つまり、最も一般的な要素を持つノードを見つけた場合、以下のコードを使用します。

私が望むものを達成しようとする最も狂ったように速い方法は何ですか? 以下は機能しますが、時間は非常に重要であるため、使用cしてPythonにインポートする価値があります。

ツリー構造の方が速いでしょうか? もしそうなら、どのような構造ですか?scipy weaveの方が速いでしょうか?

nodes = {}
nodes[1] = ['hod=1','hod=2','state=NY','state=LA']
nodes[2] = ['hod=3','hod=4','state=FL','state=NV']
nodes[3] = ['hod=5','hod=6','state=WY','state=HI']
nodes[4] = ['hod=5','hod=6']


score = ['hod=6','state=WY','dow=4']
score_size = len(score)

max_node = -1
max_len = -1
for node_id, node in nodes.iteritems():
    this_node_interection_len = len(set(score).intersection(node))
    if this_node_interection_len>max_len:
        max_len = this_node_interection_len
        max_node = node_id   
    #print node_id, len(set(score).intersection(node))


print 'max_node',3
4

1 に答える 1

1

各ノードのキー値であるヒープにデータを格納する方が高速な場合があります。len(score.intersection(node))この方法では、最初のデータ構造の構築は、フラット ディクショナリを作成するよりも少し遅くなりますが、最大スコアを持つノードだけでなく、上位のいくつかのノードをすばやく取得できます。

また、パフォーマンスを最適化するために PyPy などを使用することも検討する必要があります。

于 2013-03-07T11:37:35.170 に答える