代码链接:https://github.com/ICDM-UESTC/TrustGeo
└── TrustGeo
├── 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 # TrustGeo的核心源代码。
│ |── sublayers.py # layer.py的支持文件。
│ |── utils.py # 辅助函数,包括视图融合的代码
├── asset # 包含运行模型时保存的检查点和日志
│ |── log # 包含运行模型时保存的日志
│ |── model # 包含运行模型时保存的检查点
├── preprocess.py # 预处理数据集并为模型运行执行IP聚类
├── main.py # 运行模型进行训练和测试
├── test.py #加载检查点,然后测试
└── README.md
一、导入常用库和模块
from __future__ import print_function
from distutils.version import LooseVersion
from matplotlib.scale import LogisticTransform
import numpy as np
import torch
import warnings
import torch.nn as nn
import random
import matplotlib.pyplot as plt
import copy
这段代码首先包含一些导入语句,接着进行一些版本和警告的处理,最后导入了一些常用的库(numpy
、torch
、matplotlib
),并定义了一些常用的模块(nn
,plt
)。
该块实现与RIPGeo部分一致
RIPGeo代码理解(五)utils.py( 辅助函数)第一部分-CSDN博客
不同之处在于:
1、from distutils.version import LooseVersion:导入LooseVersion
类,用于比较版本号。
2、from matplotlib.scale import LogisticTransform:导入了matplotlib
库中的LogisticTransform
类。LogisticTransform
是matplotlib
中用于对坐标轴进行变换的一个类。
二、warnings.filterwarnings(action='once')
设置了在使用warnings.filterwarnings
时的参数。filterwarnings
函数用于配置警告过滤器,以控制哪些警告会被触发,以及如何处理这些警告。
该块实现与RIPGeo完全一致
RIPGeo代码理解(五)utils.py( 辅助函数)第一部分-CSDN博客
三、MaxMinLogRTTScaler类定义(NN模型)
class MaxMinLogRTTScaler():
def __init__(self):
self.min = 0.
self.max = 1.
def transform(self, data):
data_o = np.array(data)
data_o = np.log(data_o + 1)
return (data_o - self.min) / (self.max - self.min)
这是一个最大最小归一化和对数变换的类,用于对输入数据进行预处理。这个类的实例可以用于对RTT(Round-Trip Time)等数据进行预处理,使其适用于某些需要输入在固定范围内的模型。
该块实现与RIPGeo完全一致
RIPGeo代码理解(五)utils.py( 辅助函数)第二部分-CSDN博客
四、MaxMinRTTScaler类定义(NN模型)
class MaxMinRTTScaler():
def __init__(self):
self.min = 0.
self.max = 1.
def transform(self, data):
data_o = np.array(data)
# data_o = np.log(data_o + 1)
return (data_o - self.min) / (self.max - self.min)
这是一个用于进行最大-最小缩放(Max-Min Scaling)的类。这种缩放方法用于将数据缩放到指定的范围,通常是[0, 1]。
该块实现与RIPGeo完全一致
RIPGeo代码理解(五)utils.py( 辅助函数)第二部分-CSDN博客
五、MaxMinLogScaler类定义(NN模型)
class MaxMinLogScaler():
def __init__(self):
self.min = 0.
self.max = 1.
def transform(self, data):
data[data != 0] = -np.log(data[data != 0] + 1)
max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min
data[data != 0] = (data[data != 0] - min) / (max - min)
return data
def inverse_transform(self, data):
max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
min = torch.from_numpy(self.min).type_as(data).