from autogl.datasets import build_dataset_from_name from autogl.solver.classifier.link_predictor import AutoLinkPredictor from autogl.module.train.evaluation import Auc from autogl.datasets.utils import split_edges from autogl.backend import DependentBackend import yaml import random import torch import numpy as np if __name__ == "__main__": from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter parser = ArgumentParser( "auto link prediction", formatter_class=ArgumentDefaultsHelpFormatter ) parser.add_argument( "--dataset", default="cora", type=str, help="dataset to use", choices=[ "cora", "pubmed", "citeseer", "coauthor_cs", "coauthor_physics", "amazon_computers", "amazon_photo", ], ) parser.add_argument( "--configs", type=str, default="../configs/lp_gcn_benchmark.yml", help="config to use", ) # following arguments will override parameters in the config file parser.add_argument("--hpo", type=str, default="tpe", help="hpo methods") parser.add_argument( "--max_eval", type=int, default=50, help="max hpo evaluation times" ) parser.add_argument("--seed", type=int, default=0, help="random seed") parser.add_argument("--device", default=0, type=int, help="GPU device") args = parser.parse_args() if torch.cuda.is_available(): torch.cuda.set_device(args.device) seed = args.seed # set random seed random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) if torch.cuda.is_available(): torch.cuda.manual_seed(seed) torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False dataset = build_dataset_from_name(args.dataset) # split the edges for dataset dataset = split_edges(dataset, 0.8, 0.05) # add self-loop if DependentBackend.is_dgl(): import dgl # add self loop to 0 data = list(dataset[0]) data[0] = dgl.add_self_loop(data[0]) dataset = [data] configs = yaml.load(open(args.configs, "r").read(), Loader=yaml.FullLoader) configs["hpo"]["name"] = args.hpo configs["hpo"]["max_evals"] = args.max_eval autoClassifier = AutoLinkPredictor.from_config(configs) # train autoClassifier.fit( dataset, time_limit=3600, evaluation_method=[Auc], seed=seed ) autoClassifier.get_leaderboard().show() auc = autoClassifier.evaluate(metric="auc") print("test auc: {:.4f}".format(auc))