论文阅读笔记之AGE:由图信号引发的一系列问题

导航栏
什么是图信号——>什么是节点——>什么是节点维度——>什么是shape——>list、Array、Series——>降维——>方差公式中为什么除数是(n-1)

一、什么是图信号

问题来源:https://blog.csdn.net/qq_44015059/article/details/114977767)
在这里插入图片描述

图信号(Graph signal)

图信号x:V➡R是一个定义于图顶点集的映射。我们也可以将其表示为一个向量 x ∈ R n x∈R^{n} xRn ,其中 x i x_i xi表示第i个顶点的信号值。

邻接矩阵、度矩阵、拉普拉斯矩阵这三种矩阵表述根据不同的需要,可以十分有力的表达图的结构。但表达的也仅仅是图的结构,就好比是设计好了一栋连接错综复杂的大楼,每一个节点还等着我们去赋值。给定任意一个无向图的邻接矩阵A,假定节点数为N,则任意的长度为N的信号都可以作为这个无向图的图信号,其各个位置的值代表对应节点的值。
在这里插入图片描述
关于图信号的原文链接:
(1)https://zhuanlan.zhihu.com/p/415756783
(2)https://blog.csdn.net/m0_38002423/article/details/90758200

二、什么是节点

问题来源:https://blog.csdn.net/m0_38002423/article/details/90758200
在这里插入图片描述
如下图,图中圆圆的点就是节点。
在这里插入图片描述
参考链接:
(1)https://blog.csdn.net/weixin_41929524/article/details/121736848
(2)https://blog.csdn.net/weixin_41929524/article/details/121198344

三、什么是节点维度

问题来源:https://blog.csdn.net/m0_38002423/article/details/90758200
在这里插入图片描述

1. 对于数组和Series来说

对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维。索引以外的数据,不分行列的叫一维(此时shape返回唯一的维度上的数据个数),有行列之分叫二维(shape返回行x列),也称为表。一张表最多二维,复数的表构成了更高的维度。当一个数组中存在2张3行4列的表时,shape返回的是(更高维,行,列)。当数组中存在2组2张3行4列的表时,数据就是4维,shape返回(2,2,3,4)。
在这里插入图片描述
数组中的每一张表,都可以是一个特征矩阵或一个DataFrame,这些结构永远只有一张表,所以一定有行列,其中行是样本,列是特征。针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数量。除了索引之外,一个特征是一维,两个特征是二维,n个特征是n维。
在这里插入图片描述

2. 对于图像来说

对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴,一个特征向量定义一条直线,是一维,两个相互垂直的特征向量定义一个平面,即一个直角坐标系,就是二维,三个相互垂直的特征向量定义一个空间,即一个立体直角坐标系,就是三维。三个以上的特征向量相互垂直,定义人眼无法看见,也无法想象的高维空间。
在这里插入图片描述

3. 降维算法中的“降维”

降维算法中的”降维“,指的是降低特征矩阵中特征的数量。上周的课中我们说过,降维的目的是为了让算法运算更快,效果更好,但其实还有另一种需求:数据可视化。从上面的图我们其实可以看得出,图像和特征矩阵的维度是可以相互对应的,即一个特征对应一个特征向量,对应一条坐标轴。所以,三维及以下的特征矩阵,是可以被可视化的,这可以帮助我们很快地理解数据的分布,而三维以上特征矩阵的则不能被可视化,数据的性质也就比较难理解。

4.总结

(1)对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维。
(2)针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数
量。
(3)对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴。

参考链接:
(1)https://zhuanlan.zhihu.com/p/59357783
(2)https://blog.csdn.net/weixin_44376037/article/details/122245411

四、什么是shape

问题来源:https://zhuanlan.zhihu.com/p/59357783
在这里插入图片描述

1.Python里对于shape()的理解

学习相关代码的时候,很容易出现shape()这样形式的东西,用来告知输出数据的形式,由于shape()里出现的数字数量不同,还经常有shape(?,64,512)这样的数据存在,因此上网查了一些信息,作出比较通俗易懂的解释:

import numpy as np
a = np.array([[[1,2,3],[4,5,6]]])
print(a.shape)
(1, 2, 3)

表示该数组有1个,是2行3列的数组。每一个shape里的数字对应数组中的一对中括号,第一个数字1表示最外层的中括号。以此类推,数字2表示第二层中括号,数字3表示最里层的中括号。如果定义array时去掉了最外层的括号那么输出的shape为(2, 3)。

