/// <summary> /// Calculates segmented conditional impurity of y | x When stipulating segments (s), X is broken /// up into s many segments therefore P(X=x_s) becomes a range probability rather than a fixed /// probability. In essence the average over H(Y|X = x) becomes SUM_s [ p_s * H(Y|X = x_s) ]. The /// values that were used to do the split are stored in the Splits member. /// </summary> /// <exception cref="InvalidOperationException">Thrown when the requested operation is invalid.</exception> /// <param name="y">Target impurity.</param> /// <param name="x">Conditioned impurity.</param> /// <param name="segments">Number of segments over x to condition upon.</param> /// <returns>Segmented conditional impurity measure.</returns> public double SegmentedConditional(Vector y, Vector x, int segments) { if (x == null && y == null) throw new InvalidOperationException("x and y do not exist!"); return SegmentedConditional(y, x, x.Segment(segments)); }