示例#1
0
 public Parameters(
     List <Entity> entities,
     List <List <Distance> > distancesForEachElement,
     DistanceFunctionType distanceFunctionType,
     WindowType windowType,
     KernelFunctionType kernelFunctionType,
     double windowWidth,
     int neighborsCount)
 {
     Entities = entities;
     DistancesForEachElement = distancesForEachElement;
     DistanceFunctionType    = distanceFunctionType;
     WindowType         = windowType;
     KernelFunctionType = kernelFunctionType;
     WindowWidth        = windowWidth;
     NeighborsCount     = neighborsCount;
 }
示例#2
0
        private static double CalculateKernel(double value, KernelFunctionType kernelFunctionType)
        {
            var kernel = 0d;

            switch (kernelFunctionType)
            {
            case KernelFunctionType.Uniform:
                if (Math.Abs(value) < 1)
                {
                    kernel = 0.5;
                }
                break;

            case KernelFunctionType.Triangular:
                if (Math.Abs(value) < 1)
                {
                    kernel = 1d - Math.Abs(value);
                }
                break;

            case KernelFunctionType.Epanechnikov:
                if (Math.Abs(value) < 1)
                {
                    kernel = 0.75 * (1 - Math.Pow(value, 2));
                }
                break;

            case KernelFunctionType.Quartic:
                if (Math.Abs(value) < 1)
                {
                    kernel = 15d / 16d * Math.Pow(1 - Math.Pow(value, 2), 2);
                }
                break;

            case KernelFunctionType.Triweight:
                if (Math.Abs(value) < 1)
                {
                    kernel = 35d / 32d * Math.Pow(1d - Math.Pow(value, 2d), 3d);
                }
                break;

            case KernelFunctionType.Tricube:
                if (Math.Abs(value) < 1)
                {
                    kernel = 70d / 81d * Math.Pow(1d - Math.Pow(Math.Abs(value), 3d), 3d);
                }
                break;

            case KernelFunctionType.Gaussian:
                kernel = Math.Exp(-Math.Pow(value, 2d) / 2d) / Math.Sqrt(2d * Math.PI);
                break;

            case KernelFunctionType.Cosine:
                if (Math.Abs(value) < 1)
                {
                    kernel = Math.PI * Math.Cos(Math.PI * value / 2d) / 4d;
                }
                break;

            case KernelFunctionType.Logistic:
                kernel = 1d / (Math.Exp(value) + 2d + Math.Exp(-value));
                break;

            case KernelFunctionType.Sigmoid:
                kernel = 2d / (Math.PI * (Math.Exp(value) + Math.Exp(-value)));
                break;

            default:
                break;
            }
            return(kernel);
        }