Question

Je travaille avec des arbres de décision dans le scikit python apprendre. Contrairement à de nombreux cas d'utilisation pour cela, je ne suis pas tellement intéressé par la précision du classificateur à ce point tant que je suis extrais le chemin d'un point spécifique de données prend à travers l'arbre quand je l'appelle .predict() là-dessus. Quelqu'un at-il fait cela avant? Je voudrais construire une trame de données contenant ($ x_ {i} $, chemin $ _ {i} $) paires pour une utilisation dans une analyse en aval.

Était-ce utile?

La solution

On dirait que cela est plus facile à faire en R, en utilisant la bibliothèque rpart en combinaison avec la bibliothèque partykit. Je idéalement comme de trouver une façon de le faire en python, mais voici le code, pour toute personne intéressée (prise ):

pathpred <- function(object, ...){
    ## coerce to "party" object if necessary
    if(!inherits(object, "party")) object <- as.party(object)

    ## get standard predictions (response/prob) and collect in data frame
    rval <- data.frame(response = predict(object, type = "response", ...))
    rval$prob <- predict(object, type = "prob", ...)

    ## get rules for each node
    rls <- partykit:::.list.rules.party(object)

    ## get predicted node and select corresponding rule
    rval$rule <- rls[as.character(predict(object, type = "node", ...))]

    return(rval)
}

Illustration à l'aide des données d'iris et rpart ():

library("rpart")
library("partykit")
rp <- rpart(Species ~ ., data = iris)
rp_pred <- pathpred(rp)
rp_pred[c(1, 51, 101), ]

Cédant,

       response prob.setosa prob.versicolor prob.virginica
 1       setosa  1.00000000      0.00000000     0.00000000
 51  versicolor  0.00000000      0.90740741     0.09259259
 101  virginica  0.00000000      0.02173913     0.97826087
                                           rule
 1                          Petal.Length < 2.45
 51   Petal.Length >= 2.45 & Petal.Width < 1.75
 101 Petal.Length >= 2.45 & Petal.Width >= 1.75

Ce qui semble être quelque chose que je pourrais au moins utiliser pour obtenir des informations de nœud parent partagé.

Licencié sous: CC-BY-SA avec attribution
scroll top