示例#1
1
    static void Main(string[] argv)
    {
        modshogun.init_shogun_with_defaults();
        int k = 3;

        DoubleMatrix traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        DoubleMatrix testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        DoubleMatrix trainlab = Load.load_labels("../data/label_train_multiclass.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);
        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        Labels labels = new Labels(trainlab);

        KNN knn = new KNN(k, distance, labels);
        knn.train();
        DoubleMatrix out_labels = knn.apply(feats_test).get_labels();
        Console.WriteLine(out_labels.ToString());

        modshogun.exit_shogun();
    }
	public static void Main() {
		modshogun.init_shogun_with_defaults();

		double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
		double[,] testdata_real = Load.load_numbers("../data/fm_test_real.dat");

		RealFeatures feats_train = new RealFeatures(traindata_real);
		RealFeatures feats_test = new RealFeatures(testdata_real);

		EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);
		distance.set_disable_sqrt(true);

		double[,] dm_train = distance.get_distance_matrix();
		distance.init(feats_train, feats_test);
		double[,] dm_test = distance.get_distance_matrix();


		foreach(double item in dm_train) {
			Console.Write(item);
		}
		
		foreach(double item in dm_test) {
			Console.Write(item);
		}

		modshogun.exit_shogun();
	}
示例#3
0
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real  = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test  = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        distance.set_disable_sqrt(true);

        double[,] dm_train = distance.get_distance_matrix();
        distance.init(feats_train, feats_test);
        double[,] dm_test = distance.get_distance_matrix();


        foreach (double item in dm_train)
        {
            Console.Write(item);
        }

        foreach (double item in dm_test)
        {
            Console.Write(item);
        }

        modshogun.exit_shogun();
    }
    public virtual object run(IList para)
    {
        modshogun.init_shogun_with_defaults();
        double tau_coef = (double)((double?)para[0]);

        DoubleMatrix traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        DoubleMatrix testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);
        ExponentialKernel kernel = new ExponentialKernel(feats_train, feats_train, tau_coef, distance, 10);

        kernel.init(feats_train, feats_train);
        DoubleMatrix km_train =kernel.get_kernel_matrix();
        kernel.init(feats_train, feats_test);
        DoubleMatrix km_test =kernel.get_kernel_matrix();

        ArrayList result = new ArrayList();
        result.Add(km_train);
        result.Add(km_test);
        result.Add(kernel);

        modshogun.exit_shogun();
        return (object)result;
    }
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double degree = 1.0;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        PowerKernel kernel = new PowerKernel(feats_train, feats_test, degree, distance);

        double[,] km_train = kernel.get_kernel_matrix();
        kernel.init(feats_train, feats_test);
        double[,] km_test = kernel.get_kernel_matrix();

        foreach (double item in km_train)
            Console.Write(item);

        foreach (double item in km_test)
            Console.Write(item);

        modshogun.exit_shogun();
    }
示例#6
0
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double degree = 2.0;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real  = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test  = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        WaveKernel kernel = new WaveKernel(feats_train, feats_test, degree, distance);

        double[,] km_train = kernel.get_kernel_matrix();
        kernel.init(feats_train, feats_test);
        double[,] km_test = kernel.get_kernel_matrix();

        foreach (double item in km_train)
        {
            Console.Write(item);
        }

        foreach (double item in km_test)
        {
            Console.Write(item);
        }

        modshogun.exit_shogun();
    }
	public static void Main() {
		modshogun.init_shogun_with_defaults();
		int k = 3;

		double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
		double[,] testdata_real = Load.load_numbers("../data/fm_test_real.dat");

		double[] trainlab = Load.load_labels("../data/label_train_multiclass.dat");

		RealFeatures feats_train = new RealFeatures(traindata_real);
		RealFeatures feats_test = new RealFeatures(testdata_real);
		EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

		Labels labels = new Labels(trainlab);

		KNN knn = new KNN(k, distance, labels);
		knn.train();
		double[] out_labels = knn.apply(feats_test).get_labels();

		foreach(double item in out_labels) {
			Console.Write(item);
		}

		modshogun.exit_shogun();
	}
