我正在使用分位数回归(例如,通过gbm
或quantreg
在R中)-不关注中位数,而是关注较高的分位数(例如,第75位)。来自预测建模的背景,我想衡量模型在测试集上的拟合程度,并能够向业务用户进行描述。我的问题是?在具有连续目标的典型设置中,我可以执行以下操作:
- 计算总体RMSE
- 根据预测值对数据集进行十进制分析,然后将实际平均值与每个十分位数中预测的平均值进行比较。
- 等等。
在这种情况下,如果确实没有实际值(至少我不认为)可以与预测进行比较,该怎么办?
这是示例代码:
install.packages("quantreg")
library(quantreg)
install.packages("gbm")
library(gbm)
data("barro")
trainIndx<-sample(1:nrow(barro),size=round(nrow(barro)*0.7),replace=FALSE)
train<-barro[trainIndx,]
valid<-barro[-trainIndx,]
modGBM<-gbm(y.net~., # formula
data=train, # dataset
distribution=list(name="quantile",alpha=0.75), # see the help for other choices
n.trees=5000, # number of trees
shrinkage=0.005, # shrinkage or learning rate,
# 0.001 to 0.1 usually work
interaction.depth=5, # 1: additive model, 2: two-way interactions, etc.
bag.fraction = 0.5, # subsampling fraction, 0.5 is probably best
train.fraction = 0.5, # fraction of data for training,
# first train.fraction*N used for training
n.minobsinnode = 10, # minimum total weight needed in each node
cv.folds = 5, # do 3-fold cross-validation
keep.data=TRUE, # keep a copy of the dataset with the object
verbose=TRUE) # don’t print out progress
best.iter<-gbm.perf(modGBM,method="cv")
pred<-predict(modGBM,valid,best.iter)
现在呢-因为我们没有观察到条件分布的百分位数?
加:
我假设了几种方法,我想知道它们是否正确以及是否有更好的方法-以及如何解释第一种方法:
从损失函数计算平均值:
qregLoss<-function(actual, estimate,quantile) { (sum((actual-estimate)*(quantile-((actual-estimate)<0))))/length(actual) }
这是分位数回归的损失函数-但是我们如何解释该值?
我们是否应该期望,例如,如果我们要计算测试集的第75个百分位数,则预测值应大于75%左右的实际值?
是否存在其他正式或启发式的方法来描述模型对新病例的预测程度?
第3节在本文可能是有用的。
—
tchakravarty13年
@tchakravarty我认为该链接已失效
—
alexpghayes