欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

分类器评价与在R中的实现:收益图与提升图

发布时间:2025/3/21 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 分类器评价与在R中的实现:收益图与提升图 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类模型评价与在R中的实现”系列中将逐个介绍。

上篇介绍最基础的混淆矩阵。
本篇介绍收益图(Gain Chart)与提升图(Lift Chart)。

一、收益图/提升图简介

回顾上篇,混淆矩阵评价的是模型在总体样本的表现。下面介绍的收益/提升图评估的是模型捕捉到的所有正响应,对比真实分类情况的表现。

模型捕捉到的正响应是用什么来表示呢?回顾混淆矩阵可组合出的指标RPP(Rate of positive predictions) = (TP+FP)/(P+N),正是所有预测中,预测为正的比例。根据不同的阀值,RPP的范围为[0,1]。自然地,这收益图/提升图的公共横轴为累计RPP。

纵轴需要评价模型在预测为正的事件中,正确的概率。也就是模型的TPR(True Positive Rate),此间的TPR也可称为收益值(Gain Value)。提升值(Lift Value)则进一步考虑了在某个RPP下的TPR的这个相对性概念,用TPR/RPP计算。

二、在R中计算收益/提升表、作图

1 直接计算

举一个最简单的例子说明。还是和上次一样用ROCR包中的ROCR.simple数据,为了方便查看,只取前10条。

require(ROCR) data(ROCR.simple) data <- as.data.frame(ROCR.simple)[1:10, ]

按照以下步骤计算gain/lift值:

  • 按预测分值对数据集排序
  • 用当前行号/总行数当做Rate of Positive
  • 计算TPR
  • 用TPR列与RPP列计算Lift值
  • data <- data[order(data[, 1], decreasing = TRUE), ] data$rpp <- row(data[, 1, drop = FALSE])/nrow(data) data$target_cum <- cumsum(data[, "labels"]) data$tpr <- data$target_cum/sum(data[, "labels"]) data$lift <- data$tpr/data$rpp data ## predictions labels rpp target_cum tpr lift ## 7 0.9706 1 0.1 1 0.1667 1.6667 ## 8 0.8902 1 0.2 2 0.3333 1.6667 ## 10 0.8688 0 0.3 2 0.3333 1.1111 ## 9 0.7818 1 0.4 3 0.5000 1.2500 ## 1 0.6125 1 0.5 4 0.6667 1.3333 ## 3 0.4321 0 0.6 4 0.6667 1.1111 ## 5 0.3849 0 0.7 4 0.6667 0.9524 ## 2 0.3643 1 0.8 5 0.8333 1.0417 ## 6 0.2444 1 0.9 6 1.0000 1.1111 ## 4 0.1403 0 1.0 6 1.0000 1.0000

    有了如上结果,将RPP放横轴,TPR/Lift放纵轴分别画出收益图和提升图。

    par(mfrow = c(1, 2)) plot(data$rpp, data$tpr, type = "l", main = "Gain Chart") plot(data$rpp, data$lift, type = "l", main = "Lift Chart")

    2 用ROCR包画图

    用ROCR的prediction()和performance()函数可以很简单地将模型结果转化为评价可以直接使用的指标。这次以ROCR.simple所有数据为例。

    require(ROCR) data(ROCR.simple) pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels) par(mfrow = c(1, 2)) gain <- performance(pred, "tpr", "rpp") plot(gain, main = "Gain Chart") lift <- performance(pred, "lift", "rpp") plot(lift, main = "Lift Chart")

    对于收益图,理想的收益图应快速达到很高的累计收益值,并很快趋于100%;理想的提升图应该在很高的提升值上保持一段,或缓慢下降一段,然后迅速下降到1。根据上面两个图,可以做出结论,如果我们选择20%的RPP,那么模型的真正率约为35%左右(收益图),将比不使用任何模型获得约1.7倍的正回应(提升图)。

    from: http://iccm.cc/classification-model-evaluation-gain-chart-lift-chart/

    总结

    以上是生活随笔为你收集整理的分类器评价与在R中的实现:收益图与提升图的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。