def test_pipeline(self): rnds = np.random.RandomState(0) R12 = rnds.rand(50, 30) R13 = rnds.rand(50, 40) R23 = rnds.rand(30, 40) t1 = ObjectType('type1', 30) t2 = ObjectType('type2', 40) t3 = ObjectType('type3', 40) relations = [ Relation(R12, t1, t2), Relation(R13, t1, t3), Relation(R23, t2, t3) ] fusion_graph = FusionGraph() fusion_graph.add_relations_from(relations) fuser = Dfmf(random_state=rnds).fuse(fusion_graph) self.assertEqual(fuser.factor(t1).shape, (50, 30)) self.assertEqual(fuser.factor(t2).shape, (30, 40)) self.assertEqual(fuser.factor(t3).shape, (40, 40)) self.assertEqual(fuser.backbone(relations[0]).shape, (30, 40)) self.assertEqual(fuser.backbone(relations[1]).shape, (30, 40)) self.assertEqual(fuser.backbone(relations[2]).shape, (40, 40)) new_R12 = rnds.rand(15, 30) new_R13 = rnds.rand(15, 40) new_relations = [Relation(new_R12, t1, t2), Relation(new_R13, t1, t3)] new_graph = FusionGraph(new_relations) transformer = DfmfTransform(random_state=rnds).transform( t1, new_graph, fuser) self.assertEqual(transformer.factor(t1).shape, (15, 30))
def test_transformation(self): R12 = np.random.rand(5, 3) t1 = ObjectType('type1', 2) t2 = ObjectType('type2', 2) relation = Relation(R12, t1, t2) fusion_graph = FusionGraph() fusion_graph.add_relation(relation) rnds = np.random.RandomState(0) fuser = Dfmf(init_type='random', random_state=rnds, max_iter=100).fuse(fusion_graph) new_R12 = R12[:2].copy() new_graph = FusionGraph([Relation(new_R12, t1, t2)]) new_rnds = np.random.RandomState(0) transformer = DfmfTransform(random_state=new_rnds).transform( t1, new_graph, fuser) new_G1 = transformer.factor(t1) G1 = fuser.factor(t1) G2 = fuser.factor(t2) S12 = fuser.backbone(relation) new_R12_hat = np.dot(new_G1, np.dot(S12, G2.T)) R12_hat = np.dot(G1, np.dot(S12, G2.T)) diff_G1 = new_G1 - G1[:2] diff_hat = new_R12_hat - R12_hat[:2] self.assertLess(np.sum(diff_G1**2) / diff_G1.size, 1e-5) self.assertLess(np.sum(diff_hat**2) / diff_hat.size, 1e-5)
def test_transformation(self): R12 = np.random.rand(5, 3) t1 = ObjectType('type1', 2) t2 = ObjectType('type2', 2) relation = Relation(R12, t1, t2) fusion_graph = FusionGraph() fusion_graph.add_relation(relation) rnds = np.random.RandomState(0) fuser = Dfmf(init_type='random', random_state=rnds, max_iter=100 ).fuse(fusion_graph) new_R12 = R12[:2].copy() new_graph = FusionGraph([Relation(new_R12, t1, t2)]) new_rnds = np.random.RandomState(0) transformer = DfmfTransform(random_state=new_rnds).transform( t1, new_graph, fuser) new_G1 = transformer.factor(t1) G1 = fuser.factor(t1) G2 = fuser.factor(t2) S12 = fuser.backbone(relation) new_R12_hat = np.dot(new_G1, np.dot(S12, G2.T)) R12_hat = np.dot(G1, np.dot(S12, G2.T)) diff_G1 = new_G1 - G1[:2] diff_hat = new_R12_hat - R12_hat[:2] self.assertLess(np.sum(diff_G1 ** 2) / diff_G1.size, 1e-5) self.assertLess(np.sum(diff_hat ** 2) / diff_hat.size, 1e-5)
def test_pipeline(self): rnds = np.random.RandomState(0) R12 = rnds.rand(50, 30) R13 = rnds.rand(50, 40) R23 = rnds.rand(30, 40) t1 = ObjectType('type1', 30) t2 = ObjectType('type2', 40) t3 = ObjectType('type3', 40) relations = [Relation(R12, t1, t2), Relation(R13, t1, t3), Relation(R23, t2, t3)] fusion_graph = FusionGraph() fusion_graph.add_relations_from(relations) fuser = Dfmf(random_state=rnds).fuse(fusion_graph) self.assertEqual(fuser.factor(t1).shape, (50, 30)) self.assertEqual(fuser.factor(t2).shape, (30, 40)) self.assertEqual(fuser.factor(t3).shape, (40, 40)) self.assertEqual(fuser.backbone(relations[0]).shape, (30, 40)) self.assertEqual(fuser.backbone(relations[1]).shape, (30, 40)) self.assertEqual(fuser.backbone(relations[2]).shape, (40, 40)) new_R12 = rnds.rand(15, 30) new_R13 = rnds.rand(15, 40) new_relations = [Relation(new_R12, t1, t2), Relation(new_R13, t1, t3)] new_graph = FusionGraph(new_relations) transformer = DfmfTransform(random_state=rnds).transform(t1, new_graph, fuser) self.assertEqual(transformer.factor(t1).shape, (15, 30))