Пример #1
0
 def setUp(self):
     self.minicolumn = Minicolumn(
         space_size=5,
         in_random_bits=1,
         out_random_bits=1,
         in_dimensions=1,
         out_dimensions=1,
         code_alignment=1,
         in_code_activate=0,
         class_point=PointNoneMock
     )
     self.minicolumn_zeros = Minicolumn(
         space_size=5,
         in_random_bits=3,
         out_random_bits=3,
         in_dimensions=3,
         out_dimensions=3,
         code_alignment=2,
         seed=42,
         in_code_activate=0,
         class_point=PointZerosMock
     )
     self.minicolumn_controversy_out = Minicolumn(
         space_size=5,
         in_random_bits=4,
         out_random_bits=8,
         in_dimensions=4,
         out_dimensions=8,
         code_alignment=4,
         seed=42,
         controversy=2,
         class_point=PointEmptyMock
     )
     self.minicolumn_controversy_in = Minicolumn(
         space_size=200,
         in_random_bits=4,
         out_random_bits=8,
         in_dimensions=4,
         out_dimensions=8,
         code_alignment=2,
         seed=42,
         controversy=0.2,
         in_code_activate=0,
         class_point=PointControversyInMock
     )
     self.minicolumn_code_alignment = Minicolumn(
         space_size=5,
         in_random_bits=4,
         out_random_bits=8,
         in_dimensions=4,
         out_dimensions=8,
         code_alignment=4,
         seed=42,
         controversy=0.1,
         in_code_activate=0,
         min_active_points=0,
         class_point=PointCodeAligmentMock
     )
Пример #2
0
 def setUp(self):
     self.minicolumn = Minicolumn(
         space_size=5,
         in_random_bits=1,
         out_random_bits=1,
         in_dimensions=1,
         out_dimensions=1,
         code_alignment=1,
         class_point=PointNoneMock
     )
Пример #3
0
 def setUp(self):
     self.minicolumn_none = Minicolumn(
         space_size=100,
         in_random_bits=1,
         out_random_bits=1,
         in_dimensions=1,
         out_dimensions=1,
         code_alignment=1,
         class_point=PointNoneMock
     )
     self.minicolumn = Minicolumn(
         space_size=20,
         in_random_bits=10,
         out_random_bits=10,
         in_dimensions=10,
         out_dimensions=10,
         seed=41,
         controversy=0.05,
         code_alignment=1,
         min_active_points=0,
         class_point=PointOddEvenMock
     )
     self.minicolumn_front = Minicolumn(
         space_size=20,
         in_random_bits=10,
         out_random_bits=2,
         in_dimensions=10,
         out_dimensions=2,
         seed=41,
         controversy=0.05,
         code_alignment=1,
         class_point=PointEmptyMock
     )
     self.minicolumn_back = Minicolumn(
         space_size=20,
         in_random_bits=2,
         out_random_bits=10,
         in_dimensions=2,
         out_dimensions=10,
         seed=41,
         controversy=0.05,
         code_alignment=1,
         class_point=PointEmptyMock
     )
     self.minicolumn_assert_dim_2 = Minicolumn(
         space_size=20,
         in_random_bits=2,
         out_random_bits=10,
         in_dimensions=2,
         out_dimensions=10,
         seed=41,
         controversy=0.05,
         code_alignment=1,
         class_point=PointEmptyMock
     )
Пример #4
0
 def test_code_alignment(self):
     self.assertRaises(ValueError, Minicolumn, code_alignment=-5)
     self.assertRaises(ValueError, Minicolumn, code_alignment=None)
     self.assertRaises(
         ValueError, Minicolumn,
         code_alignment=3, in_dimensions=4, out_dimensions=2,
         in_random_bits=1, out_random_bits=1
     )
     self.assertRaises(
         ValueError, Minicolumn,
         code_alignment=3, in_dimensions=3, out_dimensions=2,
         in_random_bits=1, out_random_bits=1
     )
     Minicolumn(
         space_size=10,
         code_alignment=2, in_dimensions=4, out_dimensions=4,
         in_random_bits=1, out_random_bits=1
     )
Пример #5
0
          the_same_clusters)


df = pd.read_csv('data/MNIST/mnist_train.csv', header=None, nrows=100)

