私はSparkにRandomForestClassifierModelを持っています。 .toDebugString()を使用して出力し、次のSpark(scala)のランダムフォレスト統計を表示する方法
Tree 0 (weight 1.0):
If (feature 0 in {1.0,2.0,3.0})
If (feature 3 in {2.0,3.0})
If (feature 8 <= 55.3)
.
.
Else (feature 0 not in {1.0,2.0,3.0})
.
.
Tree 1 (weight 1.0):
.
.
...etc
私はそれがモデルを通過するように、実際のデータを表示したい
、各ノードのラベルの確率を見て
Tree 0 (weight 1.0):
If (feature 0 in {1.0,2.0,3.0}) 60%
If (feature 3 in {2.0,3.0}) 57%
If (feature 8 <= 55.3) 22%
.
.
Else (feature 0 not in {1.0,2.0,3.0}) 40%
.
.
Tree 1 (weight 1.0):
.
...etc
のようなもの、私はどの経路が木の中でデータ(何千ものレコード)によって追跡される可能性が高いことを知ることができます。これは本当に良い洞察になります!
私はここで素晴らしい答えを見つけました:Spark MLib Decision Trees: Probability of labels by features?
は、残念ながら、答えのメソッドはMLlibのAPIを使用し、しようと多くの後、私は別の実装を持っている、データフレームのAPIを使用して、それを複製することができませんでしたクラスNodeおよびSplit :(
おそらく、mlパッケージのコードを見て元の回答を適応させることができます:https://github.com/apache/spark/blob/branch-2.0/mllib/src/main/scala/org/ apache/spark/ml/tree/Node.scala –
私はコードを調べました。私はそれが可能であるかどうかは確かではありません(少なくとも、他の回答と同じ戦略ではない)。各ノードの分割の割合は、mlパッケージのプライベートな "不純物属性"属性の内側にあるためです。おそらく、ノードの可視属性を使用してこの属性をImpurityCalculatorで作成することは可能ですが、方法は見つけられません。 –
@DanieldePaulaそれを見ていただきありがとうございます。私はむしろ、mllibを使うために私のパイプライン全体をリファクタリングしません。あなたの最後の提案を使って方法を見つけようとします。これまでのところ、私は森林のすべての木を配列で得ることができます。私はAPIを使ってこれをやりたいのですが、たくさんのクラスを書き直す必要はありません。あなたが他の解決策を思いついた場合は、私に知らせてください! – rtcode