| 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) |
|
|