max_number = 5000
count_subimages_for_image = 10
window_size = [4, 4]
space_size = 2000
minicolumn = Minicolumn(space_size=space_size,
                        max_clusters=30000,
                        in_dimensions=64,
                        in_random_bits=25,
                        out_dimensions=20,
                        out_random_bits=15,
                        seed=42,
                        code_alignment=5,
                        in_point_activate=5,
                        out_point_activate=4,
                        in_cluster_modify=6,
                        out_cluster_modify=3,
                        lr=0.3,
                        binarization=0.1)
transforms = ContextTransformer(directs=4)

for i in range(space_size, 10000):
    np.sort(np.random.permutation(64)[:25])
    np.sort(np.random.permutation(20)[:15])

means = []
delta = []
ind = 0
Пример #6
0
    def setUp(self):

        window_size = [4, 4]
        width_angle = np.pi / 2
        strength = 0
        non_zeros_bits = 5
        space_size = 500
        directs = 4
        self.minicolumn = Minicolumn(space_size=space_size,
                                     max_clusters=900,
                                     in_dimensions=64,
                                     in_random_bits=25,
                                     out_dimensions=20,
                                     out_random_bits=15,
                                     seed=42,
                                     code_alignment=5,
                                     in_point_activate=5,
                                     out_point_activate=4,
                                     in_cluster_modify=6,
                                     out_cluster_modify=3,
                                     lr=0.3,
                                     binarization=0.1)
        self.transformer = ContextTransformer(directs=directs,
                                              window_size=window_size,
                                              width_angle=width_angle,
                                              strength=strength,
                                              non_zeros_bits=non_zeros_bits)
        self.answer = [{
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            0.628,
            self.Answer.CONT_NUM:
            314,
            self.Answer.OPT_IND:
            7,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            1.154,
            self.Answer.CONT_NUM:
            577,
            self.Answer.OPT_IND:
            20,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            1.408,
            self.Answer.CONT_NUM:
            704,
            self.Answer.OPT_IND:
            14,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]),
            self.Answer.MEANS:
            1.928,
            self.Answer.CONT_NUM:
            964,
            self.Answer.OPT_IND:
            29,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS: MINICOLUMN.SLEEP,
            self.Answer.OPT_OUT: None,
            self.Answer.MEANS: 1.928,
            self.Answer.CONT_NUM: 964,
            self.Answer.OPT_IND: None,
            self.Answer.EMPTY_CODE: False
        }, {
            self.Answer.STATUS: MINICOLUMN.SLEEP,
            self.Answer.OPT_OUT: None,
            self.Answer.MEANS: 1.928,
            self.Answer.CONT_NUM: 964,
            self.Answer.OPT_IND: None,
            self.Answer.EMPTY_CODE: False
        }]
