问题描述
我正在使用 varImp
包 R
中的 caret
函数来获取变量的重要性。这是我的代码:
library(caret)
trctrl <- trainControl(method = "repeatedcv",number = 10,repeats = 20,search = "grid",summaryFunction = youdenSumary)
classifier = train(form = Target ~ .,data = training_set,method = 'rpart',parms = list(split = "@R_45_4045@ion"),trControl=trctrl,tuneLength = 10,metric = "j")
importance <- varImp(classifier,scale=FALSE)
这是由此产生的变量重要性:
rpart variable importance
Overall
nh 532.218
nRT 488.922
wdSu 482.582
av_t 390.266
nc 317.725
o 303.738
dt 291.488
wdMo 103.200
wdSa 49.690
ne 46.707
wdWe 41.642
nl 26.463
wdTu 9.506
wdTh 2.669
代码运行递归分区算法并跟踪每次拆分减少了多少损失函数。但是……这种情况下的损失函数是什么? Rdocumentation 说:
损失函数的减少(例如均方误差) 归因于每个拆分的每个变量被制表,总和是 回来。此外,由于可能存在候选变量 重要但未在拆分中使用,顶级竞争变量是 也列在每个分裂。这可以关闭使用 rpart.control 中的 maxcompete 参数。这个方法目前没有 当响应是一个 因素。
它提到了均方误差。这是这个包中使用的损失函数吗(我不确定圆括号中的“例如”)?
解决方法
均方误差用于回归。可以查the long intro for rpart,因为你是做分类的,所以有两个杂质函数,gini和信息熵:
您指定:
parms = list(split = "information")
这意味着您正在根据信息熵拆分树。在您的情况下,减少是指信息熵的减少。您可以通过执行以下操作来检查插入符使用的函数:
caret:::varImpDependencies("rpart")$varImp
它基本上总结了每次拆分的信息熵的改进,您可以通过以下方式粗略检查您的情况:
classifier$finalModel$splits