Exemplo n.º 1
0
        private static float[][] Map(float[][] records, float error, int maxIter, int resultDimensions)
        {
            var n          = records.Length;
            var dDistances = JaggedArray.Init <float>(n, n);
            var yDistances = JaggedArray.Init <float>(n, n);
            var dedy       = JaggedArray.Init <float>(n, resultDimensions);
            var d2edy2     = JaggedArray.Init <float>(n, resultDimensions);
            var deltas     = JaggedArray.Init <float>(n, resultDimensions);
            var ys         = CalculateInitialConfiguration(n: records.Length, d: resultDimensions);

            var alpha     = 0.3f;
            var iteration = 0;
            var e         = 0.0f;

            do
            {
                CalculateDistances(dDistances, yDistances, records, ys);
                CalculatePartialDerivatives(dedy, d2edy2, dDistances, yDistances, ys);
                CalculateDeltas(deltas, dedy, d2edy2);
                CalculateNewConfiguration(ys, deltas, alpha);

                e = CalculateError(dDistances, yDistances);
            } while(e > error || iteration++ < maxIter);

            return(ys);
        }
Exemplo n.º 2
0
        public static float[][] RandomPartitioning(float[][] records, int k)
        {
            Debug.Assert(k > 0);

            var rng       = new Random((int)DateTime.Now.Ticks);
            var centroids = JaggedArray.Init <float>(k, records[0].Length);
            var labels    = new int[records.Length];

            // Assign each record to random cluster
            for (var i = 0; i < records.Length; ++i)
            {
                labels[i] = rng.Next(k);
            }

            Compute(centroids, records, labels);

            return(centroids);
        }