Пример #7
0
class TestFunctionalMinicolumn(unittest.TestCase):
    class Answer(Enum):
        CONT_NUM = 0
        OPT_IND = 1
        OPT_OUT = 2
        STATUS = 3
        MEANS = 4
        EMPTY_CODE = 5

    @classmethod
    def setUpClass(cls):
        print('\n')
        print('#########')
        print('The executing of these tests can be a bit long')
        print('#########')

    def setUp(self):

        window_size = [4, 4]
        width_angle = np.pi / 2
        strength = 0
        non_zeros_bits = 5
        space_size = 500
        directs = 4
        self.minicolumn = Minicolumn(space_size=space_size,
                                     max_clusters=900,
                                     in_dimensions=64,
                                     in_random_bits=25,
                                     out_dimensions=20,
                                     out_random_bits=15,
                                     seed=42,
                                     code_alignment=5,
                                     in_point_activate=5,
                                     out_point_activate=4,
                                     in_cluster_modify=6,
                                     out_cluster_modify=3,
                                     lr=0.3,
                                     binarization=0.1)
        self.transformer = ContextTransformer(directs=directs,
                                              window_size=window_size,
                                              width_angle=width_angle,
                                              strength=strength,
                                              non_zeros_bits=non_zeros_bits)
        self.answer = [{
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            0.628,
            self.Answer.CONT_NUM:
            314,
            self.Answer.OPT_IND:
            7,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            1.154,
            self.Answer.CONT_NUM:
            577,
            self.Answer.OPT_IND:
            20,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]),
            self.Answer.MEANS:
            1.408,
            self.Answer.CONT_NUM:
            704,
            self.Answer.OPT_IND:
            14,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS:
            MINICOLUMN.LEARN,
            self.Answer.OPT_OUT:
            np.array(
                [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]),
            self.Answer.MEANS:
            1.928,
            self.Answer.CONT_NUM:
            964,
            self.Answer.OPT_IND:
            29,
            self.Answer.EMPTY_CODE:
            False
        }, {
            self.Answer.STATUS: MINICOLUMN.SLEEP,
            self.Answer.OPT_OUT: None,
            self.Answer.MEANS: 1.928,
            self.Answer.CONT_NUM: 964,
            self.Answer.OPT_IND: None,
            self.Answer.EMPTY_CODE: False
        }, {
            self.Answer.STATUS: MINICOLUMN.SLEEP,
            self.Answer.OPT_OUT: None,
            self.Answer.MEANS: 1.928,
            self.Answer.CONT_NUM: 964,
            self.Answer.OPT_IND: None,
            self.Answer.EMPTY_CODE: False
        }]

    def __add_to_dict(self, dict_var, key, value):
        dict_tmp = dict_var[-1]
        dict_tmp[key] = value
        dict_var[-1] = dict_tmp

    def __init_answ(self, answ):
        answ.append({
            self.Answer.EMPTY_CODE: None,
            self.Answer.CONT_NUM: None,
            self.Answer.OPT_IND: None,
            self.Answer.OPT_OUT: None,
            self.Answer.STATUS: None,
            self.Answer.MEANS: None
        })

    def test_minicolumn(self):

        df = pd.read_csv('../../data/test/test_image.csv',
                         header=None,
                         nrows=1)
        answer = []

        label, image = transformers.get_image(df, 0)
        self.assertEqual(9, label)
        for im_num in range(0, 6):
            self.__init_answ(answer)
            codes, context_numbes, image_sample = self.transformer.get_sample_codes(
                image)
            if codes is None:
                self.__add_to_dict(answer, self.Answer.EMPTY_CODE, True)
                continue
            else:
                self.__add_to_dict(answer, self.Answer.EMPTY_CODE, False)

            opt_ind, out_code, status = self.minicolumn.learn(
                codes, im_num, in_controversy=20, out_controversy=5)
            self.__add_to_dict(answer, self.Answer.OPT_IND, opt_ind)
            self.__add_to_dict(answer, self.Answer.OPT_OUT, out_code)
            self.__add_to_dict(answer, self.Answer.CONT_NUM,
                               self.minicolumn.count_clusters)
            self.__add_to_dict(answer, self.Answer.STATUS, status)
            self.__add_to_dict(
                answer, self.Answer.MEANS,
                np.mean([len(p.clusters) for p in self.minicolumn.space]))

        for item in zip(self.answer, answer):
            for key in item[0]:
                np.testing.assert_equal(item[0][key], item[1][key])
Пример #8
0
 def test_size_space(self):
     space_size = 100
     minicolumn = Minicolumn(space_size=space_size, class_point=PointNoneMock)
     self.assertEqual(len(minicolumn.space), space_size)
