예제 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            TextReader    reader = new TextReader();
            List <string> fileNames;
            var           textContents = reader.GetFiles(out fileNames);


            HierarchicalClustering clustering = new HierarchicalClustering(textContents);
            int numberOfClusters = textBox1.Text != "" ? Convert.ToInt32(textBox1.Text) : 2;
            var clusters         = clustering.ComputeClusters(numberOfClusters);

            listViewResults.Items.Clear();
            int index = 1;

            foreach (var cluster in clusters)
            {
                listViewResults.Items.Add("Cluster " + index);
                foreach (var item in cluster.Value)
                {
                    listViewResults.Items.Add(fileNames[item - 1]);
                }
                listViewResults.Items.Add("");
                index++;
            }
        }
        public void ClusterWithOneBlogsGivesOneCluster()
        {
            // Arrange

            var blogs = new List <Blog>
            {
                new Blog
                {
                    Name  = "Blog1",
                    Words = new Dictionary <string, double>
                    {
                        { "word1", 5 },
                        { "word2", 0 },
                        { "word3", 5 },
                    },
                },
            };

            var sut = new HierarchicalClustering(new PearsonCorrelationSimilarityAlgorithm(), false);

            // Act

            var result = sut.Cluster(blogs);

            // Assert

            Assert.Equal("Blog1", result.Blog.Name);
            Assert.Null(result.Left);
            Assert.Null(result.Right);
        }
예제 #3
0
        public ActionResult <Cluster> Get(bool useCache)
        {
            var blogs   = blogDataRepository.GetBlogData();
            var pearson = new PearsonCorrelationSimilarityAlgorithm();
            var hierarchicalClustering = new HierarchicalClustering(pearson, useCache);

            return(hierarchicalClustering.Cluster(blogs));
        }
예제 #4
0
        public void Test()
        {
            var releaseInfos    = GetTestData(@"TestData\standard.json");
            var clusterAnalyser = new HierarchicalClustering <SizeInfo>((x, y) => Math.Abs(x.Size - y.Size),
                                                                        Math.Max);

            var clusters  = clusterAnalyser.Cluster(releaseInfos);
            var instances = clusters.GetClusteredInstances(d => d > 200 * 1024 * 1024).OrderByDescending(c => c.Count).ToArray();
        }
예제 #5
0
        public IEnumerator <Clustering <TElement> > GetEnumerator()
        {
            var hca      = new HierarchicalClustering <TElement>(_distanceFunction, _linkageFunction);
            var results  = hca.Cluster(_source);
            var clusters = results.GetClusteredInstances(_clusterDistanceCutPoint);

            return(clusters
                   .Select(cluster => new Clustering <TElement>(cluster, _clusterValueFunc))
                   .GetEnumerator());
        }
예제 #6
0
        public void TestClustering()
        {
            var hclust   = new HierarchicalClustering();
            var vals     = TestUtils.ReadMatrix("Examples/clustering_array_copy_error.txt.gz");
            var data     = new FloatMatrixIndexer(vals);
            var distance = new EuclideanDistance();

            hclust.TreeClusterKmeans(data, MatrixAccess.Columns, distance, HierarchicalClusterLinkage.Average, false,
                                     false, 1, 300, 1, 10,
                                     (i) => { });
        }
예제 #7
0
        public void TestKmeansClusteringPreculusteringWithManyDuplicateRows()
        {
            HierarchicalClustering hclust = new HierarchicalClustering();
            var values = new float[, ] {
                { 1, 2, 3, 1 }, { 2, 3, 4, 2 }, { 2, 3, 4, 2 }, { 2, 3, 4, 2 }, { 2, 3, 4, 2 }, { 3, 4, 5, 2 }
            };
            FloatMatrixIndexer data = new FloatMatrixIndexer(values);
            var clusterNodes        = hclust.TreeClusterKmeans(data, MatrixAccess.Rows, new EuclideanDistance(), HierarchicalClusterLinkage.Average, false, false, 1,
                                                               5, 1, 1000, i => { });

            Assert.AreEqual(5, clusterNodes.Length);
        }