2.区分一维数组和二维数组

有几层中括号就为几维数组,即shape后的结果中就有几个数。
因此在上文中,有三对中括号,是3维数组,shape()中有3个数。

a = np.array([1,2])     #a.shape值(2,),意思是一维数组,数组中有2个元素。
b = np.array([[1],[2]]) #b.shape值是(2,1),意思是一个二维数组,每行有1个元素。
c = np.array([[1,2]])   #c.shape值是(1,2),意思是一个二维数组,每行有2个元素。

3.shape()中“?”的含义

而在debug相关程序时,可能会出现shape(?,2,3)这便代表数组每一个都是2行3列的,前面这个“?”便代表批处理个数,若为1则有1个,为2则有两个,但是在debug的时候不知道有几个,所以以“?”的形式显示。

4.shape()中有四个数,第一个数表示时间序列(批处理数)

from keras.models import Input,Model
from keras.layers import Dense,Conv2D,TimeDistributed

input_ = Input(shape=(12,32,32,3))
out = TimeDistributed(Conv2D(filters=32,kernel_size=(3,3),padding='same'))(input_)
model = Model(inputs=input_,outputs=out)
model.summary()

而这里,shape()中有四个数。第一个12代表就是时间序列,32,32,3指的是高,宽,通道数。卷积操作使用TimeDistributed就相当与这12个时间序列共享一个卷积层参数信息,无论时间序列值为多少,参数总量还是一定的。此处一共有896个参数,卷积核weights有3×3×3×32=864个,卷积核bias有32个。
参考链接:
https://blog.csdn.net/elephant_my/article/details/115622680

五、list、Array、Series

问题来源:https://zhuanlan.zhihu.com/p/59357783
在这里插入图片描述

(1)Python中的list是列表,是Python中一种最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。可以使用下标、切片来获取元素。

(2)Ndarray是Python中第三方模块Numpy的主要数据类型,是一种内存连续的、存储单一数据类型的、多维数组对象,也可以用下标、切片来获取元素。主要和List的区别在于内存连续、存储类型单一,运算效率比List快的多。

(3)Series是Python中第三方模块Pandas中的用来存储一维结构的数据类型,Series和一维的ndarray主要区别在于,Series存在行索引,也可以通过下标、切片来获取元素。
参考链接:
http://www.shouhuola.com/q-6104.html

六、降维

问题来源:https://zhuanlan.zhihu.com/p/59357783
在这里插入图片描述

1.机器学习sklearn-PCA降维算法

在降维过程中,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响。同时,在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或者有一些特征带有的信息和其他一些特征是重复的(比如一些特征可能会线性相关)。我们希望能够找出一种办法来帮助我们衡量特征上所带的信息量,让我们在降维的过程中,能够即减少特征的数量,又保留大部分有效信息——将那些带有重复信息的特征合并,并删除那些带无效信息的特征等等——逐渐创造出能够代表原特征矩阵大部分信息的,特征更少的,新特征矩阵。

特征工程中有一种重要的特征选择方法:方差过滤。如果一个特征的方差很小,则意味着这个特征上很可能有大量取值都相同(比如90%都是1,只有10%是0,甚至100%是1),那这一个特征的取值对样本而言就没有区分度,这种特征就不带有有效信息。从方差的这种应用就可以推断出,如果一个特征的方差很大,则说明这个特征上带有大量的信息。因此,在降维中,PCA使用的信息量衡量指标,就是样本方差,又称可解释性方差,方差越大,特征所带的信息量越多。
                                                在这里插入图片描述
Var代表一个特征的方差,n代表样本量, x i x_i xi代表一个特征中的每个样本取值, x ^ \hat{x} x^代表这一列样本的均值。(方差计算公式中为什么除数是n-1? 这是为了得到样本方差的无偏估计)

2. 降维究竟是怎样实现?

PCA作为矩阵分解算法的核心算法,其实没有太多参数,但不幸的是每个参数的意义和运用都很难,因为几乎每个参数都涉及到高深的数学原理。为了参数的运用和意义变得明朗,我们来看一组简单的二维数据的降维。
在这里插入图片描述
我们现在有一组简单的数据,有特征 x 1 x_1 x1 x 2 x_2 x2,三个样本数据的坐标点分别为(1,1),(2,2),(3,3)。我们可以让 x 1 x_1 x1 x 2 x_2 x2分别作为两个特征向量,很轻松地用一个二维平面来描述这组数据。这组数据现在每个特征的均值都为2,方差则等于:
                         在这里插入图片描述
