use*_*881 5 r threshold logistic-regression precision-recall
我有一个非常大的数据集(ds).一个它的列的是Popularity类型,factor("高" /"低").
我将数据分成70%和30%,以便创建训练集(ds_tr)和测试集(ds_te).
我使用Logistic回归创建了以下模型:
mdl <- glm(formula = popularity ~ . -url , family= "binomial", data = ds_tr )
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个predict对象(将再次为它做ds_te)
y_hat = predict(mdl, data = ds_tr - url , type = 'response')
Run Code Online (Sandbox Code Playgroud)
我想找到对应于截止阈值0.5的精度值,并找到对应于截止阈值0.5的召回值,所以我做了:
library(ROCR)
pred <- prediction(y_hat, ds_tr$popularity)
perf <- performance(pred, "prec", "rec")
Run Code Online (Sandbox Code Playgroud)
结果是一个包含许多值的表
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 ...
Run Code Online (Sandbox Code Playgroud)
如何找到与截止阈值0.5相对应的特定精度和召回值?
访问性能对象的槽位(通过@+list的组合)
我们创建一个包含所有可能值的数据集:
probab.cuts <- data.frame(cut=perf@alpha.values[[1]], prec=perf@y.values[[1]], rec=perf@x.values[[1]])
Run Code Online (Sandbox Code Playgroud)
您可以查看所有关联值
probab.cuts
Run Code Online (Sandbox Code Playgroud)
如果您想选择请求的值,那么执行以下操作很简单:
tail(probab.cuts[probab.cuts$cut > 0.5,], 1)
Run Code Online (Sandbox Code Playgroud)
人工检查
tab <- table(ds_tr$popularity, y_hat > 0.5)
tab[4]/(tab[4]+tab[2]) # recall
tab[4]/(tab[4]+tab[3]) # precision
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |