問題設定:データの98%がクラスAに属し、2%がクラスBに属している不均衡なデータセットを持っています。私は、class_weightsを使用してDecisionTreeClassifier(sklearnから)以下の設定を使用してください:export_graphvizからのデシジョンツリー出力の理解
dtc_settings = {
'criterion': 'entropy',
'min_samples_split': 100,
'min_samples_leaf': 100,
'max_features': 'auto',
'max_depth': 5,
'class_weight': 'balanced'
}
基準を(giniではなく)エントロピーに設定する理由はありません。私はちょうど設定で遊んでいた。
ツリーのexport_graphvizを使用して、以下の決定木の図を取得しました。ここで私が使用したコードだ:
dot_data = tree.export_graphviz(dtc, out_file=None, feature_names=feature_col, proportion=False)
graph = pydot.graph_from_dot_data(dot_data)
graph.write_pdf("test.pdf")
私は、次の図の値リストの出力に混乱しています:
値リストの変数は、両方のクラスが同じ重みを持っていることを意味していますか?もしそうなら、ツリー内の次のノードの値リストはどのように計算されますか?
私が値リストを解釈する方法がわからない:
は、ここで私はexport_graphvizにTrueに割合を設定する別の例です。エントリクラスの重みですか?これは、分類器が次のノードで使用する次のしきい値を決定するために、各クラスにそれぞれ重みを適用していることを意味しますか?
お返事ありがとうございます。私がバランスのとれたデータセットを持っていれば、レコードの数は意味をなさないでしょう。この場合、サンプルの98%はクラスAに属し、2%はクラスBに属します。私はclass_weightを 'balanced'に設定しました。これは値リストの各エントリを同じものに設定しています。だから私は、データが本質的にこの分布を持たない場合、レコードの割合がどのように同じであるかは分かりません。 – OfLettersAndNumbers
そのノードでエントロピー= 1と主張することも同じことを示唆しています。 Entroyは、クラスがバランスしているときは1、すべてが1クラスのときは0です。 class_weightを 'balanced'に設定すると、2つのクラスの表現が等しくなるまで少数派クラスが複製されますhttp://stackoverflow.com/questions/30972029/how-does-the-class-weight-parameter-in-scikit-learn-work – Metropolis