幂迭代法应用:pivotMDS--大图数据的稀疏化布局

论文解读

首先pivotMDS是通过p个锚点,做p次单源最短路,得到一个n*p的\(d_{ij}\)矩阵。通过这样一个n*p\(d_{ij}\)计算得到一个C矩阵,\(C \in R^{n\times k}\)。
C矩阵计算方式:
\[
\begin{equation}
C_{ij} = -\frac{1}{2} (\delta_{ij}^2 - \frac{1}{n} \sum_{r=1}^{n}\delta_{rj}^2 - \frac{1}{k} \sum_{s=1}^{k}\delta_{is}^2 + \frac{1}{nk} \sum_{r=1}^{n}\sum_{s=1}^{k}\delta_{rs}^2)
\end{equation}
\]
\[
B = C^TC
\]
\[
v_1 = poweriteration(B)_{max}
\]
\[
v_2 = poweriteration(B)_{sec}
\]
\[
x = Cv_1, y=Cv_2
\]
其中poweriteration由上一节幂迭代法求特征值的方法求得最大和次大特征向量。

代码

读取图数据

#
def readGraph(graph_name,fmt):
    if 'mat' in fmt:
        mat_data = io.loadmat(graph_name + '.mat')
        graph = mat_data['Problem']['A'][0][0]
        return graph
    elif 'txt' in fmt or 'csv' in fmt:
        df = pd.read_csv(graph_name + '.txt',sep=' ',names=["src","tgt"])
#         df["data"] = np.ones_like(df["src"].values)
        row = df["src"].values
        col = df["tgt"].values
        data = np.ones_like(row)
        graph = csc_matrix((data, (row, col)), shape=(max(row.max(),col.max()) + 1, max(row.max(),col.max()) + 1))
        return graph
    else:
        print("error:not supported format.")
        return None
graph_name = '../data/bus1138'
graph = readGraph(graph_name,'txt')

数据可以从tamu稀疏矩阵数据库,其中mat文件为matlab格式文件,txt为空格分隔的文本文件,共两列,分别表示连接一条边的两个点。

计算C矩阵和B矩阵(C^TC)

pivot_Point = np.random.randint(graph.shape[0],size = NP)
d = csgraph.shortest_path(graph, directed=False, unweighted=True,indices=pivot_Point)
d[np.isinf(d)] = 0
(k,n) = d.shape
d2  = d**2
deltaIS = d2.sum(axis=0)/k
deltaRJ = d2.sum(axis=1)/n
sumALL = d2.sum()/(n*k)
C = np.zeros((n,NP),dtype=np.float64)

@jit(nopython=True)
def getC(C):
    for i in range(n):
        for j in range(k):
            C[i][j] = -1.0/2 * (d[j][i]**2 - deltaRJ[j] - deltaIS[i] + sumALL)
    return C
C = getC(C)
B = np.dot(C.T,C)

幂迭代法

def power_iteration(A, num_simulations: int):
    b_k = np.random.rand(A.shape[1])

    for _ in range(num_simulations):
        b_k1 = np.dot(A, b_k)
        b_k1_norm = np.linalg.norm(b_k1)
        b_k = b_k1 / b_k1_norm

    return b_k

V_1 = power_iteration(B, 100).reshape(1,-1)
lbd  = np.dot(V_1,np.dot(B,V_1.T))
B_2 = B - lbd / np.linalg.norm(V_1)**2 * np.dot(V_1.T,V_1)
V_2 = power_iteration(B_2, 100)

结果

pos = np.zeros((n,2))
pos[:,0] = np.dot(C,V_1.reshape(-1,1)).reshape(-1)
pos[:,1] = np.dot(C,V_2.reshape(-1,1)).reshape(-1)

X = pos.copy()
plt.figure(figsize=(32,32))
plt.axis('equal')
ax = plt.axes()
ax.set_xlim(min(X[:,0])-10, max(X[:,0])+10)
ax.set_ylim(min(X[:,1])-10, max(X[:,1])+10)
# ax.plot(X[:,0],X[:,1],'*',color='b',markersize=0.4)
lines = []
for i,j in zip(*graph.nonzero()):
    lines.append([X[i], X[j]])

lc = mc.LineCollection(lines, linewidths=.3, colors='#0000007f')
ax.add_collection(lc)
plt.savefig('../result/' + graph_name + '.pdf', dpi=1000)
plt.show()

最终效果如下:


欢迎访问个人博客。转载请注明出处。

原文地址:https://www.cnblogs.com/fahaizhong/p/12254094.html

时间: 2024-10-30 20:17:21

幂迭代法应用:pivotMDS--大图数据的稀疏化布局的相关文章

幂迭代法求特征值和特征向量

