R:插入符号包:Brier分数

R:插入符号包:Brier分数,r,prediction,r-caret,R,Prediction,R Caret,我想使用caret包中的train()函数执行逻辑回归。我的模型看起来像这样: model <- train(Y ~., data = train_data, family = "binomial", method = "glmnet") model如果我们按照wiki对brier分数的定义: 最常见的Brier分数公式是 其中f_t是预测的概率,o_t是(0或1)的实际结果,N是预测实例的数量 在R中,如果你的标签是一个因子,那么逻辑回归总是会预测第二个水平,这意味着你只

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

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

model如果我们按照wiki对brier分数的定义:

最常见的Brier分数公式是

其中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)
要计算分数,请执行以下操作:

f_t = pred[,2]
o_t = as.numeric(test_data$Species)-1
mean((f_t - o_t)^2)
[1] 0.32

我使用Brier分数在二进制分类的
caret
中调整我的模型。我确保“肯定”类是第二类,这是将响应标记为“0:1”时的默认类。然后,我基于
caret
自己的一套摘要函数创建了这个主摘要函数,以返回我想要查看的所有指标:


BigSummary谢谢!所以你是说pred[,2]应该与实际值进行比较。我仍然看不出理由,为什么不使用pred[,1]。还有,你有什么参考资料可以让我查一下吗?这是你定义为1或0的问题。在上面的例子中,如果你将1定义为“v”,那么你将采用“v”的预测概率。如果你把1定义为“o”,你就要取“o”的预测概率。这两个定义都是对称的,我不太清楚引用是什么意思。。。有人真的这么做了吗?这是我最近的一次,注意在python中它是0索引。也许你可以阅读逻辑回归,如何从概率到赔率等等。。您将看到似然估计与计算brier分数的方式非常相似
f_t = pred[,2]
o_t = as.numeric(test_data$Species)-1
mean((f_t - o_t)^2)
[1] 0.32