示例#8
0
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        int k = 3;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real  = Load.load_numbers("../data/fm_test_real.dat");

        double[] trainlab = Load.load_labels("../data/label_train_multiclass.dat");

        RealFeatures      feats_train = new RealFeatures(traindata_real);
        RealFeatures      feats_test  = new RealFeatures(testdata_real);
        EuclidianDistance distance    = new EuclidianDistance(feats_train, feats_train);

        MulticlassLabels labels = new MulticlassLabels(trainlab);

        KNN knn = new KNN(k, distance, labels);

        knn.train();
        double[] out_labels = MulticlassLabels.obtain_from_generic(knn.apply(feats_test)).get_labels();

        foreach (double item in out_labels)
        {
            Console.Write(item);
        }

        modshogun.exit_shogun();
    }
示例#9
0
        public void ClusteringTest()
        {
            List <ClusteredData> datanew    = new List <ClusteredData>();
            EuclidianDistance    distance   = new EuclidianDistance();
            K_Means         k_means         = new K_Means(2, 0.1, distance);
            ClusterAnalysis clusterAnalysis = new ClusterAnalysis(k_means);

            datanew.Add(new ClusteredData(0, 0));
            datanew.Add(new ClusteredData(0, 20));
            datanew.Add(new ClusteredData(20, 0));
            datanew.Add(new ClusteredData(20, 20));

            var list = clusterAnalysis.Clustering(datanew);

            Assert.AreEqual(2, list.Count);

            var flag = from value in k_means.FinishesCentroids.Values
                       where (value.X == 0 && value.Y == 0) ||
                       (value.X == 0 && value.Y == 20) ||
                       (value.X == 20 && value.Y == 20) ||
                       (value.X == 20 && value.Y == 0) ||
                       (value.X == 10 && value.Y == 20) ||
                       (value.X == 0 && value.Y == 10) ||
                       (value.X == 20 && value.Y == 10) ||
                       (value.X == 0 && value.Y == 10)
                       select value;

            Assert.AreEqual(0.1, k_means.CoefficientTaboo);
            Assert.AreEqual(2, k_means.CountOfClusters);
            Assert.IsNotNull(flag);
        }
示例#10
0
    static void Main(string[] argv)
    {
        modshogun.init_shogun_with_defaults();
        double sigma = 1.0;

        DoubleMatrix traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        DoubleMatrix testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        CauchyKernel kernel = new CauchyKernel(feats_train, feats_train, sigma, distance);

        DoubleMatrix km_train = kernel.get_kernel_matrix();

        kernel.init(feats_train, feats_test);
        DoubleMatrix km_test =kernel.get_kernel_matrix();

        Console.WriteLine(km_train.ToString());
        Console.WriteLine(km_test.ToString());

        modshogun.exit_shogun();
    }
        public void GetValueOfDistanceTest()
        {
            EuclidianDistance euclidianDistance = new EuclidianDistance();

            euclidianDistance.GetValueOfDistance(new ClusteredData(0, 0), new ClusteredData(2, 2));

            Assert.AreEqual(2, 2);
        }
示例#12
0
        static void Main(string[] args)
        {
            List<Double> seriesA = (new double[] { 4, 5, 6, 7, 8 }).ToList();
            List<Double> seriesB = (new double[] { 4, 5, 6, 7, 8 }).ToList();

            var distance = new EuclidianDistance();
            var cost = DTW<Double>.getDistance(seriesA, seriesB, distance, 4);

            Console.WriteLine("Cost: " + cost);
            Console.ReadLine();
        }
