private static double GetNadarayaWatsonMiddlePoint(IList <double> source, NadarayaWatsonVariant variant) { switch (variant) { case NadarayaWatsonVariant.Subsitution: return((Averages.Central(source, 50).Value + Averages.Median(source).Value) / 2.0); case NadarayaWatsonVariant.NoiseCoursing: return((Averages.Maximum(source).Value - Averages.Minimum(source).Value) / 2.0); } return(double.NaN); }
public static IList <double> NadarayaWatson(IList <IList <double> > orderedSet, NadarayaWatsonVariant variant, KernelType kernelType, double kernelSize) { if (orderedSet == null || orderedSet.Count == 0) { return(new List <double>().AsReadOnly()); } KernelsCommander kernel = new KernelsCommander(kernelType); IList <double> set = new List <double>(); double numerator = 0.0; double denominator = 0.0; double currentWeight; for (int x = 0; x < orderedSet.Count; x++) { for (int i = 0; i < orderedSet.Count; i++) { currentWeight = kernel.Execute(orderedSet[x], orderedSet[i], kernelSize); numerator += currentWeight * GetNadarayaWatsonMiddlePoint(orderedSet[i], variant); denominator += currentWeight; } set.Add(numerator / denominator); numerator = 0.0; denominator = 0.0; } return(set); }