我之前尝试使用随机森林可视化 SHAP 值的结果。
我正在编写这段代码:
# Load necessary libraries
library(randomForest)
library(DALEX)
library(beeswarm)
data <- turismo_rf
# Split the data into features and target
features <- data[, -which(names(data) %in% "Clus.1")]
target <- data$Clus.1
# Train a random forest model
rf_model <- randomForest(features, target)
# Create an explainer object
explainer <- DALEX::explain(rf_model, data = features, y = target)
# Compute SHAP values
shapley_values <- DALEX::predict_parts(explainer, new_observation = features)
# Plot bee swarm
beeswarm(shapley_values$shap_1)
问题是我尝试过使用
beeswarm package
但我总是收到此错误:
beeswarm(shapley_values$shap_1)
Error in rep(nms, sapply(x, length)) : invalid 'times' argument
你能告诉我蜂群有什么问题吗?
这是我得到的输出,如果我只使用
plot(shapley_values)
如果无法看到一些数据,就很难判断,因此我尝试使用
iris
数据集重现您的示例。问题似乎是 shapley_values
数据框不包含名为 shap_1
的列。也许您对 contribution
专栏感兴趣?这给出了每个变量对给定观察的预测的贡献。
此代码生成蜂群图:
# Load necessary libraries
library(randomForest)
library(DALEX)
library(beeswarm)
data <- iris
# Split the data into features and target
features <- data[, -which(names(data) %in% "Species")]
target <- data$Species
# Train a random forest model
rf_model <- randomForest(features, target)
# Create an explainer object
explainer <- DALEX::explain(rf_model, data = features, y = target)
# Compute SHAP values
shapley_values <- DALEX::predict_parts(explainer, new_observation = features)
# Extract contributions as a numeric vector
contributions_vector <- as.numeric(shapley_values$contribution)
# Plot bee swarm
beeswarm(contributions_vector)
这个情节看起来并不是特别有用。绘制后,您可以向其添加文本标签。或者一个简单的
contribution
条形图可能会提供更多信息。