示例#13
0
        static void Main(string[] args)
        {
            List <Double> seriesA = (new double[] { 4, 5, 6, 7, 8 }).ToList();
            List <Double> seriesB = (new double[] { 4, 5, 6, 7, 8 }).ToList();

            var distance = new EuclidianDistance();
            var cost     = DTW <Double> .getDistance(seriesA, seriesB, distance, 4);

            Console.WriteLine("Cost: " + cost);
            Console.ReadLine();
        }
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double sigma = 1.0;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real  = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test  = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        CircularKernel kernel = new CircularKernel(feats_train, feats_train, sigma, distance);

        double[,] km_train = kernel.get_kernel_matrix();

        kernel.init(feats_train, feats_test);
        double[,] km_test = kernel.get_kernel_matrix();


        //  Parse and Display km_train
        Console.Write("km_train:\n");
        int numRows = km_train.GetLength(0);
        int numCols = km_train.GetLength(1);

        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j < numCols; j++)
            {
                Console.Write(km_train[i, j] + " ");
            }
            Console.Write("\n");
        }

        //  Parse and Display km_test
        Console.Write("\nkm_test:\n");
        numRows = km_test.GetLength(0);
        numCols = km_test.GetLength(1);

        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j < numCols; j++)
            {
                Console.Write(km_test[i, j] + " ");
            }
            Console.Write("\n");
        }

        modshogun.exit_shogun();
    }
示例#15
0
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double width = 1.7;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real  = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test  = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance();

        DistanceKernel kernel = new DistanceKernel(feats_train, feats_test, width, distance);

        double[,] dm_train = distance.get_distance_matrix();
        distance.init(feats_train, feats_test);
        double[,] dm_test = distance.get_distance_matrix();

        //  Parse and Display km_train
        Console.Write("dm_train:\n");
        int numRows = dm_train.GetLength(0);
        int numCols = dm_train.GetLength(1);

        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j < numCols; j++)
            {
                Console.Write(dm_train[i, j] + " ");
            }
            Console.Write("\n");
        }

        //  Parse and Display km_test
        Console.Write("\ndm_test:\n");
        numRows = dm_test.GetLength(0);
        numCols = dm_test.GetLength(1);

        for (int i = 0; i < numRows; i++)
        {
            for (int j = 0; j < numCols; j++)
            {
                Console.Write(dm_test[i, j] + " ");
            }
            Console.Write("\n");
        }


        modshogun.exit_shogun();
    }
示例#16
0
        private static BasicClassifier GetTrainingClassifier()
        {
            var baseDirectory = @"C:\Users\pavel\Documents\Visual Studio 2017\Projects\DigitRecognizer\DigitRecognizer\";

            var distance   = new EuclidianDistance();
            var classifier = new BasicClassifier(distance);

            var trainingPath = $@"{baseDirectory}train.csv";

            var training
                = DataReader.ReadObservations(trainingPath);

            classifier.Train(training);

            return(classifier);
        }
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double sigma = 1.0;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        CauchyKernel kernel = new CauchyKernel(feats_train, feats_train, sigma, distance);

        double[,] km_train = kernel.get_kernel_matrix();

        kernel.init(feats_train, feats_test);
        double[,] km_test=kernel.get_kernel_matrix();

        //  Parse and Display km_train
        Console.Write("km_train:\n");
        int numRows = km_train.GetLength(0);
        int numCols = km_train.GetLength(1);

        for(int i = 0; i < numRows; i++){
            for(int j = 0; j < numCols; j++){
                Console.Write(km_train[i,j] +" ");
            }
            Console.Write("\n");
        }

        //  Parse and Display km_test
        Console.Write("\nkm_test:\n");
        numRows = km_test.GetLength(0);
        numCols = km_test.GetLength(1);

        for(int i = 0; i < numRows; i++){
            for(int j = 0; j < numCols; j++){
                Console.Write(km_test[i,j] +" ");
            }
            Console.Write("\n");
        }

        modshogun.exit_shogun();
    }
	public static void Main() {
		modshogun.init_shogun_with_defaults();
		int merges = 3;

		double[,] fm_train = Load.load_numbers("../data/fm_train_real.dat");

		RealFeatures feats_train = new RealFeatures(fm_train);
		EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

		Hierarchical hierarchical = new Hierarchical(merges, distance);
		hierarchical.train();

		double[] out_distance = hierarchical.get_merge_distances();
		int[,] out_cluster = hierarchical.get_cluster_pairs();

		modshogun.exit_shogun();
	}
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        double width = 1.7;

        double[,] traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        double[,] testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance();

        DistanceKernel kernel = new DistanceKernel(feats_train, feats_test, width, distance);

        double[,] dm_train = distance.get_distance_matrix();
        distance.init(feats_train, feats_test);
        double[,] dm_test = distance.get_distance_matrix();

        //  Parse and Display km_train
        Console.Write("dm_train:\n");
        int numRows = dm_train.GetLength(0);
        int numCols = dm_train.GetLength(1);

        for(int i = 0; i < numRows; i++){
            for(int j = 0; j < numCols; j++){
                Console.Write(dm_train[i,j] +" ");
            }
            Console.Write("\n");
        }

        //  Parse and Display km_test
        Console.Write("\ndm_test:\n");
        numRows = dm_test.GetLength(0);
        numCols = dm_test.GetLength(1);

        for(int i = 0; i < numRows; i++){
            for(int j = 0; j < numCols; j++){
                Console.Write(dm_test[i,j] +" ");
            }
            Console.Write("\n");
        }

        modshogun.exit_shogun();
    }
	public static void Main() {
		modshogun.init_shogun_with_defaults();
		int k = 3;
		// already tried init_random(17)
		Math.init_random(17);

		double[,] fm_train = Load.load_numbers("../data/fm_train_real.dat");

		RealFeatures feats_train = new RealFeatures(fm_train);
		EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

		KMeans kmeans = new KMeans(k, distance);
		kmeans.train();

		double[,] out_centers = kmeans.get_cluster_centers();
		kmeans.get_radiuses();

		modshogun.exit_shogun();
	}
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        int merges = 3;

        double[,] fm_train = Load.load_numbers("../data/fm_train_real.dat");

        RealFeatures      feats_train = new RealFeatures(fm_train);
        EuclidianDistance distance    = new EuclidianDistance(feats_train, feats_train);

        Hierarchical hierarchical = new Hierarchical(merges, distance);

        hierarchical.train();

        double[] out_distance = hierarchical.get_merge_distances();
        int[,] out_cluster = hierarchical.get_cluster_pairs();

        modshogun.exit_shogun();
    }
