我想知道是否有人可以指向某个特征向量中心伪代码或算法(用于社交网络分析)的方向。我已经在Wikipedia和Google上搜索了一些信息,但我找不到任何关于广义算法或伪代码的描述。
谢谢!
答案 0 :(得分:8)
图G中顶点v的特征向量中心似乎是G的邻接矩阵A的主要特征向量的第v个条目,该特征向量由该特征向量的条目之和进行缩放。
power iteration,从任何严格正向量开始,将倾向于A的主要特征向量。
请注意,power iteration需要做的唯一操作是将A重复乘以一个向量。这很容易做到; Av的第i个条目只是对应于顶点i所连接的顶点j的v的条目之和。
功率迭代的收敛速度在最大特征值与绝对值为第二大的特征值之比是线性的。也就是说,如果最大特征值是λ max 并且第二大绝对值特征值是lambda 2 ,则特征值估计中的误差会减小因子λ max / | lambda 2 |。
实践中出现的图形(例如社交网络图形)通常在lambda max 和lambda 2 之间存在较大差距,因此功率迭代通常会快速收敛;在几十次迭代中并且几乎不考虑起点,你将得到一个特征值估计值在10 -9 之内。
所以,考虑到这个理论,这里有一些假代码:
Let v = [1, 1, 1, 1, ... 1].
Repeat 100 times {
Let w = [0, 0, 0, 0, ... 0].
For each person i in the social network
For each friend j of i
Set w[j] = w[j] + v[i].
Set v = w.
}
Let S be the sum of the entries of v.
Divide each entry of v by S.
答案 1 :(得分:0)
我对此一无所知。这是我在课堂上学到的伪代码。
input: a diagonalizable matrix A
output: a scalar number h, which is the greatest(in absolute value) eigenvalue of A, and a nonzero vector v, the corresponding eigenvector of h, such that Av=hv
begin
initialization: initialize a vector b0, which may be an approximation to the dominant eigenvector or a random vector, and let k=0
while k is smaller than the maximum iteration
calculate bk+1 = A*bk/(|A*bk|)
set k=k+1
end