Пример #1
0
    def test_split_edge_case(self):
        G, x, y, edge_x, edge_y, edge_index, graph_x, graph_y = \
            simple_networkx_graph()
        dg = Graph(G)

        dg_node = dg.split()
        dg_num_nodes_reduced = dg.num_nodes - 3
        self.assertEqual(
            dg_node[0].node_label_index.shape[0], 1 + int(dg_num_nodes_reduced * 0.8))
        self.assertEqual(
            dg_node[1].node_label_index.shape[0], 1 + int(dg_num_nodes_reduced * 0.1))
        self.assertEqual(
            dg_node[2].node_label_index.shape[0], dg.num_nodes - 2 -
            int(dg_num_nodes_reduced * 0.8) - int(dg_num_nodes_reduced * 0.1))

        dg_edge = dg.split(task='edge')
        dg_num_edges_reduced = dg.num_edges - 3
        edge_0 = 1 + int(dg_num_edges_reduced * 0.8)
        edge_1 = 1 + int(dg_num_edges_reduced * 0.1)
        edge_2 = dg.num_edges - edge_0 - edge_1
        self.assertEqual(dg_edge[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_edge[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_edge[2].edge_label_index.shape[1], edge_2)

        dg_link = dg.split(task='link_pred')
        dg_num_edges_reduced = dg.num_edges - 3
        edge_0 = 1 + int(dg_num_edges_reduced * 0.8)
        edge_1 = 1 + int(dg_num_edges_reduced * 0.1)
        edge_2 = dg.num_edges - edge_0 - edge_1
        self.assertEqual(dg_link[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_link[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_link[2].edge_label_index.shape[1], edge_2)
Пример #2
0
    def test_split_edge_case(self):
        G, x, y, edge_x, edge_y, edge_index, graph_x, graph_y = (
            simple_networkx_graph())
        Graph.add_node_attr(G, "node_label", y)
        Graph.add_edge_attr(G, "edge_label", edge_y)
        dg = Graph(G)

        dg_node = dg.split()
        dg_num_nodes = dg.num_nodes
        node_0 = int(dg_num_nodes * 0.8)
        node_1 = int(dg_num_nodes * 0.1)
        node_2 = dg_num_nodes - node_0 - node_1
        self.assertEqual(dg_node[0].node_label_index.shape[0], node_0)
        self.assertEqual(dg_node[1].node_label_index.shape[0], node_1)
        self.assertEqual(dg_node[2].node_label_index.shape[0], node_2)

        dg_edge = dg.split(task="edge")
        dg_num_edges = dg.num_edges
        edge_0 = int(dg_num_edges * 0.8)
        edge_1 = int(dg_num_edges * 0.1)
        edge_2 = dg_num_edges - edge_0 - edge_1
        self.assertEqual(dg_edge[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_edge[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_edge[2].edge_label_index.shape[1], edge_2)

        dg_link = dg.split(task="link_pred")
        edge_0 = int(dg_num_edges * 0.8)
        edge_1 = int(dg_num_edges * 0.1)
        edge_2 = dg.num_edges - edge_0 - edge_1
        self.assertEqual(dg_link[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_link[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_link[2].edge_label_index.shape[1], edge_2)
Пример #3
0
    def test_split_edge_case(self):
        G, x, y, edge_x, edge_y, edge_index, graph_x, graph_y = (
            simple_networkx_graph()
        )

        dg = Graph(
            node_label=y,
            edge_label=edge_y,
            edge_index=edge_index,
            directed=True
        )
        dg_node = dg.split()
        dg_num_nodes = dg.num_nodes
        self.assertEqual(
            dg_node[0].node_label_index.shape[0],
            int(dg_num_nodes * 0.8),
        )
        self.assertEqual(
            dg_node[1].node_label_index.shape[0],
            int(dg_num_nodes * 0.1),
        )
        self.assertEqual(
            dg_node[2].node_label_index.shape[0],
            dg.num_nodes
            - int(dg_num_nodes * 0.8)
            - int(dg_num_nodes * 0.1)
        )

        dg_edge = dg.split(task="edge")
        dg_num_edges = dg.num_edges
        edge_0 = int(dg_num_edges * 0.8)
        edge_1 = int(dg_num_edges * 0.1)
        edge_2 = dg.num_edges - edge_0 - edge_1
        self.assertEqual(
            dg_edge[0].edge_label_index.shape[1],
            edge_0
        )
        self.assertEqual(
            dg_edge[1].edge_label_index.shape[1],
            edge_1
        )
        self.assertEqual(
            dg_edge[2].edge_label_index.shape[1],
            edge_2
        )

        dg_link = dg.split(task="link_pred")
        dg_num_edges = dg.num_edges
        edge_0 = int(dg_num_edges * 0.8)
        edge_1 = int(dg_num_edges * 0.1)
        edge_2 = dg.num_edges - edge_0 - edge_1
        self.assertEqual(dg_link[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_link[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_link[2].edge_label_index.shape[1], edge_2)
Пример #4
0
    def test_split(self):
        pyg_dataset = Planetoid("./cora", "Cora")

        x = pyg_dataset[0].x
        y = pyg_dataset[0].y
        edge_index = pyg_dataset[0].edge_index

        row, col = copy.deepcopy(edge_index)
        mask = row < col
        row, col = row[mask], col[mask]
        edge_index = torch.stack([row, col], dim=0)
        edge_index = torch.cat(
            [edge_index, torch.flip(edge_index, [0])], dim=1)

        dg = Graph(node_feature=x,
                   node_label=y,
                   edge_index=edge_index,
                   directed=False)

        dg_node = dg.split()
        dg_num_nodes = dg.num_nodes
        node_0 = int(dg_num_nodes * 0.8)
        node_1 = int(dg_num_nodes * 0.1)
        node_2 = dg_num_nodes - node_0 - node_1
        self.assertEqual(dg_node[0].node_label_index.shape[0], node_0)
        self.assertEqual(dg_node[1].node_label_index.shape[0], node_1)
        self.assertEqual(dg_node[2].node_label_index.shape[0], node_2)

        for split_ratio in [[0.1, 0.4, 0.5], [0.4, 0.3, 0.3], [0.7, 0.2, 0.1]]:
            dg_link_custom = (dg.split(task="link_pred",
                                       split_ratio=split_ratio))
            dg_num_edges = dg.num_edges
            edge_0 = 2 * int(split_ratio[0] * dg_num_edges)
            edge_1 = 2 * int(split_ratio[1] * dg_num_edges)
            edge_2 = 2 * (dg_num_edges - int(split_ratio[0] * dg_num_edges) -
                          int(split_ratio[1] * dg_num_edges))
            self.assertEqual(
                dg_link_custom[0].edge_label_index.shape[1],
                edge_0,
            )
            self.assertEqual(
                dg_link_custom[1].edge_label_index.shape[1],
                edge_1,
            )
            self.assertEqual(
                dg_link_custom[2].edge_label_index.shape[1],
                edge_2,
            )
Пример #5
0
    def test_split(self):
        pyg_dataset = Planetoid("./cora", "Cora")

        x = pyg_dataset[0].x
        y = pyg_dataset[0].y
        edge_index = pyg_dataset[0].edge_index

        row, col = copy.deepcopy(edge_index)
        mask = row < col
        row, col = row[mask], col[mask]
        edge_index = torch.stack([row, col], dim=0)
        edge_index = torch.cat(
            [edge_index, torch.flip(edge_index, [0])], dim=1
        )

        dg = Graph(
            node_feature=x, node_label=y,
            edge_index=edge_index, directed=False
        )

        dg_node = dg.split()
        dg_num_nodes_reduced = dg.num_nodes - 3
        self.assertEqual(
            dg_node[0].node_label_index.shape[0],
            1 + int(dg_num_nodes_reduced * 0.8),
        )
        self.assertEqual(
            dg_node[1].node_label_index.shape[0],
            1 + int(dg_num_nodes_reduced * 0.1),
        )
        self.assertEqual(
            dg_node[2].node_label_index.shape[0],
            dg.num_nodes
            - 2
            - int(dg_num_nodes_reduced * 0.8)
            - int(dg_num_nodes_reduced * 0.1),
        )

        dg_link = dg.split(task="link_pred")
        dg_num_edges_reduced = dg.num_edges - 3
        edge_0 = 2 * (1 + int(dg_num_edges_reduced * 0.8))
        edge_1 = 2 * (1 + int(dg_num_edges_reduced * 0.1))
        edge_2 = dg.num_edges * 2 - edge_0 - edge_1
        self.assertEqual(dg_link[0].edge_label_index.shape[1], edge_0)
        self.assertEqual(dg_link[1].edge_label_index.shape[1], edge_1)
        self.assertEqual(dg_link[2].edge_label_index.shape[1], edge_2)

        for message_ratio in [0.1, 0.2, 0.4, 0.8]:
            dg_link_resample = (
                dg_link[0].clone().resample_disjoint(
                    message_ratio=message_ratio,
                )
            )
            positive_edge_num = (
                int(0.5 * dg_link[0].clone().edge_label_index.shape[1])
            )
            self.assertEqual(
                dg_link_resample.edge_label_index.shape[1],
                2 * (
                    positive_edge_num
                    - 1
                    - int(message_ratio * (positive_edge_num - 2))
                )
            )

        for split_ratio in [[0.1, 0.4, 0.5], [0.4, 0.3, 0.3], [0.7, 0.2, 0.1]]:
            dg_link_custom = (
                dg.split(task="link_pred", split_ratio=split_ratio)
            )
            dg_num_edges_reduced = dg.num_edges - 3
            edge_0 = 2 * (1 + int(dg_num_edges_reduced * split_ratio[0]))
            self.assertEqual(
                dg_link_custom[0].edge_label_index.shape[1],
                edge_0,
            )
            edge_1 = (
                2 * (
                    1
                    + int(split_ratio[0] * dg_num_edges_reduced)
                    + 1
                    + int(split_ratio[1] * dg_num_edges_reduced)
                )
                - edge_0
            )
            self.assertEqual(
                dg_link_custom[1].edge_label_index.shape[1],
                edge_1,
            )
            edge_2 = dg.num_edges * 2 - edge_0 - edge_1
            self.assertEqual(
                dg_link_custom[2].edge_label_index.shape[1],
                edge_2,
            )