| from deeprobust.graph.data import Dataset | |
| from deeprobust.graph.defense import DeepWalk | |
| from deeprobust.graph.global_attack import NodeEmbeddingAttack | |
| from deeprobust.graph.global_attack import OtherNodeEmbeddingAttack | |
| import itertools | |
| dataset_str = 'cora_ml' | |
| data = Dataset(root='/tmp/', name=dataset_str, seed=15) | |
| adj, features, labels = data.adj, data.features, data.labels | |
| idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test | |
| comb = itertools.product(["random", "degree", "eigencentrality"], ["remove", "add"]) | |
| for type, attack_type in comb: | |
| model = OtherNodeEmbeddingAttack(type=type) | |
| print(model.type, attack_type) | |
| try: | |
| model.attack(adj, attack_type=attack_type, n_candidates=10000) | |
| modified_adj = model.modified_adj | |
| defender = DeepWalk() | |
| defender.fit(modified_adj) | |
| defender.evaluate_node_classification(labels, idx_train, idx_test) | |
| except KeyError: | |
| print('eigencentrality only supports removing edges') | |
| model = NodeEmbeddingAttack() | |
| model.attack(adj, attack_type="remove") | |
| model.attack(adj, attack_type="remove", min_span_tree=True) | |
| modified_adj = model.modified_adj | |
| model.attack(adj, attack_type="add", n_candidates=10000) | |
| model.attack(adj, attack_type="add_by_remove", n_candidates=10000) | |