【问题标题】:AUC package - AUC error - r programmingAUC 包 - AUC 错误 - r 编程
【发布时间】:2015-11-05 02:10:47
【问题描述】:

我正在尝试使用 R 中的 AUC 包使 AUC 图正常工作。我不确定该错误并且对此不熟悉 fit 是训练好的模型: test 是测试数据

test$going_to_cross <- predict(fit, test, type="prob") 

prediction <- predict(fit, test, type="prob")
submit <- data.frame(cust_id = test$cust_id, already_crossed = test$flag_cross_over, predictions = prediction)
write.csv(submit, file = "../predictions /cross_sell_predictionsRF.csv", row.names = FALSE)

head(submit, 5)

print("predictions")
colnames(prediction) <- c("predictiona", "predictionb")
head(prediction)
which(submit$going_to_cross == 1)


print("names submit")
names(submit)

#predict_cross <- submit$going_to_cross.0
head(predict_cross, 5)

我在这里得到的输出为:

    cust_id already_crossed predictions.0   predictions.1
280 14080465    0           0.436   0.564
281 24047747    0           0.218   0.782 
282 10897483    0           0.606   0.394
283 14005276    0           0.448   0.552
284 18488402    0           0.284   0.716

[1] "predictions"

Out[317]:
    predictiona predictionb
280 0.436   0.564
281 0.218   0.782
282 0.606   0.394
283 0.448   0.552
284 0.284   0.716
285 0.104   0.896

包中的代码是:

auc(sensitivity(submit$predictions, submit$already_crossed))

警告信息是:

警告信息: 在 is.na(x) 中:is.na() 应用于 'NULL' 类型的非(列表或向量)

更新:

# get the data into single vectors
 submit_pred <- matrix(submit$predictions.1)
 submit_cross <- matrix(submit$already_crossed)

 dt <- cbind(submit_pred, submit_cross)
  dt <- matrix(dt)


  names(dt) <- c("submit_pred", "submit_cross")

 roc_pred <- prediction(dt$submit_pred, dt$submit_cross)
 perf <- performance(roc_pred, "tpr", "fpr")
 plot(perf, col="red")
 abline(0,1,col="grey")

得到曲线下的面积

性能(roc_pred,"auc")@y.values 头(dt)

【问题讨论】:

  • str(submit$predictions)str(submit$already_crossed) 返回什么? already_crossed 中是否有任何 NA 值?
  • 我认为“预测”列包含来自预测成功和失败(1 和 0)的信息。尝试在最后一段代码中使用“submit$predictionb”而不是“submit$predictions”。
  • 您传递了两个向量作为预测,并且当您这样做时,您有一个实际值的向量: auc(sensitivity(submit$predictions, submit$already_crossed)) 并且您破坏了模型。此外,您只有 0 个预测,并且不会获得 ROC 曲线。我很快就会给你一个例子......

标签: r machine-learning random-forest auc


【解决方案1】:

尝试将此脚本调整为您的数据集(使用包 ROCR)。

library(ROCR)

# example dataset with some 0 and some 1 values as actual observations
dt = data.frame(matrix(data=c(
14080465 ,  0 ,  0.436 , 0.564,
24047747 ,  1 ,  0.218 , 0.782 ,
10897483 ,  0 ,  0.606 , 0.394,
14005276 ,  0 ,  0.448 , 0.552,
18488402 ,  1 ,  0.284 , 0.716
), nrow = 5, ncol = 4, byrow = T))

names(dt) = c("cust_id", "already_crossed", "predictions.0",   "predictions.1")

# obtain ROC curve
roc_pred <- prediction(dt$predictions.1, dt$already_crossed)
perf <- performance(roc_pred, "tpr", "fpr")
plot(perf, col="red")
abline(0,1,col="grey")

# get area under the curve
performance(roc_pred,"auc")@y.values

您也可以使用您的方法(使用包 AUC):

library(AUC)

# example dataset with some 0 and some 1 values as actual observations
dt = data.frame(matrix(data=c(
14080465 ,  0 ,  0.436 , 0.564,
24047747 ,  1 ,  0.218 , 0.782 ,
10897483 ,  0 ,  0.606 , 0.394,
14005276 ,  0 ,  0.448 , 0.552,
18488402 ,  1 ,  0.284 , 0.716
), nrow = 5, ncol = 4, byrow = T))

names(dt) = c("cust_id", "already_crossed", "predictions.0",   "predictions.1")

auc(sensitivity(dt$predictions.1, as.factor(dt$already_crossed)))
plot(sensitivity(dt$predictions.1, as.factor(dt$already_crossed)))

正如我之前所说,您只需传递一个预测向量。 此外,您需要将实际类(0 和 1)保存为因子,否则灵敏度函数会中断。但是,我认为您想要计算(使用您的方法)是这样的:

auc(roc(dt$predictions.1, as.factor(dt$already_crossed)))
plot(roc(dt$predictions.1, as.factor(dt$already_crossed)))

【讨论】:

  • 您好,感谢您提供的有用的解释,我现在遇到错误: approxfun(x.values.2, y.values.2, method = "constant", f = 1, : zero non -NA 点
  • 在哪个函数中?确保为每个函数提供所需的变量/向量类型。因此,其中一些需要因子变量(如 AUC 包),但另一种需要数值。检查并告诉我。或者将您收到该错误的确切位置发送给我。
  • 谢谢,我添加了更新部分,现在我收到错误 dt$submit_pred: $ operator is invalid for atomic vectors --- 在 roc_pred 行?谢谢
  • 为什么要使用 submit_pred
猜你喜欢
  • 2016-08-30
  • 2015-04-21
  • 2019-07-28
  • 2016-06-20
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2013-12-29
  • 2018-04-16
相关资源
最近更新 更多