【问题标题】:Evaluating a statistical model in R在 R 中评估统计模型
【发布时间】:2016-04-07 11:52:46
【问题描述】:

我有一个非常大的数据集 (ds)。其中一列是Popularity,类型为factor('High' / 'Low')。

我将数据分成 70% 和 30% 以创建训练集 (ds_tr) 和测试集 (ds_te)。

我使用逻辑回归创建了以下模型:

mdl <- glm(formula = popularity ~ . -url , family= "binomial", data = ds_tr )

然后我创建了一个predict 对象(将为ds_te 再做一次)

y_hat = predict(mdl, data = ds_tr - url , type = 'response')

我想找到对应于 0.5 的截止阈值的精度值,并找到对应于 0.5 的截止阈值的召回值,所以我做了:

library(ROCR)
pred <- prediction(y_hat, ds_tr$popularity)
perf <- performance(pred, "prec", "rec")

结果是一个包含许多值的表格

str(perf)

Formal class 'performance' [package "ROCR"] with 6 slots
  ..@ x.name      : chr "Recall"
  ..@ y.name      : chr "Precision"
  ..@ alpha.name  : chr "Cutoff"
  ..@ x.values    :List of 1
  .. ..$ : num [1:27779] 0.00 7.71e-05 7.71e-05 1.54e-04 2.31e-04 ...
  ..@ y.values    :List of 1
  .. ..$ : num [1:27779] NaN 1 0.5 0.667 0.75 ...
  ..@ alpha.values:List of 1
  .. ..$ : num [1:27779] Inf 0.97 0.895 0.89 0.887 ...

如何找到对应于 0.5 截止阈值的特定精度和召回值?

【问题讨论】:

  • 完善解释,说明如何获取请求的值。

标签: r logistic-regression threshold precision-recall


【解决方案1】:

访问性能对象的槽(通过@+list的组合)

我们创建一个包含所有可能值的数据集:

probab.cuts <- data.frame(cut=perf@alpha.values[[1]], prec=perf@y.values[[1]], rec=perf@x.values[[1]])

您可以查看所有关联值

probab.cuts

如果您想选择请求的值,这样做很简单:

tail(probab.cuts[probab.cuts$cut > 0.5,], 1)

手动检查

tab <- table(ds_tr$popularity, y_hat > 0.5)
tab[4]/(tab[4]+tab[2]) # recall
tab[4]/(tab[4]+tab[3]) # precision

【讨论】:

  • 谢谢,但我在尝试评估测试集 (ds_te) 上的模型时仍然遇到问题,因为 y_hat 的长度与 ds_te$popularity 不同。有什么想法吗?
  • 其实用测试数据来评估模型更正确。因此,估计并使用:“y_hat_test
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多