Пример #9
0
class TestPointUnsupervisedLearning(unittest.TestCase):
    def setUp(self):
        self.minicolumn = Minicolumn(
            space_size=5,
            in_random_bits=1,
            out_random_bits=1,
            in_dimensions=1,
            out_dimensions=1,
            code_alignment=1,
            in_code_activate=0,
            class_point=PointNoneMock
        )
        self.minicolumn_zeros = Minicolumn(
            space_size=5,
            in_random_bits=3,
            out_random_bits=3,
            in_dimensions=3,
            out_dimensions=3,
            code_alignment=2,
            seed=42,
            in_code_activate=0,
            class_point=PointZerosMock
        )
        self.minicolumn_controversy_out = Minicolumn(
            space_size=5,
            in_random_bits=4,
            out_random_bits=8,
            in_dimensions=4,
            out_dimensions=8,
            code_alignment=4,
            seed=42,
            controversy=2,
            class_point=PointEmptyMock
        )
        self.minicolumn_controversy_in = Minicolumn(
            space_size=200,
            in_random_bits=4,
            out_random_bits=8,
            in_dimensions=4,
            out_dimensions=8,
            code_alignment=2,
            seed=42,
            controversy=0.2,
            in_code_activate=0,
            class_point=PointControversyInMock
        )
        self.minicolumn_code_alignment = Minicolumn(
            space_size=5,
            in_random_bits=4,
            out_random_bits=8,
            in_dimensions=4,
            out_dimensions=8,
            code_alignment=4,
            seed=42,
            controversy=0.1,
            in_code_activate=0,
            min_active_points=0,
            class_point=PointCodeAligmentMock
        )

    def test_continue_zeros_codes(self):
        in_codes = [np.array([0])] * 3
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn.unsupervised_learning(in_codes=in_codes)
        np.testing.assert_array_equal([[0]] * 3, in_codes)
        self.assertIsNone(None, min_out_code)
        self.assertIsNone(None, min_ind_hamming)
        self.assertIsNone(None, min_in_code)

    def test_out_not_detected(self):
        in_codes = [np.array([1, 0, 1]), np.array([0, 1, 1]), np.array([1, 1, 0])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_zeros.unsupervised_learning(in_codes=in_codes)
        np.testing.assert_array_equal([[1, 0, 1], [0, 1, 1], [1, 1, 0]], in_codes)
        np.testing.assert_array_equal([1, 1, 0], min_out_code)
        np.testing.assert_array_equal([1, 0, 1], min_in_code)
        self.assertEqual(0, min_ind_hamming)

    def test_controversy_out(self):
        in_codes = [np.array([1, 0, 1, 0]), np.array([0, 1, 1, 0]), np.array([1, 1, 0, 0])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_controversy_out.unsupervised_learning(in_codes=in_codes)
        np.testing.assert_array_equal([[1, 0, 1, 0], [0, 1, 1, 0], [1, 1, 0, 0]], in_codes)
        self.assertIsNone(None, min_out_code)
        self.assertIsNone(None, min_ind_hamming)
        self.assertIsNone(None, min_in_code)

    def test_code_alignment_more(self):
        in_codes = [np.array([1, 1, 1, 1]), np.array([1, 1, 1, 1]), np.array([1, 1, 1, 1])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_code_alignment.unsupervised_learning(in_codes)
        np.testing.assert_array_equal([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], in_codes)
        np.testing.assert_array_equal(np.array([1, 1, 0, 0, 0, 1, 0, 1]), min_out_code)
        np.testing.assert_array_equal(np.array([1, 1, 1, 1]), min_in_code)
        self.assertEqual(0, min_ind_hamming)
        self.assertEqual(self.minicolumn_code_alignment.alignment, np.sum(min_out_code))

    def test_code_alignment_less(self):
        in_codes = [np.array([1, 0, 0, 0]), np.array([1, 0, 0, 0]), np.array([1, 0, 0, 0])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_code_alignment.unsupervised_learning(in_codes)
        np.testing.assert_array_equal([[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]], in_codes)
        np.testing.assert_array_equal(np.array([1, 1, 1, 0, 1, 0, 0, 0]), min_out_code)
        np.testing.assert_array_equal([1, 0, 0, 0], min_in_code)
        self.assertEqual(self.minicolumn_code_alignment.alignment, np.sum(min_out_code))

    def test_code_alignment_eq(self):
        in_codes = [np.array([1, 1, 0, 0]), np.array([1, 1, 0, 0]), np.array([1, 1, 0, 0])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_code_alignment.unsupervised_learning(in_codes)
        np.testing.assert_array_equal([[1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 0]], in_codes)
        np.testing.assert_array_equal(np.array([1, 1, 0, 0, 1, 1, 0, 0]), min_out_code)
        np.testing.assert_array_equal(np.array([1, 1, 0, 0]), min_in_code)
        self.assertEqual(self.minicolumn_code_alignment.alignment, np.sum(min_out_code))

    def test_code_controversy_in(self):
        in_codes = [np.array([1, 1, 1, 1]), np.array([1, 1, 1, 1]), np.array([1, 1, 1, 1])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_controversy_in.unsupervised_learning(
            in_codes=in_codes, controversy_in=0
        )
        np.testing.assert_array_equal([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], in_codes)
        self.assertIsNone(None, min_out_code)
        self.assertIsNone(None, min_ind_hamming)
        self.assertIsNone(None, min_in_code)

    def test_code_hamming_dist_more(self):
        in_codes = [np.array([1, 1, 1, 1]), np.array([0, 1, 1, 1]), np.array([1, 1, 1, 1])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn_controversy_in.unsupervised_learning(in_codes)
        np.testing.assert_array_equal([[1, 1, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1]], in_codes)
        np.testing.assert_array_equal([1, 1, 1, 1], min_in_code)
        np.testing.assert_array_equal([0, 1, 0, 0, 0, 1, 0, 0], min_out_code)
        self.assertEqual(0, min_ind_hamming)

    def test_code_min_ind_hamming(self):
        in_codes = [np.array([0]), np.array([1]), np.array([1])]
        min_in_code, min_out_code, min_ind_hamming = self.minicolumn.unsupervised_learning(in_codes)
        np.testing.assert_array_equal([[0], [1], [1]], in_codes)
        np.testing.assert_array_equal([1], min_in_code)
        np.testing.assert_array_equal([1], min_out_code)
        self.assertEqual(1, min_ind_hamming)
Пример #10
0
class TestPointSleep(unittest.TestCase):
    def setUp(self):
        self.minicolumn = Minicolumn(
            space_size=5,
            in_random_bits=1,
            out_random_bits=1,
            in_dimensions=1,
            out_dimensions=1,
            code_alignment=1,
            class_point=PointNoneMock
        )
        self.minicolumn_activate = Minicolumn(
            space_size=5,
            in_random_bits=1,
            out_random_bits=1,
            in_point_activate=2,
            out_point_activate=2,
            in_dimensions=1,
            out_dimensions=1,
            code_alignment=1,
            in_code_activate=2,
            out_code_activate=2,
            class_point=PointNoneMock
        )

    def test_assert_input_params(self):
        self.assertRaises(ValueError, self.minicolumn.sleep, activate=2)
        self.assertRaises(ValueError, self.minicolumn.sleep, activate=-1)
        self.assertRaises(ValueError, self.minicolumn.sleep, activate=None)

    def test_no_clusters(self):
        clusters, the_same_clusters = self.minicolumn.sleep()
        self.assertEqual(0, sum([len(cluster) for cluster in clusters]))
        self.assertEqual(0, the_same_clusters)

    def __constructor_active_mask_less_threshold(self, in_vec, out_vec):
        self.minicolumn_activate.count_clusters = 5 * 5
        for point in self.minicolumn_activate.space:
            for _ in range(5):
                point.clusters.append(ClusterMockWeight(in_vec, out_vec))

    def test_active_out_mask_less(self):
        self.__constructor_active_mask_less_threshold(np.array([0, 0, 0, 0, 0]), np.array([1, 1, 1, 1, 1]))
        clusters, the_same_clusters = self.minicolumn_activate.sleep()
        self.assertEqual(0, sum([len(cluster) for cluster in clusters]))
        self.assertEqual(0, the_same_clusters)

    def test_active_in_mask_less(self):
        self.__constructor_active_mask_less_threshold(np.array([1, 1, 1, 1, 1]), np.array([0, 0, 0, 0, 0]))
        clusters, the_same_clusters = self.minicolumn_activate.sleep()
        self.assertEqual(0, sum([len(cluster) for cluster in clusters]))
        self.assertEqual(0, the_same_clusters)

    def test_sleep_0(self):
        self.__constructor_active_mask_less_threshold(
            np.array([1, 1, 1, 0, 0]),
            np.array([1, 1, 1, 0, 0])
        )

        points, the_same_clusters = self.minicolumn_activate.sleep()

        for clusters_number in points:
            np.testing.assert_array_equal([0, 1, 2, 3, 4], clusters_number)

        self.assertEqual(5, sum([len(point.clusters) for point in self.minicolumn_activate.space]))
        self.assertEqual(20, the_same_clusters)

        for point in self.minicolumn_activate.space:
            self.assertEqual(1, len(point.clusters))
            np.testing.assert_array_equal([1, 1, 1, 0, 0], point.clusters[0].in_w)
            np.testing.assert_array_equal([1, 1, 1, 0, 0], point.clusters[0].out_w)

    def test_sleep_1(self):
        self.minicolumn_activate.count_clusters = 5 * 5
        for point in self.minicolumn_activate.space:
            for i in range(5):
                point.clusters.append(ClusterMockWeight(
                    np.array([1] * i + [0] * (5 - i)),
                    np.array([1] * i + [0] * (5 - i))
                ))

        points, the_same_clusters = self.minicolumn_activate.sleep()

        for clusters_number in points:
            np.testing.assert_array_equal([2, 3, 4], clusters_number)

        self.assertEqual(15, sum([len(point.clusters) for point in self.minicolumn_activate.space]))
        self.assertEqual(0, the_same_clusters)

        for point in self.minicolumn_activate.space:
            self.assertEqual(3, len(point.clusters))
            np.testing.assert_array_equal([1, 1, 0, 0, 0], point.clusters[0].in_w)
            np.testing.assert_array_equal([1, 1, 1, 0, 0], point.clusters[1].in_w)
            np.testing.assert_array_equal([1, 1, 0, 0, 0], point.clusters[0].out_w)
            np.testing.assert_array_equal([1, 1, 1, 0, 0], point.clusters[1].out_w)
Пример #11
0
class TestPointPredict(unittest.TestCase):
    def setUp(self):
        self.minicolumn_none = Minicolumn(
            space_size=100,
            in_random_bits=1,
            out_random_bits=1,
            in_dimensions=1,
            out_dimensions=1,
            code_alignment=1,
            class_point=PointNoneMock
        )
        self.minicolumn = Minicolumn(
            space_size=20,
            in_random_bits=10,
            out_random_bits=10,
            in_dimensions=10,
            out_dimensions=10,
            seed=41,
            controversy=0.05,
            code_alignment=1,
            min_active_points=0,
            class_point=PointOddEvenMock
        )
        self.minicolumn_front = Minicolumn(
            space_size=20,
            in_random_bits=10,
            out_random_bits=2,
            in_dimensions=10,
            out_dimensions=2,
            seed=41,
            controversy=0.05,
            code_alignment=1,
            class_point=PointEmptyMock
        )
        self.minicolumn_back = Minicolumn(
            space_size=20,
            in_random_bits=2,
            out_random_bits=10,
            in_dimensions=2,
            out_dimensions=10,
            seed=41,
            controversy=0.05,
            code_alignment=1,
            class_point=PointEmptyMock
        )
        self.minicolumn_assert_dim_2 = Minicolumn(
            space_size=20,
            in_random_bits=2,
            out_random_bits=10,
            in_dimensions=2,
            out_dimensions=10,
            seed=41,
            controversy=0.05,
            code_alignment=1,
            class_point=PointEmptyMock
        )

    def test_not_valid_value(self):
        self.assertRaises(ValueError, self.minicolumn_front.front_predict, np.array([-1] * 10))
        self.assertRaises(ValueError, self.minicolumn_front.front_predict, np.array([2] * 10))
        self.assertRaises(ValueError, self.minicolumn_front.front_predict, np.array([0.8] * 10))
        self.assertRaises(ValueError, self.minicolumn_front.front_predict, None)

        self.assertRaises(ValueError, self.minicolumn_back.back_predict, np.array([-1] * 10))
        self.assertRaises(ValueError, self.minicolumn_back.back_predict, np.array([2] * 10))
        self.assertRaises(ValueError, self.minicolumn_back.back_predict, np.array([0.8] * 10))
        self.assertRaises(ValueError, self.minicolumn_back.back_predict, None)

    def __not_active_point(self, code, out_code, controversy, status):
        np.testing.assert_array_equal([1], code)
        self.assertEqual(None, out_code)
        self.assertEqual(None, controversy)
        self.assertEqual(MINICOLUMN_LEARNING.INACTIVE_POINTS, status)

    def test_not_active_point(self):
        code = np.array([1])
        controversy, out_code, status = self.minicolumn_none.front_predict(code)
        self.__not_active_point(code, out_code, controversy, status)
        controversy, in_code, status = self.minicolumn_none.back_predict(code)
        self.__not_active_point(code, out_code, controversy, status)

    def test_not_valid_dim(self):
        self.assertRaises(AssertionError, self.minicolumn_assert_dim_2.front_predict, np.array([1] * 3))
        self.assertRaises(AssertionError, self.minicolumn_assert_dim_2.back_predict, np.array([1] * 8))

    def __front_active_point(self, input_code, status, output_code, controversy, target, target_controversy):
        np.testing.assert_array_equal(np.array([1] * 10), input_code)
        np.testing.assert_array_equal(target, output_code)
        self.assertEqual(target_controversy, controversy)
        self.assertEqual(MINICOLUMN_LEARNING.ACCEPT, status)

    def test_active_point(self):
        input_code = np.array([1] * 10)
        controversy, output_code, status = self.minicolumn.back_predict(input_code)
        self.__front_active_point(
            input_code, status, output_code, controversy, np.array([1, 0, 1, 0, 1, 0, 0, 1, 1, 0]), 2
        )
        controversy, output_code, status = self.minicolumn.front_predict(input_code)
        self.__front_active_point(
            input_code, status, output_code, controversy, np.array([1, 0, 1, 0, 0, 0, 1, 0, 0, 0]), 4
        )