使用备用性能度量的R caret模型评估

12

我正在使用R的caret包进行一些网格搜索和模型评估。我有一个自定义的评估指标,它是绝对误差的加权平均数。权重在观察级别上被分配。

X <- c(1,1,2,0,1) #feature 1
w <- c(1,2,2,1,1) #weights
Y <- 1:5 #target, continuous

#assume I run a model using X as features and Y as target and get a vector of predictions

mymetric <- function(predictions, target, weights){

v <- sum(abs(target-predictions)*weights)/sum(weights) 
return(v)
}

这里提供了一个例子,说明如何使用summaryFunction为caret的train()方法定义自定义评估指标。

trainControl函数有一个名为summaryFunction的参数,用于指定计算性能的函数。该函数应具备以下参数:

data是对称为obs和pred的列的数据框或矩阵的引用,分别代表观察值和预测结果(对于回归问题是数值型数据,对于分类问题是字符型数据)。目前,类概率没有传递给该函数。 data中的值是单个调整参数组合的保留预测结果(及其相关参考值)。如果trainControl对象的classProbs参数设置为TRUE,则将存在包含类概率的其他列。这些列的名称与类级别相同。lev是一个字符字符串,包含从训练数据中获取的结果因素级别。对于回归问题,函数的输入值为NULL。model是用于该模型的字符字符串(即传递给train方法的值)。

我无法确切地弄清楚如何将观测权重传递给summaryFunction。

1个回答

7
您不能直接将权重传递给summary函数,这是一个疏漏,因为您可以将它们传递给建模函数。如果底层模型支持权重,则使用它们来生成预测值。
我将在下一个版本中添加此功能。
Max

1
嗨..只是确认这个更改是否在新版本的Caret中进行了?我正在使用caret-6.0-58,它的参数没有权重。 - myloginid
确认 - 在摘要函数中添加权重时,代码出现错误并失败,错误信息为“Error in FUN(left, right) : non-numeric argument to binary operator”。 - myloginid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接