我正在使用R中的iml
包提供的ALE实现。这个包附带了通常的documentation,vignette,甚至是非常好的book。
我已经研究了这三种方法,试图找出分类任务中ALE值的确切解释。我确实有一个高层次的理解:当从一个特征值移动到相邻的一个特征值时,增加ALE值意味着模型预测特定类别的概率增加。
我不明白的是:在不同的场景中,确切的ALE值是多少?它是使用从模型中提取的概率还是iml
通过type
提取的概率?我将基于iml documentation和caret documentation的三种不同的分类模型混淆在一起:
1.一个基于caret
的RF,它不显式地提取类概率
1.一个基于caret
的RF,可以显式提取类概率
1.基于rpart
的DT
然后我用iml
以两种方式绘制它们:
1.使用type=“prob”(根据iml
的文档,这可能是我应该为分类模型做的:“经典的用例是对分类模型说type=“prob””)
1.不使用type=“prob”,而是“raw”(如果可能)或“class”
这给了我六个图(代码见下文),其中只有两个是定性和定量相同的(#3和#6),另一个至少是定性相同的(#4),另外三个只是定性有点相似(#1,#2和#5):
的数据
我知道一个人不应该在一个帖子里问多个问题,但这些问题是如此紧密相关,我觉得为每个问题单独创建一个帖子会很混乱。
- #1和#2是否由于两个RF模型的随机性而略有不同,但我是否从基于
caret
的RF模型中提取概率对iml
的ALE真的没有作用? - 如果是的话,为什么#4和#5如此不同,因为它们也仅通过与#1和#2相同的两个RF模型的随机性而不同?
- 为什么#3看起来与#4和#6相似,尽管一个是
type
“prob”(可能是正确的),一个是“prob”类型,一个是“class”类型(两者可能都不正确)?
y轴上到底是什么?它如何取决于我是否通过caret
提取概率?为什么“错误的”type
并不总是有区别?
library(rpart)
library(caret)
library(iml)
data(iris)
TrainData <- iris[,1:4]
TrainClasses <- iris[,5]
## Train three different models
# RF w/o extracting probabilities
cntrl_noprobs<-trainControl(method = "oob", number=5, sampling="up", search="grid", verboseIter=TRUE, savePredictions=TRUE, classProbs=FALSE)
rf_noprobs <- caret::train(TrainData, TrainClasses, method="rf", ntree=100, metric="Kappa", trControl=cntrl_noprobs)
# RF w/ extracting probabilities
cntrl_probs<-trainControl(method = "oob", number=5, sampling="up", search="grid", verboseIter=TRUE, savePredictions=TRUE, classProbs=TRUE)
rf_probs <- caret::train(TrainData, TrainClasses, method="rf", ntree=100, metric="Kappa", trControl=cntrl_probs)
# DT
dt <- rpart(Species ~ ., data = iris)
## Create ALE plots with type="prob"
mod_rf_noprobs_prob <- Predictor$new(rf_noprobs, data = iris, type = "prob")
plot(FeatureEffect$new(mod_rf_noprobs_prob, feature = "Petal.Width")) + ggtitle("caret classProbs=FALSE | iml type=prob")
mod_rf_probs_prob <- Predictor$new(rf_probs, data = iris, type = "prob")
plot(FeatureEffect$new(mod_rf_probs_prob, feature = "Petal.Width")) + ggtitle("caret classProbs=TRUE | iml type=prob")
mod_dt_prob <- Predictor$new(dt, data = iris, type = "prob")
plot(FeatureEffect$new(mod_dt_prob, feature = "Petal.Width")) + ggtitle("rpart | iml type=prob")
## Create ALE plots with type="raw" or "class"
mod_rf_noprobs_raw <- Predictor$new(rf_noprobs, data = iris, type = "raw")
plot(FeatureEffect$new(mod_rf_noprobs_raw, feature = "Petal.Width")) + ggtitle("caret classProbs=FALSE | iml type=raw")
mod_rf_probs_raw <- Predictor$new(rf_probs, data = iris, type = "raw")
plot(FeatureEffect$new(mod_rf_probs_raw, feature = "Petal.Width")) + ggtitle("caret classProbs=TRUE | iml type=raw")
mod_dt_class <- Predictor$new(dt, data = iris, type = "class")
plot(FeatureEffect$new(mod_dt_class, feature = "Petal.Width")) + ggtitle("rpart | iml type=class")
字符串
1条答案
按热度按时间ut6juiuv1#
在评论之前,请注意,在整个数据集上训练的模型的分析是无效的,因为它会过度拟合,除非模型被引导。对于像iris这样的小数据集,你应该执行完整的模型引导(我的ale包的一个小插曲详细解释了这一点:https://cran.r-project.org/web/packages/ale/vignettes/ale-statistics.html)。但是我会尝试解释你显示的结果,如果它们是有效的(即使它们不是)。
我不是
caret
或iml
软件包方面的Maven,所以我不能明确回答,但我可以根据我对ALE和预测建模的一般知识来回答。我花了一些时间检查和比较这些图,这里我提供的是我有根据的猜测。首先,您可以很容易地看到,在三个图中有两个不同的形状:1、2和5具有相同的形状; 3、4和6具有相同的形状。
检查组3-4-6,我可以清楚地看到发生了什么。在该组中,setosa的ALE始终为0。当ALE值都为0时,这总是意味着模型根本没有使用该值。(不是通过ALE,而是通过模型:ALE只描述了一个模型,而不是直接描述数据。)在本分析的上下文中,这意味着这些多项式分类模型将setosa设置为0作为基本参考组,并且这些模型的versicolor和virginica值是相对于setosa给出的。这相当于对类使用虚拟编码:对于n个类,将有n - 1个虚拟值,并且其中一个类被认为是参考类。
相比之下,组1-2-5对所有三个类都有ALE值,这表明它为每个类都提供了值。这相当于为类创建独热编码:有n个类,将有n个二进制变量,每个类一个。因此,在这些模型中,每个虹膜类都有自己独特的ALE。
这意味着这两种不同的形状很可能代表了所有六种模型之间相同的关系。唯一的区别是所造成的失真,因为1-2-5组分别模拟了每个类别,而3-4-6组模拟了相对于刚毛的杂色和维吉尼亚。
那么,为什么3、4和6使用dummy编码,而1、2和5使用one-hot编码?我不确定,但这里是一个猜测。据我所知,似乎当为randomForest对象请求概率时(插入符号type ='rf'),然后将为每个类计算概率。这是组1-2-5的情况:
那么我猜rpart的决策树总是使用虚拟编码,这就是为什么3和6看起来是一样的。对于随机森林,只有图4根本没有可用的概率(“caret classProbs= Raw”和“iml type=raw”),所以它默认使用虚拟编码。
还有一个松散的结尾:情节的不同尺度。只有看组内的尺度才有意义。
对于1-2-5组,你应该明白,当你要求概率时,(无论是
caret
规范trainControl(classProbs=TRUE)
还是iml
规范Predictor$new(type = "prob")
),您都将得到一个介于0和1之间的概率。(使用iml
规范Predictor$new(type = "raw")
),您将获得TRUE的1响应和TRUE的0响应。使用ALE,ALE计算的平均类最终将是所有TRUE和TRUE值的平均值,即,1和0值的平均值。这些ALE平均值将与概率非常相似,尽管它们实际上不是一回事。因此,图1和图2本质上是一回事(允许随机变化):它们表示概率(“iml type=prob”),但图5是1和0原始类预测的平均值(“iml type=raw”)。对于3-4-6组,你有完全不同的模型。rpart决策树的图(3和6)本质上是相同的,允许随机变化。但是,图4是一个随机森林;即使它的形状相同,它的预测是不同的,所以规模不同也就不足为奇了。
我知道我的回答有很多不确定性,但我希望它是有意义的。