示例#22
0
    static void Main(string[] argv)
    {
        modshogun.init_shogun_with_defaults();

        DoubleMatrix traindata_real = Load.load_numbers("../data/fm_train_real.dat");
        DoubleMatrix testdata_real = Load.load_numbers("../data/fm_test_real.dat");

        RealFeatures feats_train = new RealFeatures(traindata_real);
        RealFeatures feats_test = new RealFeatures(testdata_real);

        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        DoubleMatrix dm_train = distance.get_distance_matrix();
        distance.init(feats_train, feats_test);
        DoubleMatrix dm_test = distance.get_distance_matrix();

        Console.WriteLine(dm_train.ToString());
        Console.WriteLine(dm_test.ToString());

        modshogun.exit_shogun();
    }
示例#23
0
    public static void Main()
    {
        modshogun.init_shogun_with_defaults();
        int k = 3;

        // already tried init_random(17)
        Math.init_random(17);

        double[,] fm_train = Load.load_numbers("../data/fm_train_real.dat");

        RealFeatures      feats_train = new RealFeatures(fm_train);
        EuclidianDistance distance    = new EuclidianDistance(feats_train, feats_train);

        KMeans kmeans = new KMeans(k, distance);

        kmeans.train();

        double[,] out_centers = kmeans.get_cluster_centers();
        kmeans.get_radiuses();

        modshogun.exit_shogun();
    }
    internal static ArrayList run(int para)
    {
        modshogun.init_shogun_with_defaults();
        int merges = para;

        DoubleMatrix fm_train = Load.load_numbers("../data/fm_train_real.dat");

        RealFeatures feats_train = new RealFeatures(fm_train);
        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        Hierarchical hierarchical = new Hierarchical(merges, distance);
        hierarchical.train();

        DoubleMatrix out_distance = hierarchical.get_merge_distances();
        DoubleMatrix out_cluster = hierarchical.get_cluster_pairs();

        ArrayList result = new ArrayList();
        result.Add(hierarchical);
        result.Add(out_distance);
        result.Add(out_cluster);
        modshogun.exit_shogun();
        return result;
    }
