Как рассчитать показатель потерь логарифма в scala / spark? - PullRequest
1 голос
/ 09 ноября 2019

Я обучил модель двоичного классификатора (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), поэтому не знаете, как его использовать.

Вот формула LogLoss: LogLoss formula

1 Ответ

1 голос
/ 09 ноября 2019

Вы можете просто реализовать формулу:

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

Обратите внимание, что мы используем только встроенные функции из spark.sql.functions, что означает, что мы получаем довольно хорошую производительность (лучше, чем UDF)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...