幂迭代法求第k大的特征值和特征向量 数学表述 设矩阵A \[ A = \left[ \begin{matrix} X_{11}&\ldots&X_{1n} \newline X_{21} & \ldots& X_{2n} \newline &\vdots& \newline X_{n1}&\ldots &X_{nn} \newline \end{matrix} \right] \] 求其最大特征值对应的特征向量\(b_k = [v_1,v_2

如何运用CRM系统数据进行标签化精准营销?

相信大家都了解过大数据,也学过一些大数据分析方法.但是我们如何利用大数据分析,创造价值呢? 今天智云通CRM系统小编要跟大家分享如何运用CRM系统数据进行标签化精准营销. 这个问题从本质上看是两类问题: 对用户画像,打上标签.这是个聚类问题,将同一类用户通过算法聚合成一类. 那如何打标签呢?用户画像数据维度 针对每一类数据实体,进一步分解可落地的数据维度,形成字段集. 1. 用户数据: 用户自然特征:性别,年龄,地域,教育水平,出生日期,职业,星座 用户兴趣特征:兴趣爱好,使用APP/网站,浏览

记一次企业级爬虫系统升级改造(三):文本分析与数据建模规则化处理

SupportYun当前状况: 博主的SupportYun系统基本已经完成第一阶段预期的底层服务开发啦~~~自己小嘚瑟一下. 有对该系统历史背景与功能等不明白的可先看该系列的第1/2篇文章: 1.记一次企业级爬虫系统升级改造(一) 2.记一次企业级爬虫系统升级改造(二):基于AngleSharp实现的抓取服务 再贴一次博主对这个系统的简要整体规划图: 博主第一阶段主要会做独立的爬虫服务+数据规则化引擎以及内容归类处理这一块. 再简单粗暴一点就是把大量类似下图的网页抓取,然后分析数据,得到活动城市

用迭代法 解析 json 格式 数据

首先把我遇到的需要解析的json数据  结构  给大家粘贴出来: { "tradelist": {"2015年08月": [{"type":"用户充值","createdatetime":"2015-08-03 16:08:59","changemoney":9999.99}] } }这就是需要解析的数据结构. 解析方法  我也不多说什么啦!直接给打击贴代码: JSO

数据的缓存化、消息化

IT的核心是数据,以及数据的流动. 回顾一下计算机技术的整体发展历史,随着硬件技术的不断升级,IT软件技术也在不断升级.反过来IT软件的需求也促使并推动硬件技术的升级. 1946 年:ENIAC(Electronic Numerical Integrator And Computer)诞生 ,这是第一台真正 意义上的数字电子计算机.这个时代典型的模式是集中式处理.但是因为硬件成本很高,只能用于军工等核心高端信息处理行业. PC 机的诞生,信息处理分布化,但是信息间的流通性很差.信息处理模式为典型

柏林森:购物中心需要大数据,场景化营销是着力点

购物中心精细化运营势在必行 虽然线上零售对线下零售造成很大的冲击,但在零售总额实际比例中,线下零售占比高达90%,而线上零售只占10%.展望未来,线下零售依然会占零售的重要地位,因为我们每个人都会有一个物理的身体,物理便利性和物理体验性这两个支撑点足以支撑线下零售长远发展.物里体验即我们身体体验,对吃喝玩乐.生活娱乐服务我们都需要我们物理的身体去体验,而这些服务在线上我们是无法切身体验到的.这种纯体验的零售业态典型代表就是购物中心,它将越来越往全体验式发展. 越来越多的报告证明,消费者逐渐回归线

非结构化数据与结构化数据提取----XPath与lxml类库

什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要我们自行定义. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 W3School官方文档:http://www.w3school.com.cn/xml/index.asp XML 和 HTML 的区别 数据格式 描述 设计目标 XML Extensible Markup Langu

统计检验:为了使检验数据正态化,对granger指数 先开平方根 然后双样本T检验

实验组内 明显变化的边是  LBG-LPPC 可以这样解释吗:  基底神经节负责增强学习:基底神经节通过增加与皮层连接强度,负责增强学习 问题:与global network连接方向相反 但是文献中也提到不同任务  NETWORK是不同的 我觉得与global network连接方向相反 不是问题,老师觉得呢? 控制组内存在多条明显变化的边  :编号1和3 是小脑与大脑皮层之间的连接   方向相反 变化值一个变大一个变小  相互抵消   同理编号  4和5相互抵消 控制组内 明显变化的边是  2

高并发系统数据幂等的技术尝试

原文地址:http://iamzhongyong.iteye.com/blog/2218572?utm_source=tuicool&utm_medium=referral 高并发系统数据幂等的技术尝试 前言 在系统开发过程中,经常遇到数据重复插入.重复更新.消息重发发送等等问题,因为应用系统的复杂逻辑以及网络交互存在的不确定性,会导致这一重复现象,但是有些逻辑是需要有幂等特性的,否则造成的后果会比较严重,例如订单重复创建,这时候带来的问题可是非同一般啊. 什么是系统的幂等性 幂等是数据中得一个