示例#25
0
    internal static ArrayList run(int para)
    {
        modshogun.init_shogun_with_defaults();
        int k = para;
        init_random(17);

        DoubleMatrix fm_train = Load.load_numbers("../data/fm_train_real.dat");

        RealFeatures feats_train = new RealFeatures(fm_train);
        EuclidianDistance distance = new EuclidianDistance(feats_train, feats_train);

        KMeans kmeans = new KMeans(k, distance);
        kmeans.train();

        DoubleMatrix out_centers = kmeans.get_cluster_centers();
        kmeans.get_radiuses();

        ArrayList result = new ArrayList();
        result.Add(kmeans);
        result.Add(out_centers);

        modshogun.exit_shogun();
        return result;
    }
示例#26
0
 internal static HandleRef getCPtr(EuclidianDistance obj) {
   return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
 }
示例#27
0
        public int[] Generate(IEnumerable <T> examples, int k, IDistance metric = null)
        {
            #region Setup
            if (examples == null)
            {
                throw new InvalidOperationException("Cannot generate a model will no data!");
            }

            if (k < 2)
            {
                throw new InvalidOperationException("Can only cluter with k > 1");
            }

            if (Description == null)
            {
                Description = Converter.GetDescription(typeof(T)).BuildDictionaries <T>(examples);
            }

            Matrix X = Converter.Convert <T>(examples, Description.Features);

            // clear out zeros (if any...)
            //var indices = X.Indices(v => !v.All(d => d == 0), VectorType.Row);
            //X = X.Slice(indices, VectorType.Row);

            //X.Normalize(VectorType.Row);

            if (k >= X.Rows)
            {
                throw new InvalidOperationException(
                          string.Format("Cannot cluster {0} items {1} different ways!", X.Rows, k));
            }

            var   means       = InitializeRandom(X, k);
            var   diff        = double.MaxValue;
            int[] assignments = new int[X.Rows];
            #endregion

            if (metric == null)
            {
                metric = new EuclidianDistance();
            }

            for (int i = 0; i < 100; i++)
            {
                // Assignment step
                Parallel.For(0, X.Rows, j =>
                {
                    var min_index = -1;
                    var min       = double.MaxValue;
                    // current example
                    var x = X[j, VectorType.Row];
                    for (int m = 0; m < means.Rows; m++)
                    {
                        var d        = means[m, VectorType.Row];
                        var distance = metric.Compute(x, d);
                        if (distance < min)
                        {
                            min       = distance;
                            min_index = m;
                        }
                        assignments[j] = min_index;
                    }
                });

                // Update Step

                // new means has k rows and X.Cols columns
                Matrix new_means = Matrix.Zeros(k, X.Cols);
                Vector sum       = Vector.Zeros(k);

                // Part 1: Sum up assignments
                for (int j = 0; j < X.Rows; j++)
                {
                    new_means[assignments[j], VectorType.Row] += X[j, VectorType.Row];
                    sum[assignments[j]]++;
                }

                // Part 2: Divide by counts
                for (int j = 0; j < new_means.Rows; j++)
                {
                    new_means[j, VectorType.Row] /= sum[j];
                }

                // find sum of normdiff's of means
                diff = means.GetRows()
                       .Zip(new_means.GetRows(), (v1, v2) => new { V1 = v1, V2 = v2 })
                       .Sum(a => Vector.NormDiff(a.V1, a.V2));

                // small diff? return
                if (diff < .00001)
                {
                    Centers = means;
                    return(assignments);
                }

                means = new_means;
            }

            Centers = means;
            return(assignments);
        }
