# `Latu.ML.Evaluator`
[🔗](https://github.com/zero-one-group/latu_ml/blob/v0.4.2/lib/latu/ml/evaluator.ex#L1)

A metric, as inert data: what to measure and on which columns.

The third kind of operator beside `Latu.ML.Estimator` and `Latu.ML.Transformer`, and the
simplest — it is never fitted and never transforms, it just scores a frame. Spark has six of
them, all under `Latu.ML.Evaluation`.

    evaluator = Latu.ML.Evaluation.binary_classification_evaluator(metric_name: "areaUnderROC")

`Latu.ML.evaluate/2` is what runs one, and it answers with the metric itself rather than with
a handle: an evaluator caches nothing on the server. The frame it scores is one a model has
already transformed — an evaluator reads `prediction_col` and `label_col`, not features.

# `t`

```elixir
@type t() :: %Latu.ML.Evaluator{
  class: String.t(),
  known: [Latu.ML.Param.t()],
  params: [Latu.ML.Plan.param()],
  uid: String.t()
}
```

# `new`

```elixir
@spec new(String.t(), keyword()) :: t()
```

An evaluator the registry does not know, by its JVM class name.

See `Latu.ML.Estimator.new/2`; the same caveats apply.

## Options

  * `:params` — the params to send, already in wire form. Defaults to `[]`.
  * `:uid` — the uid to send. Defaults to a generated one in PySpark's shape.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
