R:Caret软件包:Brier分数

问题描述 投票:0回答:1

我想使用train()软件包中的caret函数执行逻辑回归。我的模型看起来像这样:

model <- train(Y ~.,
  data = train_data,
  family = "binomial",
  method = "glmnet")

使用生成的模型,我要做出预测:

pred <- predict(model, newdata = test_data, s = "lambda.min", type = "prob")

现在,我想评估模型预测与实际测试数据相比有多好。为此,我知道如何接收ROC和AUC。但是,我也有兴趣获得BRIER SCORE。 Brier分数的公式与MSE几乎相同。我面临的问题是,预测中的type参数仅允许“概率”(或我不感兴趣的“类”),该概率给出一个预测的概率为1(例如0.64),并且补码为变为零的概率(例如0.37)。但是对于Brier分数,我需要为每个包含两个信息的预测提供一个概率估计(例如,大于0.5的值表示1,小于0.5的值表示0)。我没有在caret程序包中找到任何解决办法来获得Brier分数。我知道,对于cv.glmnet包,predict函数允许使用“ response”参数来解决我的问题。但是,出于个人喜好,我希望保留caret软件包。感谢您的帮助!

r prediction r-caret
1个回答
0
投票

如果我们按照维基百科对brier score的定义进行分析:

最常见的Brier评分公式是

forumla

其中f_t是预测的概率,o_t(0或1)的实际结果,N是预测实例的数量。

在R中,如果您的标签是一个因素,则逻辑回归将始终相对于第二级进行预测,这意味着您只需计算概率和相对于该水平的0/1。例如:

library(caret)
idx = sample(nrow(iris),100)
data = iris
data$Species = factor(ifelse(data$Species=="versicolor","v","o"))
levels(data$Species)
[1] "o" "v"

在这种情况下,o为0且v为1。

train_data = data[idx,]
test_data = data[-idx,]

model <- train(Species ~.,data = train_data,family = "binomial",method = "glmnet")

pred <- predict(model, newdata = test_data)

所以我们可以看到该类的概率:

head(pred)
          o          v
1 0.8367885 0.16321154
2 0.7970508 0.20294924
3 0.6383656 0.36163437
4 0.9510763 0.04892370
5 0.9370721 0.06292789

计算分数:

f_t = pred[,2]
o_t = as.numeric(test_data$Species)-1
mean((f_t - o_t)^2)
[1] 0.32
© www.soinside.com 2019 - 2024. All rights reserved.