示例#28
0
        public SelectorResult Compute(float Percent, int maxrank)
        {
            if (Percent > 100 || Percent < 0)
            {
                throw new ArgumentException("");
            }

            int countA      = (int)(Percent * this._x.ColumnCount / 100);
            var GroupAIndex = new List <int>();
            var GroupBIndex = new List <int>();



            if (this._x == null)
            {
                return(null);
            }



            var resid = this._x * this._x.Transpose();
            var j     = this._x.ColumnCount;
            var p2    = Math.Round(j * Percent / 100);
            int k     = 0;

            this._x = (Matrix)this._x.Transpose();
            var i    = maxrank;
            var p    = new DenseMatrix(i, this._x.ColumnCount);
            var told = new DenseMatrix(j, i);
            var t    = new DenseMatrix(j, i, 1);
            var w    = new DenseMatrix(i, this._x.ColumnCount);
            var l    = new DenseVector(i);

            for (int h = 0; h < i; h++)
            {
                double sumt = 0;
                for (int ddd = 0; ddd < j; ddd++)
                {
                    sumt += Math.Abs(told[ddd, h] - t[ddd, h]);
                }

                while ((sumt > 1E-15 && k < 100))
                {
                    told.SetColumn(h, t.Column(h));
                    k++;
                    var wt = t.Column(h) * this._x / t.Column(h).DotProduct(t.Column(h));//更新更改
                    wt = wt / Math.Sqrt(wt.DotProduct(wt));
                    w.SetRow(h, wt);
                    t.SetColumn(h, this._x * w.Row(h) / w.Row(h).DotProduct(w.Row(h)));
                }
                l[h] = k;
                k    = 0;

                var pt = t.Column(h) * this._x / t.Column(h).DotProduct(t.Column(h));

                pt = pt / Math.Sqrt(pt.DotProduct(pt));
                var tempt = Math.Sqrt(pt.DotProduct(pt));
                p.SetRow(h, pt);
                t.SetColumn(h, t.Column(h) / tempt);
                w.SetRow(h, w.Row(h) / tempt);
                this._x = (Matrix)(this._x - t.Column(h).ToColumnMatrix() * p.Row(h).ToRowMatrix());
            }
            var G = t.Transpose();


            var dist = new EuclidianDistance();
            var MM   = Matlab.PDist((Matrix)G, dist, VectorType.Column);

            var M = Matlab.Triu(MM);

            double[] maxVal;
            int[]    maxIdx;
            Matlab.Max(M, out maxVal, out maxIdx);

            var    ttt  = new DenseVector(maxVal);
            int    idx  = ttt.MaximumIndex();
            double temp = ttt.Maximum();


            GroupAIndex.AddRange(new int[] { idx, maxIdx[idx] });


            for (int tr = 2; tr < p2; tr++)
            {
                var tm = new DenseMatrix(GroupAIndex.Count, MM.ColumnCount);
                for (int kkk = 0; kkk < GroupAIndex.Count; kkk++)
                {
                    tm.SetRow(kkk, MM.Column(GroupAIndex[kkk]));
                    foreach (var r in GroupAIndex)
                    {
                        tm[kkk, r] = double.NaN;
                    }
                }
                int[]    midx;
                double[] minval;
                Matlab.Min(tm, out minval, out midx);
                var minttt = new DenseVector(minval);
                temp = minttt.Maximum();
                idx  = minttt.MaximumIndex();
                GroupAIndex.Add(idx);
            }
            GroupAIndex.Sort();
            for (int r = 0; r < j; r++)
            {
                if (!GroupAIndex.Contains(r))
                {
                    GroupBIndex.Add(r);
                }
            }

            return(new SelectorResult()
            {
                GroupAIndex = GroupAIndex.ToArray(), GroupBIndex = GroupBIndex.ToArray()
            });
        }
示例#29
0
文件: KMeans.cs 项目: notesjor/numl
        /// <summary>Generates.</summary>
        /// <param name="x">The Matrix to process.</param>
        /// <param name="k">The int to process.</param>
        /// <param name="metric">the metric.</param>
        /// <returns>An int[].</returns>
        public int[] Generate(Matrix x, int k, IDistance metric)
        {
            if (metric == null)
            {
                metric = new EuclidianDistance();
            }

            X = x;

            var means       = InitializeRandom(X, k);
            var assignments = new int[X.Rows];

            for (var i = 0; i < 100; i++)
            {
                // Assignment step
                for (var j = 0; j < X.Rows; j++)
                {
                    var min_index = -1;
                    var min       = double.MaxValue;
                    for (var m = 0; m < means.Rows; m++)
                    {
                        var d = metric.Compute(X[j], means[m]);
                        if (d < min)
                        {
                            min       = d;
                            min_index = m;
                        }
                    }

                    // bounds?
                    if (min_index == -1)
                    {
                        min_index = 0;
                    }
                    assignments[j] = min_index;
                }

                // Update Step
                var new_means = Matrix.Zeros(k, X.Cols);
                var sum       = Vector.Zeros(k);

                // Part 1: Sum up assignments
                for (var j = 0; j < X.Rows; j++)
                {
                    var a = assignments[j];
                    new_means[a] += X[j, VectorType.Row];
                    sum[a]++;
                }

                // Part 2: Divide by counts
                for (var j = 0; j < new_means.Rows; j++)
                {
                    new_means[j] /= sum[j];
                }

                // Part 3: Check for convergence
                // find norm of the difference
                if ((means - new_means).Norm() < .00001)
                {
                    break;
                }

                means = new_means;
            }

            Centers = means;

            return(assignments);
        }
