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 为插入符号的 train() 定义自定义评估指标。去引用:

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

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

我不太清楚如何将观察权重传递给 summaryFunction。

4

1 回答 1

6

您不能将权重直接传递给汇总函数,这是一种疏忽,因为您可以将它们传递给建模函数。如果基础模型包含权重,则它们用于生成预测值。

我会把它添加到下一个版本中。

最大限度

于 2014-04-15T01:05:14.027 回答