2016-07-20 10 views
0

私はsklearnでちょっと遊んでいました。DecisionTreeClassifierのfit()は、同じデータを持つ異なるツリーを返します。

私は今、他のいくつかのデータでプレイし始めました。私はこの振る舞いが正しいと私が誤解しているかどうかはわかりませんが、私がfit(x、y)を呼び出すたびに、私は全く異なるツリーデータを取得します。したがって予測を実行すると、60%、次に70%、65%などさまざまな違いが得られます。

2つのツリーを出力するために2回以下のコードを実行しました。彼らはワードで彼ら。ある文書から他の文書の値を検索しようとしましたが、見つけられなかったものがたくさんありました。 私はある種のフィット(x、y)が常に同じ木を返すと考えています。この場合、列車の列車データが私を駄目にしていると仮定します。

clf_dt = tree.DecisionTreeClassifier() 
clf_dt.fit(x_train, y_train) 
with open("output2.dot", "w") as output_file: 
    tree.export_graphviz(clf_dt, out_file=output_file) 
+0

今後、私はあなたに[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)があるようにデータを提供したいと思います。人々の手助けが楽になるからです。また、 'python'で質問にタグを付けると、もっと目を覚ますことができます。 – Tchotchke

答えて

1

アルゴリズムにはランダムな成分があります。これはuser guideで読むことができます。関連部分:

最適な決定木を学習する問題は、最適性のいくつかの側面の下で、さらには単純な概念でもNP完全であることが知られています。したがって、実用的な意思決定木学習アルゴリズムは、局所的に最適な決定が各ノードで行われる欲張りアルゴリズムなどの発見的アルゴリズムに基づいている。そのようなアルゴリズムは、全体的に最適な決定木を返すことを保証することはできない。これは、特徴とサンプルをランダムにサンプリングして置換するアンサンブル学習者の複数のツリーを訓練することで軽減できます。

あなたは同じ結果を毎回達成したい場合は、整数にrandom_stateパラメータを設定します(デフォルトではNoneだ)とあなたは同じ結果を毎回取得する必要があります。

関連する問題