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); }
public ActionResult <Cluster> Get(bool useCache) { var blogs = blogDataRepository.GetBlogData(); var pearson = new PearsonCorrelationSimilarityAlgorithm(); var hierarchicalClustering = new HierarchicalClustering(pearson, useCache); return(hierarchicalClustering.Cluster(blogs)); }
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(); }
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(); }