Beispiel #1
0
        public FFTRepulsion(double[] Y, double[] GradR, int N, int D, PIConfiguration PIConfig)
        {
            Control.UseNativeMKL();  //required by FFTRepulsion

            this.Y  = Y;
            grad    = GradR;
            this.N  = N;
            this.D  = D;
            n_terms = D + 2;
            n_interpolation_points = PIConfig.n_interpolation_points;
            h = 1.0 / n_interpolation_points;
            min_num_intervals     = PIConfig.min_num_intervals;
            intervals_per_integer = PIConfig.intervals_per_integer;

            bins   = new int[N * D];
            in_box = new double[N * D];
            interpolated_values        = new double[N * D * n_interpolation_points];
            interpolation_denominators = new double[n_interpolation_points];
            CalculateDenominators();
            potentialsQij = new double[N * n_terms];
        }
Beispiel #2
0
        private static void UpdateConfig(tSNE tsne, string conf, Dictionary <string, object> param)
        {
            Console.WriteLine("\n{0}Configuration:", conf);
            switch (conf)
            {
            case "Initialization":
                InitializationConfiguration ic = tsne.InitializationConfig;
                ic.SmartInit           = Convert.ToBoolean(UpdateField(param, "SmartInit", ic.SmartInit));
                ic.InitialSolutionSeed = Convert.ToInt32(UpdateField(param, "InitialSolutionSeed", ic.InitialSolutionSeed));
                if (ic.InitialSolutionSeed == -1)
                {
                    Console.WriteLine("\tInitialSolutionSeed set to -1 - using random seed.");
                }
                break;

            case "Affinities":
                AffinitiesConfiguration ac = tsne.AffinitiesConfig;
                ac.Perplexity  = Convert.ToDouble(UpdateField(param, "Perplexity", ac.Perplexity));
                ac.EntropyTol  = Convert.ToDouble(UpdateField(param, "EntropyTol", ac.EntropyTol));
                ac.EntropyIter = Convert.ToInt32(UpdateField(param, "EntropyIter", ac.EntropyIter));
                break;

            case "LSHF":
                LSHFConfiguration lc = tsne.LSHFConfig;
                lc.LSHForestTrees = Convert.ToInt32(UpdateField(param, "LSHForestTrees", lc.LSHForestTrees));
                lc.LSHTreeC       = Convert.ToInt32(UpdateField(param, "LSHTreeC", lc.LSHTreeC));
                lc.LSHHashDims    = Convert.ToInt32(UpdateField(param, "LSHHashDims", lc.LSHHashDims));
                lc.LSHSeed        = Convert.ToInt32(UpdateField(param, "LSHSeed", lc.LSHSeed));
                if (lc.LSHSeed == -1)
                {
                    Console.WriteLine("\tLSHSeed set to -1 - using random seed.");
                }
                break;

            case "Gradient":
                GradientConfiguration gc = tsne.GradientConfig;
                gc.Iterations      = Convert.ToInt32(UpdateField(param, "Iterations", gc.Iterations));
                gc.GradMinGain     = Convert.ToDouble(UpdateField(param, "GradMinGain", gc.GradMinGain));
                gc.RepulsionMethod = UpdateRepulsionMethod(param, gc.RepulsionMethod);
                gc.Exaggeration    = UpdateFunctionField(param, "Exaggeration", gc.Exaggeration);
                gc.Momentum        = UpdateFunctionField(param, "Momentum", gc.Momentum);
                gc.LearningRate    = UpdateFunctionField(param, "LearningRate", gc.LearningRate);
                break;

            case "BarnesHut":
                BarnesHutConfiguration bc = tsne.BarnesHutConfig;
                bc.BarnesHutCondition = Convert.ToDouble(UpdateField(param, "BarnesHutCondition", bc.BarnesHutCondition));
                bc.Presort            = Convert.ToBoolean(UpdateField(param, "Presort", bc.Presort));
                break;

            case "PI":
                PIConfiguration pc = tsne.PIConfig;
                pc.min_num_intervals      = Convert.ToInt32(UpdateField(param, "min_num_intervals", pc.min_num_intervals));
                pc.intervals_per_integer  = Convert.ToDouble(UpdateField(param, "intervals_per_integer", pc.intervals_per_integer));
                pc.n_interpolation_points = Convert.ToInt32(UpdateField(param, "n_interpolation_points", pc.n_interpolation_points));
                break;

            default:
                Console.WriteLine("\tConfiguration type {0} unknown.", conf);
                break;
            }
            if (param.Count > 0)
            {
                Console.WriteLine("\tUnknown {0}Configuration parameters: {1}!", conf, string.Join(", ", param.Keys));
            }
        }
        public void TestMethod()
        {
            /* -- testing versions */

            PIDebug.Title("Version");

            Console.WriteLine(PIConfiguration.Version_isStable());

            /* -- testing getPartialSums() */

            PIDebug.Title("Partial sums", true);

            PIVariable variable = new PIVariable();

            variable.AddValues(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });

            PIVariable[] varArray = variable.GetPartsForPartialSum(3, CutStyleForPartialSum.START);

            if (varArray != null)
            {
                Console.WriteLine(varArray.Length);
                PIDebug.Blank();

                if (varArray.Length >= 1)
                {
                    Console.WriteLine(varArray[0].AsString(0));
                }
                if (varArray.Length >= 2)
                {
                    Console.WriteLine(varArray[1].AsString(0));
                }
                if (varArray.Length >= 3)
                {
                    Console.WriteLine(varArray[2].AsString(0));
                }
            }

            PIDebug.Blank();
            varArray = variable.GetPartsForPartialSum(3, CutStyleForPartialSum.END);

            if (varArray != null)
            {
                if (varArray.Length >= 1)
                {
                    Console.WriteLine(varArray[0].AsString(0));
                }
                if (varArray.Length >= 2)
                {
                    Console.WriteLine(varArray[1].AsString(0));
                }
                if (varArray.Length >= 3)
                {
                    Console.WriteLine(varArray[2].AsString(0));
                }
            }

            /* -- testing order */

            PIDebug.Title("Order in variable", true);

            PIVariable varA = new PIVariable();

            varA.AddValue(175);
            varA.AddValue(166);
            varA.AddValue(170);
            varA.AddValue(169);
            varA.AddValue(188);
            varA.AddValue(175);
            varA.AddValue(176);
            varA.AddValue(171);
            varA.AddValue(173);
            varA.AddValue(175);
            varA.AddValue(173);
            varA.AddValue(174);
            varA.AddValue(169);

            PIVariable uniqueOrderedA = varA.GetUniqueOrdered();

            Console.WriteLine("1) varA - unique list with frequency and order");
            PIDebug.Blank();

            for (int i = 0; i < uniqueOrderedA.Count(); i++)
            {
                Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}",
                                                uniqueOrderedA.GetValue(i), uniqueOrderedA.Get(i).GetFrequency(), uniqueOrderedA.Get(i).GetOrder()));
            }

            PIDebug.Blank();
            Console.WriteLine("1a) varA - frequency and order");
            PIDebug.Blank();

            for (int i = 0; i < varA.Count(); i++)
            {
                Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}",
                                                varA.GetValue(i), varA.Get(i).GetFrequency(), varA.Get(i).GetOrder()));
            }

            PIVariable varB = new PIVariable();

            varB.AddValue(69);
            varB.AddValue(55);
            varB.AddValue(67);
            varB.AddValue(52);
            varB.AddValue(90);
            varB.AddValue(53);
            varB.AddValue(57);
            varB.AddValue(57);
            varB.AddValue(68);
            varB.AddValue(73);
            varB.AddValue(62);
            varB.AddValue(90);
            varB.AddValue(63);

            varB.GetUniqueOrdered();

            PIDebug.Blank();
            Console.WriteLine("2a) varB - frequency and order");
            PIDebug.Blank();

            for (int i = 0; i < varB.Count(); i++)
            {
                Console.WriteLine(String.Format("value = {0:f2} , frequency = {1:d}, order = {2:f2}",
                                                varB.GetValue(i), varB.Get(i).GetFrequency(), varB.Get(i).GetOrder()));
            }

            PIDebug.Blank();
            Console.WriteLine("-> order`s difference");
            PIDebug.Blank();

            PITwoVariables varAB = new PITwoVariables(varA, varB);

            Console.WriteLine("Sum of order`s differences = " + varAB.GetSumOrderDiff2());
        }
Beispiel #4
0
 public FFTRepulsion3D(double[] Y, double[] GradR, int N, PIConfiguration PIConfig) : base(Y, GradR, N, 3, PIConfig)
 {
 }