xgboost包中没有评价指标R2和KS值。
因此需要自定义。
R^2来来源于对y的波动解释。
假设方程
y = f(x) + μ
其中y是随机变量,即满足正态分布。 y自身具备一定的波动,可以用∑(y−ȳ)2来描述。 其中,ȳ是y的均值。 假设经过回归或者决策树等,我们得到
y = ŷ + μ̂
其中,ŷ = f̂(x),ŷ使我们估计出来。
如果û均值为0,那么$\bar y = \bar{\hat y } + \bar{\hat u} \to \bar y = \bar{\hat y}$。 所以可以用∑(ŷ−ȳ)2对y波动的解释量。 其中,
$$R^2 = \frac{\sum(\hat y-\bar y)^2}{\sum(y-\bar y)^2}$$
为什么呢?
因为,
$$\begin{alignat}{2} \sum(y-\bar y)^2 & = \sum(y- \hat y + \hat y - \bar y)^2 \\ & = \sum(y - \hat y )^2 + \sum(\hat y - \bar y)^2 + 2\sum(y- \hat y)(\hat y - \bar y)\\ & = \sum(\hat \mu)^2 + \sum(\hat y - \bar y)^2 + 2\sum \mu(\hat y - \bar y) \end{alignat}$$
因为我们假设,∑μ̂ = 0和∑μ ⋅ ŷ = 0, 所以,
$$\begin{alignat}{2} \sum(y-\bar y)^2 & = \sum(\hat \mu)^2 + \sum(\hat y - \bar y)^2 + 2\sum \mu(\hat y - \bar y) \\ SST = SSR + SSE \end{alignat}$$
书上定义,
$$R^2 = 1 - \frac{SSR}{SST} = \frac{SSE}{SST}$$
和我们的定义一致。
下面开始对这个指标进行自定义函数。
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))
}测试以后这个公式算的有问题。