Exemplo n.º 1
0
    def test_eps_neighborhood(self):
        distances = CondensedMatrix([
            1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 1.,
            1., 3., 1., 1., 1., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
            2., 1.
        ])
        dbscan_alg = DBSCANAlgorithm(distances)

        self.assertItemsEqual(
            dbscan_alg._DBSCANAlgorithm__eps_neighborhood(6, 3),
            [0, 1, 2, 3, 4, 5, 7, 8])
        self.assertItemsEqual(
            dbscan_alg._DBSCANAlgorithm__eps_neighborhood(6, 2),
            [0, 1, 3, 4, 5, 7, 8])
        self.assertItemsEqual(
            dbscan_alg._DBSCANAlgorithm__eps_neighborhood(6, 1), [0, 4, 5, 7])
        self.assertItemsEqual(
            dbscan_alg._DBSCANAlgorithm__eps_neighborhood(6, 1.), [0, 4, 5, 7])

        self.assertItemsEqual(distances.element_neighbors_within_radius(6, 3),
                              [0, 1, 2, 3, 4, 5, 7, 8])
        self.assertItemsEqual(distances.element_neighbors_within_radius(6, 2),
                              [0, 1, 3, 4, 5, 7, 8])
        self.assertItemsEqual(distances.element_neighbors_within_radius(6, 1),
                              [0, 4, 5, 7])
        self.assertItemsEqual(distances.element_neighbors_within_radius(6, 1.),
                              [0, 4, 5, 7])
Exemplo n.º 2
0
 def test_dbscan_regression_mini(self):
     distances = CondensedMatrix([
         12.36931688, 5.83095189, 9.43398113, 12.52996409, 15.65247584,
         17.4642492, 9.21954446, 4.47213595, 3.16227766, 4.47213595,
         5.65685425, 5., 8.06225775, 11.18033989, 13.15294644, 3.16227766,
         6.32455532, 8.24621125, 3.16227766, 5.09901951, 2.
     ])
     dbscan_alg = DBSCANAlgorithm(distances)
     clustering = dbscan_alg.perform_clustering(kwargs={
         "eps": 4.0,
         "minpts": 3
     })
     self.assertItemsEqual(clustering.gen_class_list(starts_with=1),
                           [-1, 1, -1, 1, 1, 1])  #[0, 1, 0, 1, 1, 1, 0]
Exemplo n.º 3
0
 def test_dbscan(self):
     distances = CondensedMatrix([0., 0., 2., 2., 0., 2., 2., 2., 2., 0.])
     dbscan_alg = DBSCANAlgorithm(distances)
     eps = 1.0
     minpts = 2
     clustering = dbscan_alg.perform_clustering(kwargs={
         "eps": eps,
         "minpts": minpts
     })
     expected = [1, 1, 1]
     self.assertItemsEqual(clustering.gen_class_list(starts_with=1),
                           expected)
     dbscan_alg.element_class = [PointClassType.UNCLASSIFIED] * 5
     eps = 1.0
     minpts = 1
     clustering = dbscan_alg.perform_clustering(kwargs={
         "eps": eps,
         "minpts": minpts
     })
     self.assertItemsEqual(clustering.gen_class_list(starts_with=1),
                           [1, 1, 1, 2, 2])
Exemplo n.º 4
0
    def test_seed_expansion(self):
        """
        Graph:
        1--2  3--4
        \ /
         0
         
        Adj. list:
        
        1 1 0 0 0
          1 0 0 0 
            0 0 0 
              0 0 
                1
                
        Inv. distance adjacency list (two nodes are connected if their distance is 
        lower than x)
        
        0 0 x x x
          0 x x x 
            x x x 
              x x 
                0
                      
        """
        distances = CondensedMatrix([0., 0., 2., 2., 0., 2., 2., 2., 2., 0.])
        N = distances.row_length
        dbscan_alg = DBSCANAlgorithm(distances)
        eps = 1.0
        minpts = 2

        elements_class = [PointClassType.UNCLASSIFIED] * N
        dbscan_alg._DBSCANAlgorithm__seed_expansion(1, eps, minpts, [2],
                                                    elements_class)
        expected_classes = [
            1, 1, 1, PointClassType.UNCLASSIFIED, PointClassType.UNCLASSIFIED
        ]
        self.assertItemsEqual(expected_classes, elements_class)

        elements_class = [PointClassType.UNCLASSIFIED] * N
        dbscan_alg._DBSCANAlgorithm__seed_expansion(2, eps, minpts, [3],
                                                    elements_class)
        expected_classes = [
            PointClassType.UNCLASSIFIED, PointClassType.UNCLASSIFIED,
            PointClassType.UNCLASSIFIED, PointClassType.UNCLASSIFIED,
            PointClassType.UNCLASSIFIED
        ]
        self.assertItemsEqual(expected_classes, elements_class)

        minpts = 1
        dbscan_alg._DBSCANAlgorithm__seed_expansion(2, eps, minpts, [3],
                                                    elements_class)
        expected_classes = [
            PointClassType.UNCLASSIFIED, PointClassType.UNCLASSIFIED,
            PointClassType.UNCLASSIFIED, 2, 2
        ]
        self.assertItemsEqual(expected_classes, elements_class)

        elements_class = [PointClassType.UNCLASSIFIED] * N
        dbscan_alg._DBSCANAlgorithm__seed_expansion(1, eps, minpts, [2, 4],
                                                    elements_class)
        expected_classes = [1, 1, 1, 1, 1]
        self.assertItemsEqual(expected_classes, elements_class)