scala - 如何计算 scala/spark 中的对数损失指标?
问题描述
我已经训练了一个二元分类器 ( XGBoostClassifier
) 模型,并且在我的结果数据框中有两列:PREDICTED_COL
和TARGET_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),所以不知道如何使用它。
解决方案
您可以只实现公式:
val df_ll = df.withColumn("logloss", -($"target_col" * log($"predicted_col") + (lit(1) - $"target_col") * log(lit(1) - $"predicted_col")))
请注意,我们仅使用 spark.sql.functions 中的内置函数,这意味着我们可以获得相当好的性能(比 UDF 更好)
推荐阅读
- c++ - 尝试使用我的功能时“无效使用成员”
- wordpress - 为什么不让我删除地址字段?
- linux - 当 var=$(... | grep "value") 为空时脚本退出并出错,但在 grep 有结果时有效
- r - 无法在 facet_grid 中自定义条带
- ruby-on-rails - 删除rails中特定会话变量的正确方法
- java - 使用 JavaFX 在 macOS 上更改拖放光标
- algorithm - 2个字符串之间的差异
- wordpress - 尝试编辑海明威 wordpress 主题以添加“评论回复”链接
- graphql - 如何在 GraphQL Schema 中要求 propertyA OR propertyB
- swift - 滚动后 UISearchBar 保持可见