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