/** * <summary> The predict method takes an Instance as an input. First it gets the size of prior distribution and loops this size times. * Then it gets the possible class labels and and calculates metric value. At the end, it returns the class which has the * maximum value of metric.</summary> * * <param name="instance">{@link Instance} to predict.</param> * <returns>The class which has the maximum value of metric.</returns> */ public override string Predict(Instance.Instance instance) { string predictedClass; var maxMetric = double.MinValue; int size; if (instance is CompositeInstance compositeInstance) { predictedClass = compositeInstance.GetPossibleClassLabels()[0]; size = compositeInstance.GetPossibleClassLabels().Count; } else { predictedClass = priorDistribution.GetMaxItem(); size = priorDistribution.Count; } for (var i = 0; i < size; i++) { string ci; if (instance is CompositeInstance compositeInstance1) { ci = compositeInstance1.GetPossibleClassLabels()[i]; } else { ci = priorDistribution.GetItem(i); } if (priorDistribution.ContainsItem(ci)) { var metric = CalculateMetric(instance, ci); if (metric > maxMetric) { maxMetric = metric; predictedClass = ci; } } } return(predictedClass); }
public void TestGetItem() { Assert.AreEqual("item1", smallDistribution.GetItem(0)); Assert.AreEqual("item2", smallDistribution.GetItem(1)); Assert.AreEqual("item3", smallDistribution.GetItem(2)); }