1 min read

rsq在R中自定义函数

xgboost包中没有评价指标R2和KS值。 因此需要自定义。

R^2来来源于对y的波动解释。

假设方程

y=f(x)+μ

其中y是随机变量,即满足正态分布。 y自身具备一定的波动,可以用(yy¯)2来描述。 其中,y¯y的均值。 假设经过回归或者决策树等,我们得到

y=y^+μ^

其中,y^=f^(x)y^使我们估计出来。

如果u^均值为0,那么y¯=y^¯+u^¯y¯=y^¯。 所以可以用(y^y¯)2y波动的解释量。 其中,

R2=(y^y¯)2(yy¯)2

为什么呢?

因为,

(yy¯)2=(yy^+y^y¯)2=(yy^)2+(y^y¯)2+2(yy^)(y^y¯)=(μ^)2+(y^y¯)2+2μ(y^y¯)

因为我们假设,μ^=0μy^=0, 所以,

(yy¯)2=(μ^)2+(y^y¯)2+2μ(y^y¯)SST=SSR+SSE

书上定义,

R2=1SSRSST=SSESST

和我们的定义一致。

下面开始对这个指标进行自定义函数。

r2 <- function(preds, dtest) {
  library(ROCR)  
  labels <- getinfo(dtest, "label")
  y_avg = mean(labels)
  SSE = sum( (preds -  y_avg)^2 )
  SST = sum( (labels - y_avg)^2  )
  R2 = SSE/SST
  return(list(metric = "r2", value = R2))
}

测试以后这个公式算的有问题。