如何在scala / spark中计算对数丢失度量?

问题描述 投票:1回答:1

我已经训练了一个二进制分类器(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()

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

Note:我尝试使用org.apache.spark.mllib.tree.loss.LogLoss,但是该函数没有任何参数(例如,我的PREDICTED_COL和TARGET_COL),因此不确定如何使用它。

这里是LogLoss公式:LogLoss formula

scala apache-spark data-science xgboost
1个回答
0
投票

您可以执行公式:

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

请注意,我们仅使用spark.sql.functions中的内置函数,这意味着我们获得了相当不错的性能(优于UDF)

© www.soinside.com 2019 - 2024. All rights reserved.