每个特征的数据一模一样,因此方差也都为1,数据的方差总和是2。

现在我们的目标是:只用一个特征向量来描述这组数据,即将二维数据降为一维数据,并且尽可能地保留信息量,即让数据的总方差尽量靠近2。于是,我们将原本的直角坐标系逆时针旋转45°,形成了新的特征向量 x 1 ∗ x_1^* x1 x 2 ∗ x_2^* x2组成的新平面,在这个新平面中,三个样本数据的坐标点可以表示为 ( 2 , 0 ) (\sqrt{2},0) (2 ,0) ( 2 2 , 0 ) (2\sqrt{2},0) (22 ,0) ( 3 2 , 0 ) (3\sqrt{2},0) (32 ,0)。可以注意到, x 2 ∗ x_2^* x2上的数值此时都变成了0,因此 x 2 ∗ x_2^* x2明显不带有任何有效信息了(此时 x 2 ∗ x_2^* x2的方差也为0了)。此时, x 1 ∗ x_1^* x1特征上的数据均值是 2 2 2\sqrt{2} 22 ,而方差则可表示成:
                     在这里插入图片描述
x 2 ∗ x_2^* x2上的数据均值为0,方差也为0。

此时,我们根据信息含量的排序,取信息含量最大的一个特征,因为我们想要的是一维数据。所以我们可以将 x 2 ∗ x_2^* x2删除,同时也删除图中的 x 2 ∗ x_2^* x2特征向量,剩下的 x 1 ∗ x_1^* x1就代表了曾经需要两个特征来代表的三个样本点。通过旋转原有特征向量组成的坐标轴来找到新特征向量和新坐标平面,我们将三个样本点的信息压缩到了一条直线上,实现了二维变一维,并且尽量保留原始数据的信息。一个成功的降维,就实现了。
在这里插入图片描述
降维过程中,有几个重要的步骤:
在这里插入图片描述
在步骤3当中,我们用来找出n个新特征向量,让数据能够被压缩到少数特征上并且总信息量不损失太多的技术就是矩阵分解。PCA和SVD是两种不同的降维算法,但他们都遵从上面的过程来实现降维,只是两种算法中矩阵分解的方法不同,信息量的衡量指标不同罢了。PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V。降维时,它会通过一系列数学的神秘操作(比如说,产生协方差矩阵 1 n X X T \frac{1}{n}XX^{T} n1XXT)将特征矩阵X分解为以下三个矩阵,其中 Q Q Q Q − 1 Q^{-1} Q1是辅助的矩阵,Σ是一个对角矩阵(即除了对角线上有值,其他位置都是0的矩阵),其对角线上的元素就是方差。降维完成之后,PCA找到的每个新特征向量就叫做“主成分”,而被丢弃的特征向量被认为信息量很少,这些信息很可能就是噪音。
                                              在这里插入图片描述
而SVD使用奇异值分解来找出空间V,其中Σ也是一个对角矩阵,不过它对角线上的元素是奇异值,这也是SVD中用来衡量特征上的信息量的指标。U和 V T V^{T} VT分别是左奇异矩阵和右奇异矩阵,也都是辅助矩阵。
                                                      在这里插入图片描述
在数学原理中,无论是PCA和SVD都需要遍历所有的特征和样本来计算信息量指标。并且在矩阵分解的过程之中,会产生比原来的特征矩阵更大的矩阵,比如原数据的结构是(m,n),在矩阵分解中为了找出最佳新特征空间V,可能需要产生(n,n),(m,m)大小的矩阵,还需要产生协方差矩阵去计算更多的信息。而现在无论是Python还是R,或者其他的任何语言,在大型矩阵运算上都不是特别擅长,无论代码如何简化,我们不可避免地要等待计算机去完成这个非常庞大的数学计算过程。因此,降维算法的计算量很大,运行比较缓慢,但无论如何,它们的功能无可替代,它们依然是机器学习领域的宠儿。

参考链接:
(1)https://baijiahao.baidu.com/s?id=1628322248948265740&wfr=spider&for=pc
(2)https://blog.csdn.net/weixin_44376037/article/details/122245411

七、方差公式中为什么除数是(n-1)

问题来源:https://blog.csdn.net/weixin_44376037/article/details/122245411
                                      在这里插入图片描述
参考链接:https://blog.csdn.net/m0_50572604/article/details/120990517