dotnet/machinelearning · error · NotImplementedException
{metric} is not supported!
Error message
{metric} is not supported! What it means
GetMetric in MulticlassClassificationExperiment maps a MulticlassClassificationMetric enum value to the corresponding field of the evaluated metrics. Enum values not listed in the switch (MacroAccuracy, MicroAccuracy, LogLoss, LogLossReduction, TopKAccuracy are handled) hit the default arm and throw NotImplementedException.
Source
Thrown at src/Microsoft.ML.AutoML/API/MulticlassClassificationExperiment.cs:457
{
throw new OperationCanceledException(ex.Message, ex.InnerException);
}
catch (Exception)
{
throw;
}
}
private double GetMetric(MulticlassClassificationMetric metric, MulticlassClassificationMetrics metrics)
{
return metric switch
{
MulticlassClassificationMetric.MacroAccuracy => metrics.MacroAccuracy,
MulticlassClassificationMetric.MicroAccuracy => metrics.MicroAccuracy,
MulticlassClassificationMetric.LogLoss => metrics.LogLoss,
MulticlassClassificationMetric.LogLossReduction => metrics.LogLossReduction,
MulticlassClassificationMetric.TopKAccuracy => metrics.TopKAccuracy,
_ => throw new NotImplementedException($"{metric} is not supported!"),
};
}
public void Dispose()
{
_context.CancelExecution();
_context = null;
}
}
}
View on GitHub (pinned to 7b76e69cf9)
Solutions
- Restrict configured metrics to MacroAccuracy, MicroAccuracy, LogLoss, LogLossReduction, or TopKAccuracy.
- Whitelist/validate the metric enum value before running the experiment.
- Add a new switch arm in MulticlassClassificationExperiment.GetMetric if the metric must be supported.
Example fix
// before
var value = GetMetric(MulticlassClassificationMetric.TopKAccuracyForAllK); // throws
// after
if (metric is MulticlassClassificationMetric.MacroAccuracy or MulticlassClassificationMetric.MicroAccuracy
or MulticlassClassificationMetric.LogLoss or MulticlassClassificationMetric.LogLossReduction
or MulticlassClassificationMetric.TopKAccuracy)
{
var value = GetMetric(metric);
} Defensive patterns
Strategy: validation
Validate before calling
private static readonly MulticlassClassificationMetric[] SupportedMetrics =
{
MulticlassClassificationMetric.MacroAccuracy,
MulticlassClassificationMetric.MicroAccuracy,
MulticlassClassificationMetric.LogLoss,
MulticlassClassificationMetric.LogLossReduction,
MulticlassClassificationMetric.TopKAccuracy
};
// before running:
if (!SupportedMetrics.Contains(metric)) throw new ArgumentException($"Metric {metric} not supported"); Type guard
bool IsSupported(MulticlassClassificationMetric m) => m is MulticlassClassificationMetric.MacroAccuracy or MulticlassClassificationMetric.MicroAccuracy or MulticlassClassificationMetric.LogLoss or MulticlassClassificationMetric.LogLossReduction or MulticlassClassificationMetric.TopKAccuracy;
Try / catch
try { var value = GetMetric(metric); }
catch (NotImplementedException) { metric = MulticlassClassificationMetric.MicroAccuracy; // safe default
var value = GetMetric(metric); } Prevention
- Validate configured metric names against the enum subset at startup
- Only use documented AutoML multiclass metrics (Macro/MicroAccuracy, LogLoss, LogLossReduction, TopKAccuracy)
- Re-verify metric support after package upgrades
When it happens
Trigger: Resolving a MulticlassClassificationMetric through this experiment's GetMetric with any enum member outside the five mapped ones (e.g. a newly added or extended metric enum value).
Common situations: Using a metric value valid in other ML.NET evaluation APIs but not wired into this AutoML mapping; enum additions in newer package versions not reflected in the switch; configuration files listing metric names converted to enum without validation.
Related errors
- {metric} is not supported!
- {metric} is not supported!
- joinAlgorithm
- {fieldType.Name}
- The method or operation is not implemented.
AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11).
Data as JSON: /api/errors/4a973c80aacb8020.
Report an issue: GitHub.