by 王犇 20160115
AUC是分类模型常用的评价手段,目前的Spark mllib里面evaluation包中所提供的auc方法是拿到了roc曲线中的各个点之后再进行auc的计算,但是实际应用场景中(以逻辑回归为例),我们常常是对每个样本进行打分之后整合样本的label直接进行auc的计算,输入可能是(label, predict_score)这样的形式,mllib中提供的方案就不太适用了,所以这里提供了另一种计算方法,采用了针对0,1分类问题的近似计算方案,叫做BinaryAuc:
首先对predict_score进行排序,然后根据样本正负例的情况,分别计算每个小梯形的面积,最后汇总成为最终的auc值(由于在spark中数据是分布式RDD的形态,所以计算梯形面积的时候需要知道前一个RDD的offset,这里需要先遍历数据,但是避免了汇总到单机进行计算):
package org.apache.spark.mllib.wml
/**
* @author wangben 2015
*/
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.rdd.RDDFunctions._
import scala.collection.Iterator
import Array._
class BinaryAUC extends Serializable {
//input format: predictioin,label
def auc( data: RDD[ (Double, Double) ] ) : Double =
{
//group same score result
val group_result = data.groupByKey().map(x => {
var r = new Array[Double](2)
for(item <- x._

本文介绍了在Spark中如何进行分布式AUC计算,特别是在实际应用中,针对(label, predict_score)形式的数据,使用名为BinaryAuc的近似计算方法。该方法通过对predict_score排序,计算每个小梯形的面积,最后汇总得出AUC值。由于数据以分布式RDD形式存在,需要遍历数据获取前一个RDD的offset,以避免单机汇总。"
129332728,17585464,Java实现的物品交换平台设计与实现,"['Java开发', 'Web应用', '数据库设计', '课程设计', 'Mybatis框架']

4997

被折叠的 条评论
为什么被折叠?



