internal BinaryClassificationMetrics(IHost host, DataViewRow overallResult, IDataView confusionMatrix) { double Fetch(string name) => Fetch <double>(host, overallResult, name); AreaUnderRocCurve = Fetch(BinaryClassifierEvaluator.Auc); Accuracy = Fetch(BinaryClassifierEvaluator.Accuracy); PositivePrecision = Fetch(BinaryClassifierEvaluator.PosPrecName); PositiveRecall = Fetch(BinaryClassifierEvaluator.PosRecallName); NegativePrecision = Fetch(BinaryClassifierEvaluator.NegPrecName); NegativeRecall = Fetch(BinaryClassifierEvaluator.NegRecallName); F1Score = Fetch(BinaryClassifierEvaluator.F1); AreaUnderPrecisionRecallCurve = Fetch(BinaryClassifierEvaluator.AuPrc); ConfusionMatrix = MetricWriter.GetConfusionMatrix(host, confusionMatrix); }
internal MulticlassClassificationMetrics(IHost host, DataViewRow overallResult, int topKPredictionCount, IDataView confusionMatrix) { double FetchDouble(string name) => RowCursorUtils.Fetch<double>(host, overallResult, name); MicroAccuracy = FetchDouble(MulticlassClassificationEvaluator.AccuracyMicro); MacroAccuracy = FetchDouble(MulticlassClassificationEvaluator.AccuracyMacro); LogLoss = FetchDouble(MulticlassClassificationEvaluator.LogLoss); LogLossReduction = FetchDouble(MulticlassClassificationEvaluator.LogLossReduction); TopKPredictionCount = topKPredictionCount; if (topKPredictionCount > 0) TopKAccuracy = FetchDouble(MulticlassClassificationEvaluator.TopKAccuracy); var perClassLogLoss = RowCursorUtils.Fetch<VBuffer<double>>(host, overallResult, MulticlassClassificationEvaluator.PerClassLogLoss); PerClassLogLoss = perClassLogLoss.DenseValues().ToImmutableArray(); ConfusionMatrix = MetricWriter.GetConfusionMatrix(host, confusionMatrix, binary: false, perClassLogLoss.Length); }