`R` 包 `caret` 中 `varImp` 的损失函数是什么?

问题描述

我正在使用 varImpR 中的 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