【发布时间】:2014-12-30 10:53:59
【问题描述】:
我想使用数据表公式计算因子 (C1) 的所有级别的输出 sum_logloss(见下文)。但结果不是我所期望的。这是一个小例子,展示了我得到了什么以及为什么我期望不同的 sum_logloss 作为结果。
LogLoss <- function(actual, predicted, eps=0.00001) {
predicted <- pmin(pmax(predicted, eps), 1-eps)
-1/length(actual)*(sum(actual*log(predicted)+(1-actual)*log(1-predicted)))
}
# THIS RETURNS TOTAL LOGLOSS
TotalLogLossVector <- function(actual_vector, predicted_vector) {
sum(mapply(LogLoss, actual_vector, predicted_vector))
}
df = data.frame(C1=c(1,1,2,2,1), C2=c(4,5,4,5,5), click=c(1,0,0,1,1))
df <- data.table(df)
df
C1 C2 click
1: 1 4 1
2: 1 5 0
3: 2 4 0
4: 2 5 1
5: 1 5 1
df[,list(mean_CTR=mean(click),count=.N, sum_logloss=TotalLogLossVector(click,rep(mean_CTR,.N)) ),by=C1]
C1 mean_CTR count sum_logloss
1: 1 0.6666667 3 3.663061
2: 2 0.5000000 2 1.928626
LogLoss(1,0.6666667)
[1] 0.4054651
LogLoss(0,0.6666667)
[1] 1.098612
TotalLogLossVector(c(1,0,1), c(0.6666667,0.6666667,0.6666667))
[1] 1.909543
所以 C1=1 的 sum_logloss 应该是 2 * LogLoss(1,0.6666667) + 1 * LogLoss(0,0.6666667) = 1.909543,而不是 3.663061。
【问题讨论】:
-
@Arun 是的,我的错,我经常想再次确认答案是否正确,有时不花时间回来验证。
-
图森,我明白了。这很好,但如果您能跟进(如果您必须)并在他们确实回答您的问题时关闭这些问题,那就太好了。谢谢。
标签: r data.table