Esta pregunta es similar a la de alguna otra pregunta en Stackoverflow (aquí, aquí y aquí), pero lo suficientemente diferentes como para que yo no se puede extrapolar esas respuestas a mi caso.

Tengo una función en la que me ajuste un C5.0 modelo y de intentar trazar el modelo.

train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)

binclass es el nombre de una columna en mi formación/datos de la prueba (globald es un dataframe de que me subconjunto de filas con _ind índices y columnas c(3:12,21), donde la columna 21 se denomina binclass). Montaje funciona bien. Sin embargo, cuando yo también agregue la línea

plot(model,trial=0)

luego me sale el siguiente error: Error in is.data.frame(data) : object 'train_d' not found.

¿Cómo es posible que al ajustar el modelo, train_d es encontrado y utilizado correctamente, pero mientras que el trazado, train_d está en ninguna parte ser encontrado? Y, alguna sugerencia de cómo resolver este problema. Espacios de nombres en [r], siguen siendo un misterio para mí.

Un mínimo de ejemplo es el siguiente:

f <- function(){
    library(C50)
    set.seed(1)
    class = c(1,2)
    d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
    d$binclass <- as.factor(d$binclass)
    model <- C5.0(binclass ~ ., data=d)
    plot(model)   
}

Llamar f() resultados en la siguiente error: Error in is.data.frame(data) : object 'd' not found

Editar:
Como por la respuesta de MrFlick, parece que la causa de este problema es un error en el C5.0 código. Hay algunas soluciones son indicados por Pascal y MrFlick.

Que «otras preguntas»? Y sin reproducible ejemplo, va a ser complicado de conseguir una respuesta.
Esto no suena como un espacio de nombres problema tanto como un posible problema de ámbito. Sin embargo no es muy claro a partir de la información proporcionada. Usted debe incluir un reproducible ejemplo lo que es claro exactamente lo que usted está haciendo.
un mínimo de trabajo de ejemplo. No sé si se trata de un espacio de nombres de un problema de ámbito. Es un tema que quiero ver resuelto…
No está seguro de que es la mejor manera de hacerlo, pero funciona cuando se agrega assign("d", d, .GlobalEnv) después de d$binclass <- as.factor(d$binclass).
Esto parece más bien una draconiana medida. Pero bueno, funciona!

OriginalEl autor user989762 | 2015-07-31

3 Comentarios

  1. 3

    Parece ser un bug en el código cuando se trata de evaluar el comando en el ambiente adecuado. El problema parece estar en la C50::model.frame.C5.0 función. El «más» evitar que pude encontrar fue agregar un terms de la propiedad para su modelo. Esto ayudará a encapsular la función de medio ambiente.

    f <- function(){
        library(C50)
        set.seed(1)
        class = c(1,2)
        d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
        d$binclass <- as.factor(d$binclass)
        model <- C5.0(binclass ~ ., data=d)
        model$terms <- eval(model$call$formula)   #<---- Added line
        plot(model)   
    }
    Ok. Por lo que parece ser un error en C5.0? La solución de hacer el trabajo, sin embargo, y al menos mitigar el problema.

    OriginalEl autor MrFlick

  2. 0

    @MrFlick casi lo tenía, pero no del todo. Este problema de trazado es particularmente molesto cuando se intenta pasar arbitraria de datos y funciones de destino para el C50 método. Como se ha señalado por MrFlick esto tiene que ver con el cambio de nombre de términos. Por cambiar el nombre de x y y en términos de la llamada al método de la representación de la función no se confunde.

    tree_model$call$x <- data_train[, -target_index]
    tree_model$call$y <- data_train[[target_feature]] 

    Por ejemplo, aquí es un método para pasar de datos arbitrarios y una entidad de destino y aún así ser capaz de trazar el resultado:

    boosted_trees <- function(data_train, target_feature, iter_choice) {
    
        target_index <- grep(target_feature, colnames(data_train))
        model_boosted <- C5.0(x = data_train[, -target_index], y = data_train[[target_feature]], trial=iter_choice)
        model_boosted$call$x <- data_train[, -target_index]
        model_boosted$call$y <- data_train[[target_feature]]
        return(model_boosted)
    
    }

    El modelo de objeto devuelto por el método anterior puede explicarse como normal.

    model <- boosted_trees(data_train, 'my_target', 10)
    plot(model)

    OriginalEl autor Cybernetic

  3. 0

    Puede usar la asignación especial del operador <<- en lugar de la estándar (<-). Se va a guardar el objeto en el entorno global y que pueden resolver su problema.

    OriginalEl autor user10854911

Dejar respuesta

Please enter your comment!
Please enter your name here