r - R:插入符号包:Brier分数
问题描述
我想使用包中的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
predict 中的论点只允许“概率”(或我不感兴趣的“类”),它给出了一个预测的概率为 ONE(例如 0.64),以及补充概率的beeing一个零(例如 0.37)。然而,对于 Brier 分数,我需要一个包含两者信息的预测的概率估计(例如,高于 0.5 的值表示 1,低于 0.5 的值表示 0)。我还没有找到任何解决方案来接收 Brier 分数caret
包裹。我知道使用该包cv.glmnet
,该predict
函数允许参数“响应”,这将解决我的问题。但是,出于个人喜好,我想保留该caret
套餐。谢谢您的帮助!
解决方案
如果我们按照 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)
所以我们可以看到类的概率:
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
推荐阅读
- c# - 如何从 Jenkins 获取应用程序的版本号和构建?
- regex - 使用正则表达式提取单词中组和组的计数
- android - 滚动时ListView位置问题
- jquery - 单击按钮时需要转到下一个选项卡
- asp.net-core - 使用 -c Release 运行发布时保留文档 xml 文件
- powerbi - DAX 查询最后一天的状态
- objective-c - OSX 系统完整性保护 (SIP) 删除应用程序
- android - 在xml中增加VectorDrawable图标描边
- django - Django:具有多种变体和定价的产品模型
- jquery - 在 json 错误响应上重新运行 AJAX 成功函数