示例#30
0
 internal static HandleRef getCPtr(EuclidianDistance obj)
 {
     return((obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr);
 }
示例#31
0
        static void Main(string[] args)
        {
            List <ClusteredData> datanew    = new List <ClusteredData>();
            EuclidianDistance    distance   = new EuclidianDistance();
            K_Means         k_means         = new K_Means(2, 0.1, distance);
            ClusterAnalysis clusterAnalysis = new ClusterAnalysis(k_means);

            datanew.Add(new ClusteredData(0, 0));
            datanew.Add(new ClusteredData(0, 20));
            datanew.Add(new ClusteredData(20, 0));
            datanew.Add(new ClusteredData(20, 20));

            var list = clusterAnalysis.Clustering(datanew);

            /*
             * List<ClusteredData> datanew = new List<ClusteredData>();
             * List<K_Means> k_meansList = new List<K_Means>();
             * List<List<Cluster>> clustersList = new List<List<Cluster>>();
             * System.Diagnostics.Stopwatch myStopwatch = new System.Diagnostics.Stopwatch();
             * EuclidianDistance distance = new EuclidianDistance();
             *
             * datanew.Add(new ClusteredData(0,0));
             * datanew.Add(new ClusteredData(0, 20));
             * datanew.Add(new ClusteredData(20, 0));
             * datanew.Add(new ClusteredData(20, 20));
             *
             * var ewrt = datanew.Select(Er => Er.X);
             * var ety = ewrt.Average();
             *
             *
             *
             * var e = datanew.Average(er => er.X);
             *
             *
             * myStopwatch.Start(); //запуск
             * for (var i = 0; i < 1000; i++)
             * {
             *  K_Means k_means = new K_Means(2, 0.1, distance);
             *  clustersList.Add(k_means.Clustering(datanew));
             *  k_meansList.Add(k_means);
             *  Thread.Sleep(10);
             *
             *  var flag = k_means.FinishesCentroids.ContainsValue(new Centroid(0, 0));
             *  var flag1 = k_means.FinishesCentroids.ContainsValue(new Centroid(0, 20));
             *  var flag2 = k_means.FinishesCentroids.ContainsValue(new Centroid(20, 20));
             *  var flag3 = k_means.FinishesCentroids.ContainsValue(new Centroid(20, 0));
             * }
             * myStopwatch.Stop();
             *
             * var fulltime = myStopwatch.ElapsedMilliseconds;
             * double Onetime = myStopwatch.ElapsedMilliseconds/1000.0;
             *
             * int a = 0;
             * int b = 0;
             * int c = 0;
             * int d = 0;
             *
             * foreach (var list in clustersList)
             * {
             *  a += list.Count(q => q.Data.Count == 3);
             *  b += list.Count(q => q.Data.Count == 2);
             *  c += list.Count(q => q.Data.Count == 1);
             *  d += list.Count(q => q.Data.Count == 0);
             * }
             * b = b / 2;
             * var ads = new Cluster(1, new Centroid(1, 10));
             * //ads.IntraClusterDistance();
             *
             * //// Поиск объектов класса Cluster в списке optimumClusters с максимальным внутрикластерным расcтоянием
             * //var nonOptimumClusters = from list in clustersList // определяем каждый объект из clusters как cluster
             * //                         where
             * //                         select cluster.IntraClusterDistance();// выбираем объект
             *
             */
        }
示例#32
0
 /// <summary>
 ///   Initializes a new Collaborative Filtering recommender model.
 /// </summary>
 public CofiRecommenderModel()
 {
     RelatedDistanceFunction = new EuclidianDistance();
 }