首页 > 解决方案 > 如何计算 scala/spark 中的对数损失指标?

问题描述

我已经训练了一个二元分类器 ( XGBoostClassifier) 模型,并且在我的结果数据框中有两列:PREDICTED_COLTARGET_COL. 例如,我可以通过以下方式计算 areaUnderROC:

val metrics = new BinaryClassificationMetrics(df.select(col(PREDICTED_COL), col(TARGET_COL)).rdd.map(row => (row.getDouble(0), row.getInt(1).toDouble)))
val auc = metrics.areaUnderROC()

但是,没有相应/简单的方法来计算对数损失度量。怎么做?

注意:我尝试使用 org.apache.spark.mllib.tree.loss.LogLoss但该函数不接受任何参数(例如我的 PREDICTED_COL 和 TARGET_COL),所以不知道如何使用它。

这是 LogLoss 公式: 对数损失公式

标签: scalaapache-sparkdata-sciencexgboost

解决方案


您可以只实现公式:

val df_ll = df.withColumn("logloss", -($"target_col" * log($"predicted_col") + (lit(1) - $"target_col") * log(lit(1) - $"predicted_col")))

请注意,我们仅使用 spark.sql.functions 中的内置函数,这意味着我们可以获得相当好的性能(比 UDF 更好)


推荐阅读