예제 #8
0
        public void TestKmeansClusteringPreculusteringWithDuplicateRows(
            [ValueSource(nameof(_data))] float[,] values,
            [ValueSource(nameof(_linkages))] HierarchicalClusterLinkage linkage,
            [ValueSource(nameof(_distances))] IDistance distance)
        {
            HierarchicalClustering hclust = new HierarchicalClustering();
            FloatMatrixIndexer     data   = new FloatMatrixIndexer(values);
            var clusterNodes = hclust.TreeClusterKmeans(data, MatrixAccess.Columns, distance, linkage, false, false, 1,
                                                        2, 1, 1000, i => { });

            Assert.AreEqual(3, clusterNodes.Length);
        }
        public void ClusterWithZeroBlogsGivesZeroClusters()
        {
            // Arrange

            var sut = new HierarchicalClustering(new PearsonCorrelationSimilarityAlgorithm(), false);

            // Act

            var result = sut.Cluster(new List <Blog>());

            // Assert

            Assert.Null(result);
        }
예제 #10
0
        public IActionResult Index()
        {
            var sessions = JArray.Parse(System.IO.File.ReadAllText(@"D:\User\Desktop\response_1589728162482.json"));

            var results = ParserManager.ParseTestResults(sessions);

            HierarchicalClustering.ComputeMultiple(0.5f, results.Clusters);
            Log.Information("Tests count: {tcount}, clusters count {ccount}, cluster depth: {depth}",
                            results.Clusters.Count, HierarchicalClustering.Output.Count, HierarchicalClustering.Output.Max(c => c.Depth));

            ViewBag.Width   = HierarchicalClustering.Output.Max(c => c.Depth) * 150 + 460;
            ViewBag.Height  = results.Clusters.Count * 30;
            ViewBag.Cluster = ClusterSerializer.Serialize(HierarchicalClustering.Output);
            return(View());
        }
예제 #11
0
        public void Clusters(List <TestClusterCandidate> candidates, double cutPoint,
                             Func <double, double, double> linkageFunction, Func <TestClusterCandidate, TestClusterCandidate, double> distanceFunction,
                             ISet <ISet <TestClusterCandidate> > expectedClusterResults)
        {
            var subject   = new HierarchicalClustering <TestClusterCandidate>(distanceFunction, linkageFunction);
            var results   = subject.Cluster(candidates);
            var clustered = results.GetClusteredInstances(d => d > cutPoint);

            clustered.Count.ShouldBe(expectedClusterResults.Count);

            var count = expectedClusterResults
                        .Sum(expectedClusterResult => clustered.Count(cluster => cluster.SetEquals(expectedClusterResult)));

            count.ShouldBe(expectedClusterResults.Count);
        }
예제 #12
0
        public void TestClusterNodeFormat()
        {
            var hclust = new HierarchicalClustering();
            var data   = new FloatMatrixIndexer(new float[, ] {
                { 1, 2, 3 }, { 2, 3, 4 }
            });
            var distance = new EuclideanDistance();
            var rowTree  = hclust.TreeCluster(data, MatrixAccess.Rows, distance, HierarchicalClusterLinkage.Maximum, false,
                                              false, 1, i => { });
            var rowTreeR = HierarchicalClusterNode.FromRFormat(new[] { -1 }, new[] { -2 }, new[] { 1.732051 });

            Assert.AreEqual(rowTreeR[0], rowTree[0]);

            var colTree = hclust.TreeCluster(data, MatrixAccess.Columns, distance, HierarchicalClusterLinkage.Maximum, false,
                                             false, 1, i => { });
            var colTreeR = HierarchicalClusterNode.FromRFormat(new[] { -1, -3 }, new[] { -2, 1 }, new[] { 1.414214, 2.828428 });

            CollectionAssert.AreEqual(colTree, colTreeR);
        }
예제 #13
0
        public void ShouldClusterValueTypes()
        {
            var source = new List <int> {
                101, 204, 203, 105, 103
            };
            var expectedSets = new HashSet <HashSet <int> > {
                new HashSet <int> {
                    204, 105
                }, new HashSet <int> {
                    101, 203, 103
                }
            };

            double DistanceValueSelector(int c) => c % 100;
            double DistanceFunction(int a, int b) => Math.Abs(DistanceValueSelector(a) - DistanceValueSelector(b));

            var subject  = new HierarchicalClustering <int>(DistanceFunction, TestClusterCandidate.CompleteLinkage);
            var results  = subject.Cluster(source);
            var clusters = results.GetClusteredInstances(2);

            clusters.Count.ShouldBe(2);
            clusters.ShouldBe(expectedSets);
        }
예제 #14
0
 public HierarchicalClusteringTests()
 {
     _subject = new HierarchicalClustering <TestClusterCandidate>(TestClusterCandidate.DistanceFunction, Math.Max);
 }