我已经训练了一个二进制分类器(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()
但是,没有相应/简便的方法来计算对数丢失度量。怎么做?
Note:我尝试使用org.apache.spark.mllib.tree.loss.LogLoss,但是该函数没有任何参数(例如,我的PREDICTED_COL和TARGET_COL),因此不确定如何使用它。
您可以执行公式:
df_ll = df.withColumn("logloss", -($"target_col" * log($"predicted_col") + (lit(1) - $"target_col") * log(lit(1) - $"predicted_col")))
请注意,我们仅使用spark.sql.functions中的内置函数,这意味着我们获得了相当不错的性能(优于UDF)