图神经网络——基于图神经网络的节点表征学习
Graph的特征表示非常复杂: 1.复杂的拓扑结构,较难从图像中的感受野提取有效信息;2.无特定的节点顺序;3.通常graph会是动态变化的, 且使用多模态特征。 高质量的节点表征能够用于衡量节点的相似性,同时高质量的节点表征也是准确分类节点的前提。 本文以Cora论文引用网络数据集为例,对MLP、GCN、GAT三种神经网络的分类性能进行对比。首先载入数据集并定义可视化函数: 1 2 3 4 5 #载入数据集 from torch_geometric.datasets import Planetoid from torch_geometric.transforms import NormalizeFeatures dataset = Planetoid(root='dataset', name='Cora', transform=NormalizeFeatures()) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #定义可视化函数,并观察整体数据分布 from sklearn.mani...
图神经网络——消息传递网络
消息传递(Message Passing) 指的是目标节点$S1$的邻居$\mathcal{N(S1)}$——B1、B2、B3,这些邻居节点根据一定的规则将信息(特征),汇总到目标节点上。信息汇总中最简单的规则就是逐个元素相加。在pytorch-geometric的官方文档中,消息传递图神经网络被描述为:$$\mathbf{x}_i^{(k)} = \gamma^{(k)} \left( \mathbf{x}i^{(k-1)}, \square{j \in \mathcal{N}(i)} , \phi^{(k)}\left(\mathbf{x}i^{(k-1)}, \mathbf{x}j^{(k-1)},\mathbf{e}{j,i}\right) \right),$$其中,$\mathbf{e}{j,i} \in \mathbb{R}^D$ 表示从节点$j$到节点$i$的边的属性,$\mathbf{x}^{(k-1)}_i\in\mathbb{R}^F$表示$(k-1)$层中节点$i$的节点表征,$\square$表示聚合策略,$\gamma$和$\phi$表示一些神...
图神经网络——基本图论与PyG库
在以往的深度学习中,主要的数据形式包括矩阵、张量、序列(sequence)和时间序列(time series),然而还有许多数据是图的结构,如社交网络、知识图谱等。图结构数据具有以下特点: 任意的大小和复杂的拓扑结构;没有固定的节点排序或参考点;通常是动态的,并具有多模态的特征;图的信息包括节点信息、边信息和拓扑结构信息。 1. 图结构数据1.1 图(Graphs)· 一个图记作$\mathcal{G}={\mathcal{V}, \mathcal{E}}$,其中 $\mathcal{V}=\left{v_{1}, \ldots, v_{N}\right}$是数量为$N=|\mathcal{V}|$ 的节点的集合, $\mathcal{E}=\left{e_{1}, \ldots, e_{M}\right}$ 是数量为 $M$ 的边的集合。· 节点表示实体(entities),边表示实体间的关系(relations);节点和边的信息可以是类别型或数值型的。· 只有一种类型的节点和一种类型的边的图称为同质图(Homogeneous Gra...
异常检测——集成方法
一般情况下,可以把异常检测看成是数据不平衡下的分类问题,如果数据条件允许,优先使用有监督异常检测如XGBOOST;仅有少量标签时,可以用无监督学习作为一种特征抽取方式,最后喂给有监督的分类模型。之前介绍的统计与概率模型、线性模型、基于相似度的模型,和今天要介绍的集成学习都是无监督模型。 为什么要使用集成学习?——①适合高维度数据(空间稀疏),②提高模型鲁棒性。值得注意的时,异常检测没有标签,所以feature bagging、bagging比boosting多。而使用boosting进行异常检测,需要生成伪标签。 1. Feature BaggingFeature Bagging,基本思想与bagging相似,只是对象是feature。基本检测器可以彼此完全不同,或不同的参数设置,或使用不同采样的子数据集。Feature bagging常用lof算法为基算法。 1.1 算法原理 1.2 不同检测器的分数标准化不同检测器可能会在不同的尺度上产生分数。例如,平均k近邻检测器会输出原始距离分数,而LOF算法会输出归一化值。另外,检测器输出的异常值分数大小不一,因此需要归一化,常见方...
异常检测——基于相似度的方法
异常值通常具有更高的离群程度分数值,同时也更具有可解释性。在基于相似度的异常检测方法中,主要思想是异常点的表示与正常点不同。 1. 基于距离的度量基于距离的异常检测有这样一个前提假设,即异常点的k近邻距离要远大于正常点。常见的方法是嵌套循环,第一层循环遍历每个数据,第二层循环进行异常判断计算当前点与其他点的距离,一旦发现多于k个数据点与当前点的距离在D之内,则将该点标记为非异常值。 此法计算的时间复杂度为O(N2),当数据量比较大时需要修剪方法以加快距离计算。 1.1 基于单元的方法在基于单元格的技术中,数据空间被划分为单元格,单元格的宽度是阈值D和数据维数d的函数。L1邻居表示通过最多1个单元间的边界可从该单元到达的单元格的集合,L2邻居表示通过跨越2个或3个边界而获得的那些单元格。以二维数据为例,网格间的距离为D/2√d,其具有以下性质:①单元格中两点之间的距离最多为D/2 。②一个点与L1邻接点之间的距离最大为D。③一个点与它的Lr邻居(其中r>2)中的一个点之间的距离至少为D。 但是L2中并不能直接得出结论,需要另外定义规则,如:①如果一个单元格...
异常检测——线性相关方法
真实数据集中不同维度的特征可能具有高度相关性,这是因为不同的特征往往是由相同的基础过程以密切相关的方式产生的。这被称为——回归建模,是一种参数化的相关性分析。一类相关性分析通过其他变量预测单独的属性值,另一类方法用一些潜在变量来代表整个数据。前者的代表是线性回归,后者一个典型的例子是主成分分析。线性相关分析基于的假设是:①近似线性相关假设;②子空间假设。为了确定线性模型是否适合数据集,需要进行探索性和可视化分析。 0. 探索性和可视化分析 1 2 train_data.describe() train_data.info() 1 2 3 4 5 6 7 8 9 #相关性分析 numeric_features = ['f'+str(i) for i in range(20)] numeric = train_data[numeric_features] correlation.numeric.corr() f,ax = plt.subplots(figsize=(15,15)) sns.heatmap(correlation,sq...
异常检测——基于统计学的方法
异常检测的统计方法包含两种主要类型:参数方法和非参数方法。**参数方法:**假定数据服从以θ为参数的参数分布,该参数分布的概率密度函数f(x,θ)给出x属于该分布的概率,该值越小,x越可能是异常点。(仅对数据做的统计假定满足实际约束时可行)非参数方法:不假定先验统计模型,假定参数的个数较为灵活,并非完全无参。 1. 参数方法1.1 基于正态分布的一元异常点检测仅涉及单变量的数据称为一元数据,假定数据由正态分布产生,由输入数据学习正态分布的参数,并把低概率的点识别为异常点。输入数据集 ,根据公式可以求出参数均值μ和方差σ,和概率密度函数p(x)。$$\mu =\frac{1}{n}\sum_{i=1}^n{x_i}$$$$\sigma ^2=\frac{1}{n}\sum_{i=1}^n{\left( x_i-\mu \right)}^2$$$$p\left( x \right) =\frac{1}{\sqrt{2\pi}\sigma}\exp \left( -\frac{\left( x-\mu \right) ^2}{2\sig...
异常检测(Anomaly Detection)简介
异常检测顾名思义就是检测出与正常数据不同的数据,检测给定的新数据是否属于这组数据集。 1. 异常检测的任务类型无监督:训练集无标签有监督:训练集的正例和反例均有标签半监督:在训练集中只有正例,异常实例不参与训练 2. 异常检测的难点数据量少:异常检测任务通常情况下负样本(abnormal)较少,0、1两类样本严重不均衡,有时候依赖于人工标签。噪音:异常和噪音有时容易混淆,如两幅图中的A点识别难度就不一样。 3. 异常检测方法简介3.1 基于统计学的方法通常做法是假设样本服从高斯分布,计算p(x)=ϵ作为判定正常和异常的阈值。 3.2 线性模型在线性模型中,有2个假设:①不同维度的变量近似线性相关,可以通过一个相关系数矩阵进行衡量。②数据是镶嵌在低维子空间中的,线性建模是为了找到某个低维子空间使异常点区别于正常点。常用模型的包括:最小二乘法——最小化目标函数得到直线方程,计算每个变量与回归方程之间的残差,可通过3σ 法则判断异常值.PCA——将样本的协方差矩阵特征值分解后,特征值是样本投影到轴上对应的方差,特征值越小,投影后样本点分布越集中,异常点容易偏离,以此作为判定异...
特征工程_1
特征工程就是将原始数据空间变换到新的特征空间,在新的特征空间中,模型能够更好地学习数据中的规律。特征的选择和构造,就是人为地帮助模型学习到原本很难学好的东西,从而使模型达到更好的效果。 1. 根据现实情况构造特征1.1 各点与特定点的距离 1 2 3 4 5 df['x_dis'] = (df['x'] - 6165599).abs() df['y_dis'] = (df['y'] - 5202660).abs() df['base_dis] = (df['y_dis']**2))**0.5 + ((df['x_dis']**2) del df['x_dis'],df['y_dis'] df['base_dis_diff'].head() 1.2 将时间划分为白天与黑夜 1 2 3 df['day_night'] = 0 df.loc[(df['hour'] >...
地理空间数据EDA数据探索性分析
EDA——数据探索性分析,是通过了解数据集的基本情况、变量间的相互关系以及变量与预测值之间的关系,为后期特征工程和建立模型做铺垫。本文以智慧海洋建设竞赛为例进行演示。 1. 总体了解数据1.1 查看样本个数和原始特征维度 1 data_train.shape 1 data_test.shape 1 data_train.columns #查看列名 1 2 3 pd.set_option('display.max_info_rows',2699639) #提高非缺失值检查的行数上线 #pd.options.display.max_info_rows = 2699639 data_train.info() 1 2 #查看count 非空值数、std 标准差、(25%、50%、75%)分位数等基本情况 data_train.describe([0.01,0.025,0.05,0.5,0.75,0.9,0.99]) 1.2 查看缺失值和唯一值等 1 data_...