矩阵常用归一化

  这属于基础知识,老师应该讲的,可是;老师没讲.....在这个实验室,一师姐老师只要不在考试购物唱歌,完全无视其他人存在,给各个单身小学弟卖钱包,手表.......真是够了,精神污染....

一.最小最大归一化

  和区间映射(我理解的是把一个区间[a,b]映射到[c,d],c+(x-a)*(d-c)/(b-a),没查,应该是这样,主要要理解的问题是两段距离映射的话要除以比例因子(d-c)/(b-a),自己理解的,这样就可以把数据映射到[-1,1])不一样,这是映射到[0,1],就是x' = (x-min)/(max-min),其中max和min分别是是x序列的最大、小值,并不是0和1。

  这种方法的缺点是,如何加入新数据的话min和max可能变化。

二.Z-Score标准化方法

  这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化(x-u)/std。经过处理的数据符合标准正态分布,即均值为0,标准差为1。

三.L2标准化

 

  由此,我们可以很块的写出最简单的matlab源代码如下:首先按行归一化:

% Examples
A=[3 4;5 12];
[m n] = size(A);
% normalize each row to unit
for i = 1:m
    A(i,:)=A(i,:)/norm(A(i,:));
end

  按列归一化。

% normalize each column to unit
A=[3 4;5 12];
for i = 1:n
    A(:,i)=A(:,i)/norm(A(:,i));
end


  然而,上述代码最能实现功能,但并不是最优的,它只是一种对该过程的最佳理解代码。在Matlab中,for循环是一件非常费时间的结构,因此我们在代码中应该尽量少用for循环。由此,我们可以用repmat命令得到另一种更加简洁更加快速的代码,只是这种代码对于初学者理解起来比较费劲。可以看做是自己水平的一种进阶吧。

%  normalize each row to unit
A = A./repmat(sqrt(sum(A.^2,2)),1,size(A,2));
%  normalize each column to unit
A = A./repmat(sqrt(sum(A.^2,1)),size(A,1),1);

  参考:http://blog.sciencenet.cn/blog-810210-655011.html

  http://www.newsmth.net/nForum/#!article/NumComp/108647

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对称归一化是一种常用的邻接矩阵归一化方法,它可以用于图卷积网络(GCN)等图神经网络模型中。下面是对称归一化的解释、代码和实现方法: 1. 对称归一化的意义: 对称归一化的目的是将邻接矩阵中的每个元素除以其所在行和的度数之和的平方根。这样做的好处是可以保持特征向量的单位长度,避免在图卷积操作中引入不必要的缩放。 2. 代码实现: 假设邻接矩阵为A,对称归一化后的邻接矩阵为D^(-1/2) * A * D^(-1/2),其中D是对角矩阵,其对角线元素为每个节点的度数。 ```python import numpy as np def symmetric_normalize_adjacency(adjacency_matrix): # 计算每个节点的度数 degrees = np.sum(adjacency_matrix, axis=1) # 计算度数的平方根的倒数 degrees_sqrt_inv = np.power(degrees, -0.5) degrees_sqrt_inv[np.isinf(degrees_sqrt_inv)] = 0.0 # 构建对角矩阵 D_sqrt_inv = np.diag(degrees_sqrt_inv) # 对称归一化邻接矩阵 normalized_adjacency_matrix = np.dot(np.dot(D_sqrt_inv, adjacency_matrix), D_sqrt_inv) return normalized_adjacency_matrix ``` 3. 从信息聚合的角度理解GCN的归一化: 对称归一化可以理解为在信息聚合过程中,将每个节点的特征向量与其邻居节点的特征向量进行加权平均,权重由归一化后的邻接矩阵决定。这样可以保持特征向量的单位长度,并且更好地保留了节点之间的关系。 4. 矩阵计算角度(更好理解): 对称归一化可以通过以下三种方式实现: - 图卷积实现一: ```python normalized_adjacency_matrix = np.dot(np.dot(D_sqrt_inv, adjacency_matrix), D_sqrt_inv) ``` - 图卷积实现二: ```python normalized_adjacency_matrix = np.dot(np.dot(D_sqrt_inv, adjacency_matrix), D_sqrt_inv.T) ``` - 图卷积实现三: ```python normalized_adjacency_matrix = np.dot(np.dot(D_sqrt_inv.T, adjacency_matrix), D_sqrt_inv) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值