如何计算 Ranger 射频模型的 AUC 值?
How to calculate the AUC value for a ranger RF model?
如何计算游侠模型的 AUC 值? Ranger 是 R 中 randomForest 算法的快速实现。我使用以下代码构建用于分类目的的 ranger 模型,并从模型中获得预测:
#Build the model using ranger() function
ranger.model <- ranger(formula, data = data_train, importance = 'impurity',
write.forest = TRUE, num.trees = 3000, mtry = sqrt(length(currentComb)),
classification = TRUE)
#get the prediction for the ranger model
pred.data <- predict(ranger.model, dat = data_test,)
table(pred.data$predictions)
但是不知道AUC值怎么算
有什么想法吗?
计算 AUC 的关键是有办法将测试样本从 "Most likely to be positive" 排序到 "Least likely to be positive"。修改您的训练电话以包括 probability = TRUE
。 pred.data$predictions
现在应该是 class 概率矩阵。记下与您的 "positive" class 对应的列。此列提供了我们计算 AUC 所需的排名。
为了实际计算 AUC,我们将使用 Hand and Till, 2001 中的等式 (3)。我们可以按如下方式实现这个等式:
## An AUC estimate that doesn't require explicit construction of an ROC curve
auc <- function( scores, lbls )
{
stopifnot( length(scores) == length(lbls) )
jp <- which( lbls > 0 ); np <- length( jp )
jn <- which( lbls <= 0); nn <- length( jn )
s0 <- sum( rank(scores)[jp] )
(s0 - np*(np+1) / 2) / (np*nn)
}
其中 scores
将是 pred.data$predictions
的列,对应于正 class,而 lbls
是编码为二进制向量的相应测试标签(1
表示正数,0
或 -1
表示负数)。
如何计算游侠模型的 AUC 值? Ranger 是 R 中 randomForest 算法的快速实现。我使用以下代码构建用于分类目的的 ranger 模型,并从模型中获得预测:
#Build the model using ranger() function
ranger.model <- ranger(formula, data = data_train, importance = 'impurity',
write.forest = TRUE, num.trees = 3000, mtry = sqrt(length(currentComb)),
classification = TRUE)
#get the prediction for the ranger model
pred.data <- predict(ranger.model, dat = data_test,)
table(pred.data$predictions)
但是不知道AUC值怎么算
有什么想法吗?
计算 AUC 的关键是有办法将测试样本从 "Most likely to be positive" 排序到 "Least likely to be positive"。修改您的训练电话以包括 probability = TRUE
。 pred.data$predictions
现在应该是 class 概率矩阵。记下与您的 "positive" class 对应的列。此列提供了我们计算 AUC 所需的排名。
为了实际计算 AUC,我们将使用 Hand and Till, 2001 中的等式 (3)。我们可以按如下方式实现这个等式:
## An AUC estimate that doesn't require explicit construction of an ROC curve
auc <- function( scores, lbls )
{
stopifnot( length(scores) == length(lbls) )
jp <- which( lbls > 0 ); np <- length( jp )
jn <- which( lbls <= 0); nn <- length( jn )
s0 <- sum( rank(scores)[jp] )
(s0 - np*(np+1) / 2) / (np*nn)
}
其中 scores
将是 pred.data$predictions
的列,对应于正 class,而 lbls
是编码为二进制向量的相应测试标签(1
表示正数,0
或 -1
表示负数)。