es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo implementar shapper:shap en todo el conjunto de datos?

He creado un modelo Random Forest utilizando el paquete randomForest.

model_rf <- randomForest(y ~ ., data = data_train, ntree = 1000, keep.forest = TRUE, importance = TRUE)

Para calcular los valores de Shapley para las diferentes características basadas en este modelo RF, primero creo un “objeto explicador” y luego utilizo el paquete “shapper”.

exp_rf <- DALEX::explain(model_rf, data = data_test[, -1], y = data_test[, 1])

ive_rf <- shap(exp_rf, new_observation = data_test[1, -1])

A mi entender, solo puedo aplicar la función “shap” a una observación (la “nueva observación”).

Pero estoy buscando una forma de calcular los valores de Shapley para todos mis encuestados en mi archivo de datos.
Sé que es posible con el paquete “SHAP” en Python; ¿pero también es posible con el paquete “shapper” en R?

En este momento, he creado un bucle para calcular los valores de Shapley para todos los encuestados, pero esto me llevará días para calcularlo para todo mi archivo de datos.

shapruns <- NULL
for (i in c(1:nrow(data_test))) {
ive_rf <- shap(exp_rf, new_observation = data_test[i, -1])
shapruns <- cbind(shapruns, ive_rf[, “attribution“])
}

Cualquier ayuda sería muy apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, en este momento, el paquete shapper en R no tiene una función incorporada para calcular los valores de Shapley para todas las observaciones en un archivo de datos de una sola vez. El bucle que creaste actualmente es la única forma de calcular los valores de Shapley para cada encuestado individualmente.

    Sin embargo, hay algunos paquetes alternativos en R que proporcionan una funcionalidad similar, como el paquete “iml”. El paquete “iml” tiene una función llamada “FeatureImp” que puede calcular los valores de Shapley para todas las observaciones en un conjunto de datos simultáneamente.

    Aquí hay una sintaxis de ejemplo para usar la función “FeatureImp” en el paquete “iml”:

    library(iml)
    data(iml_example)
    X <- iml_example$X
    y <- iml_example$y
    rf <- randomForest(y ~ ., data = iml_example)
    explainer <- iml::iml(rf, data = X, y = y)
    imps <- iml::FeatureImp(explainer, loss = "mse")
    

    Esto creará un objeto “imps” que contiene los valores de Shapley para todas las características y observaciones en el conjunto de datos.

    Tenga en cuenta que el paquete “iml” utiliza una implementación diferente del enfoque de valor de Shapley que el paquete “shapper”. Por lo tanto, es posible que los valores de Shapley calculados por el paquete “iml” no sean idénticos a los calculados por el paquete “shapper”.

Comments are closed.