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);
        }
示例#2
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));
        }
示例#3
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();
        }
示例#4
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());
        }
        public void ClusterWithZeroBlogsGivesZeroClusters()
        {
            // Arrange

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

            // Act

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

            // Assert

            Assert.Null(result);
        }
        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);
        }
        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);
        }
 public void NullListShouldReturnEmptyCluster()
 {
     _subject.Cluster(null).Contents.ShouldBeEmpty();
 }