社交网络分析之网络分解(小世界划分)
2014-11-03 22:42
134 查看
略谈社交网络:
抽屉里有本书《social networks analysis》,平时也没翻,突然老板说,搞一下社交网络分析,于是就上了。一周下来写个小结。由于在网络中找关键点,已经被分析了很多(比如中心性、流中心性等,而且python有个networks的包,总之没什么难度。),我当时的定位是网络分解:把一个大的网络划分为若干个紧密连接的子网络。
数据的准备以及验证:
作为验证算法的有效性来说,我们没有去找一个已经标记过的网络,而是造了一批数据。我们设定A B C三个群体,分别20、20、50人;同类人与人之间 0.2的概率与其他人发生联系,异类人与人之间0.02的概率法身联系。这样一个用于测试的社交网络就够造好了。
分解的思想:
记得之前看一本书上说:信息是来自于网络的外部(原话已经忘了)。对于局部网络来说他有一些桥梁(边)使他与全局相连,那怎么找到这些桥梁呢?我们使用的方法非常简单,让网络中每一个人都从自己的出发点传递一条信息给其他所有人(当然,因为这些人很懒,他们每次都会走最近的路线),然后看看哪条(边)被最多(或者top K)的人使用,那它就是“桥梁”。拆掉一座桥后,再做相同事情时,会有其他边再次充当桥梁角色,一直拆下去,网络就会断开了。有没有感觉太简单了……(后来发现这和一些书上说的“边介数”是一样的)
分解的效果:
网络点数在100个左右时,在同类链接概率大于异类链接概率的 4 倍时,效果已经非常明显了。在相差10倍时,我们做了多次试验,往往只有0~3个元素被分错网络归属。
代码性能:
我自己写的算法复杂度为N的4次方多一些。首先随着网络的元素增加,要切开更多的“桥梁”才能将网络切开,我们构造的数据中这个值接近正比于N的2次方。其次随着网络的元素增加,我们要找到任意两个元素间的最短路线的复杂度与具体实现有关,不过我们的是略高于N的2次方。
实现中我避开了遍历元素,而是采取遍历边的方法,因此对复杂度有所降低,也使原来的深度优先遍历转化为广度优先(深度优先指每次都把一个人所有的最短路线找出来,而广度在这指每次每个人都只走一步;感兴趣的同学可以实现一下)。不过现在其中部分地方使用矩阵记录图,导致很多无效的访问,在后续中会改掉。
总结:
关于性能这块我也有些其他的方法去优化(当然不包括并行、分布式这种野蛮的方法),但是现在没有完全解决。另外看了一下自己之前写的文章,感觉有点贪多,没写明白,希望这次说清楚了。
抽屉里有本书《social networks analysis》,平时也没翻,突然老板说,搞一下社交网络分析,于是就上了。一周下来写个小结。由于在网络中找关键点,已经被分析了很多(比如中心性、流中心性等,而且python有个networks的包,总之没什么难度。),我当时的定位是网络分解:把一个大的网络划分为若干个紧密连接的子网络。
数据的准备以及验证:
作为验证算法的有效性来说,我们没有去找一个已经标记过的网络,而是造了一批数据。我们设定A B C三个群体,分别20、20、50人;同类人与人之间 0.2的概率与其他人发生联系,异类人与人之间0.02的概率法身联系。这样一个用于测试的社交网络就够造好了。
分解的思想:
记得之前看一本书上说:信息是来自于网络的外部(原话已经忘了)。对于局部网络来说他有一些桥梁(边)使他与全局相连,那怎么找到这些桥梁呢?我们使用的方法非常简单,让网络中每一个人都从自己的出发点传递一条信息给其他所有人(当然,因为这些人很懒,他们每次都会走最近的路线),然后看看哪条(边)被最多(或者top K)的人使用,那它就是“桥梁”。拆掉一座桥后,再做相同事情时,会有其他边再次充当桥梁角色,一直拆下去,网络就会断开了。有没有感觉太简单了……(后来发现这和一些书上说的“边介数”是一样的)
分解的效果:
网络点数在100个左右时,在同类链接概率大于异类链接概率的 4 倍时,效果已经非常明显了。在相差10倍时,我们做了多次试验,往往只有0~3个元素被分错网络归属。
代码性能:
我自己写的算法复杂度为N的4次方多一些。首先随着网络的元素增加,要切开更多的“桥梁”才能将网络切开,我们构造的数据中这个值接近正比于N的2次方。其次随着网络的元素增加,我们要找到任意两个元素间的最短路线的复杂度与具体实现有关,不过我们的是略高于N的2次方。
实现中我避开了遍历元素,而是采取遍历边的方法,因此对复杂度有所降低,也使原来的深度优先遍历转化为广度优先(深度优先指每次都把一个人所有的最短路线找出来,而广度在这指每次每个人都只走一步;感兴趣的同学可以实现一下)。不过现在其中部分地方使用矩阵记录图,导致很多无效的访问,在后续中会改掉。
总结:
关于性能这块我也有些其他的方法去优化(当然不包括并行、分布式这种野蛮的方法),但是现在没有完全解决。另外看了一下自己之前写的文章,感觉有点贪多,没写明白,希望这次说清楚了。
相关文章推荐
- 社交网络分析,我们每个人每天都会有的线上生活
- 社交网络分析——SNAP
- 社交网络分析:网络中心性
- 如何使用python进行社交网络分析
- 背景:MIT媒体实验室打造社交网络研究实验室,已获Twitter1000万美元投资 Q&A:Twitter如何解读2016美国总统大选 “Electome”项目通过独有的细节视角图表分析这个全国性大讨
- 简单的社交网络分析(基于R)
- 独家 | 一文读懂社交网络分析-下(应用、前沿、学习资源)
- 关于R语言和社交网络分析的几篇文章
- 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式
- 大数据分析-社交网络分析-图分析-基本概念
- 小世界网络——利用Networkx分析武汉公交网络
- [转] X-RIME: 基于Hadoop的开源大规模社交网络分析工具
- 使用C++ Boost Graph Library 进行社交网络分析入门篇
- 别说我懂社交网络: 关于社交网络分析的一头雾水
- Social Network 社交网络分析
- 基于hadoop的社交网络的分析
- 基于社交网络的情绪化分析III
- ADL:社交网络分析与数据挖掘(DAY2)