I wrote some code for this a while back, pretty sure it didn't need access
to anything private in the decision tree / random forest model.  If people
want it added to the api I can put together a PR.

I think it's important to have separately parseable operators / operands
though.  E.g

"lhs":0,"op":"<=","rhs":-35.0
On Aug 28, 2015 12:03 AM, "Manish Amde" <manish...@gmail.com> wrote:

> Hi James,
>
> It's a good idea. A JSON format is more convenient for visualization
> though a little inconvenient to read. How about toJson() method? It might
> make the mllib api inconsistent across models though.
>
> You should probably create a JIRA for this.
>
> CC: dev list
>
> -Manish
>
> On Aug 26, 2015, at 11:29 AM, Murphy, James <james.mur...@disney.com>
> wrote:
>
> Hey all,
>
>
>
> In working with the DecisionTree classifier, I found it difficult to
> extract rules that could easily facilitate visualization with libraries
> like D3.
>
>
>
> So for example, using : print(model.toDebugString()), I get the following
> result =
>
>
>
>    If (feature 0 <= -35.0)
>
>   If (feature 24 <= 176.0)
>
>     Predict: 2.1
>
>   If (feature 24 = 176.0)
>
>     Predict: 4.2
>
>   Else (feature 24 > 176.0)
>
>     Predict: 6.3
>
> Else (feature 0 > -35.0)
>
>   If (feature 24 <= 11.0)
>
>     Predict: 4.5
>
>   Else (feature 24 > 11.0)
>
>     Predict: 10.2
>
>
>
> But ideally, I could see results in a more parseable format like JSON:
>
>
>
> {
>
> "node": [
>
>     {
>
>         "name":"node1",
>
>         "rule":"feature 0 <= -35.0",
>
>             "children":[
>
>                 {
>
>                   "name":"node2",
>
>                   "rule":"feature 24 <= 176.0",
>
>                   "children":[
>
>                       {
>
>                       "name":"node4",
>
>                       "rule":"feature 20 < 116.0",
>
>                       "predict":  2.1
>
>                       },
>
>                       {
>
>                       "name":"node5",
>
>                       "rule":"feature 20 = 116.0",
>
>                       "predict": 4.2
>
>                       },
>
>                       {
>
>                       "name":"node5",
>
>                       "rule":"feature 20 > 116.0",
>
>                       "predict": 6.3
>
>                       }
>
>                   ]
>
>                 },
>
>                 {
>
>                 "name":"node3",
>
>                 "rule":"feature 0 > -35.0",
>
>                   "children":[
>
>                       {
>
>                       "name":"node7",
>
>                       "rule":"feature 3 <= 11.0",
>
>                       "predict": 4.5
>
>                       },
>
>                       {
>
>                       "name":"node8",
>
>                       "rule":"feature 3 > 11.0",
>
>                       "predict": 10.2
>
>                       }
>
>                   ]
>
>                 }
>
>
>
>             ]
>
>     }
>
> ]
>
> }
>
>
>
> Food for thought!
>
>
>
> Thanks,
>
>
>
> Jim
>
>
>
>

Reply via email to