/** * <summary> The calculateMetric method takes an {@link Instance} and a String as inputs. It multiplies Matrix Wi with Vector xi * then calculates the dot product of it with xi. Then, again it finds the dot product of wi and xi and returns the summation with w0i.</summary> * * <param name="instance">{@link Instance} input.</param> * <param name="ci"> String input.</param> * <returns>The result of Wi.multiplyWithVectorFromLeft(xi).dotProduct(xi) + wi.dotProduct(xi) + w0i.</returns> */ protected override double CalculateMetric(Instance.Instance instance, string ci) { var xi = instance.ToVector(); var Wi = _W[ci]; var wi = w[ci]; var w0i = w0[ci]; return(Wi.MultiplyWithVectorFromLeft(xi).DotProduct(xi) + wi.DotProduct(xi) + w0i); }
/** * <summary> Calculates Mahalanobis distance between two instances. (x^(1) - x^(2)) S (x^(1) - x^(2))^T</summary> * * <param name="instance1">First instance.</param> * <param name="instance2">Second instance.</param> * <returns>Mahalanobis distance between two instances.</returns> */ public double Distance(Instance.Instance instance1, Instance.Instance instance2) { var v1 = instance1.ToVector(); var v2 = instance2.ToVector(); v1.Subtract(v2); var v3 = _covarianceInverse.MultiplyWithVectorFromLeft(v1); return(v3.DotProduct(v1)); }
/** * <summary> The createInputVector method takes an {@link Instance} as an input. It converts given Instance to the {@link java.util.Vector} * and insert 1.0 to the first element.</summary> * * <param name="instance">Instance to insert 1.0.</param> */ protected void CreateInputVector(Instance.Instance instance) { x = instance.ToVector(); x.Insert(0, 1.0); }