代码链接:https://github.com/ICDM-UESTC/ExGeo
└── ExGeo
├── datasets # 包含3个大规模的真实街道IP地理位置数据集。
│ |── New_York # 从纽约市收集的街道级IP地理定位数据集,包括91,808个IP地址。
│ |── Los_Angeles # 从洛杉矶收集的街道级IP地理定位数据集,包括92,804个IP地址。
│ |── Shanghai # 收集自上海的街道级IP地理定位数据集,包括126,258个IP地址。
├── lib # 包含模型(model)实现文件
│ |── layers.py # 注意力机制的代码。
│ |── model.py # ExGeo的核心源代码。
│ |── sublayers.py # layer.py的支持文件。
│ |── utils.py # 辅助函数
├── asset # 包含运行模型时保存的检查点和日志
│ |── log # 包含运行模型时保存的日志
│ |── model # 包含运行模型时保存的检查点├── generateidx.py # 生成target nodes和landmark nodes的idx(索引)
├── preprocess.py # 预处理数据集并为模型运行执行IP聚类
├── main.py # 运行模型进行训练和测试
├── test.py #加载检查点,然后测试
└── README.md
一、导入各种模块和数据库
# Load data and IP clustering
import math
import random
import pandas as pd
import numpy as np
import argparse
from sklearn import preprocessing
from lib.utils import MaxMinScaler
from tqdm import tqdm
加载数据和IP聚类,这些导入语句是为了引入在后续代码中可能会使用到的数学、随机数、数据处理等工具和库。
和ExGeo代码理解(一)generateidx.py的是一样的。,不同之处在于:
1、import csv:读取CSV文件
二、使用argparse
库创建了一个命令行解析器
parser = argparse.ArgumentParser()
parser.add_argument('--dataset', type=str, default='Shanghai', choices=["Shanghai", "New_York", "Los_Angeles"],
help='which dataset to use')
parser.add_argument('--train_test_ratio', type=float, default=0.8, help='landmark ratio')
parser.add_argument('--lm_ratio', type=float, default=0.7, help='landmark ratio')
parser.add_argument('--seed', type=int, default=1234)
# parser.add_argument('--seed', type=int, default=2022)
opt = parser.parse_args()
print("Dataset: ", opt.dataset)
这部分代码的功能是通过命令行输入来配置脚本的行为。用户可以在运行脚本时通过命令行参数指定数据集名称、训练集测试集比例、地标比例以及随机数生成的种子等参数。解析后,这些参数将在脚本中被引用,从而影响程序的行为。
该部分实现和RIPGeo的(一)preprocess.py中的一样,不同之处在于:
默认的数据集变成了shanghai。
1、parser.add_argument('--dataset', type=str, default='Shanghai', choices=["Shanghai", "New_York", "Los_Angeles"], help='which data