SCAN:一种基于密度的社团发现算法
来源:互联网 发布:windows访问控制策略 编辑:程序博客网 时间:2024/05/01 21:23
Paper: 《SCAN: A Structural Clustering Algorithm for Networks》
Auther: Xiaowei Xu, Nurcan Yuruk, Zhidan Feng, Thomas A. J. Schweiger
Conference: SIGKDD 2007
一:SCAN算法简介
SCAN算法是由机器学习里的基于密度的聚类算法DBSCAN改进而来的一种非重叠社团发现算法,具有线性时间复杂度。其一大亮点在于能发现社团中桥节点(hub)和离群点(outlier)。
主要思想在于,在考虑两点之间的关系的时候,不仅考虑它们的直接链接,而是利用它们的邻居节点来作为聚类的标准。也就是说,节点根据它们共享邻居方式而聚类。
由图可知,节点0、5共享了4个节点,节点9、13只共享了2个节点,显然它们在聚类是应采取不同的聚类方式。
二、主要概念介绍
1. 节点相似度
节点相似度定义为两个节点共同邻居的数目与两个节点邻居数目的几何平均数的比值(这里的邻居均包含节点自身)。
其中
2. ϵ - 邻居
节点的
3. 核节点
核节点是指
4. 直接可达
节点
5. 可达
节点
6. 相连
若核节点u可达节点v和节点w,则称节点v和节点w相连.
7.相连聚类
如果一个非空子图C中的所有节点是相连的,并且C是满足可达的最大子图,那么称C是一个相连聚类。
8. 桥节点(hub)
与至少两个聚类相邻的孤立节点.
9. 离群点(outlier)
只与一个聚类相邻或不与任何聚类相邻的孤立节点.
10. 引理:
如果
11. 引理:
三、具体算法
1、对于每个未分配社团的节点
2、若
3、最后检查所有的non-menber节点,若其相邻节点存在于两个及以上的社团中,则将其标为hub节点,否则标为outlier。
ALGORITHM SCAN(G=<V, E>, ε, μ)// all vertices in V are labeled as unclassified;for each unclassified vertex v ∈ V do// STEP 1. check whether v is a core; if COREε,μ(v) then// STEP 2.1. if v is a core, a new cluster is expanded; generate new clusterID; insert all x ∈ Nε (v) into queue Q; while Q ≠ 0 do y = first vertex in Q; R = {x ∈ V | DirREACHε,μ(y, x)}; for each x ∈ R do if x is unclassified or non-member then assign current clusterID to x; if x is unclassified then insert x into queue Q; remove y from Q; else// STEP 2.2. if v is not a core, it is labeled as non-member label v as non-member;end for.// STEP 3. further classifies non-membersfor each non-member vertex v do if (∃ x, y ∈ Γ(v) ( x.clusterID ≠ y.clusterID) then label v as hub else label v as outlier;end for.end SCAN.
- SCAN:一种基于密度的社团发现算法
- 社团发现算法
- 社团发现算法综述
- 基于GN算法的网络通联关系社团发现(Python)
- 基于密度的算法DBscan
- 社团发现算法分类及简介
- 基于随机游走的社团划分算法hadoop MR实现
- k-means中基于密度的k值发现。
- 基于密度的聚类算法
- DBSCAN - 基于密度的聚类算法
- 基于密度聚类算法的改进
- 基于密度的optics聚类分析算法
- DBSCAN基于密度的聚类算法
- 基于密度的聚类算法
- Louvain 社团发现算法学习(我的java实现+数据用例)
- 社团发现算法研究和在SNS网络中的应用
- 开源复杂网络分析软件中社团发现算法总结
- 利用spark进行层次社团发现(louvain算法测试)
- Mac/Linux --管理与维护
- CI面向对象的加强利用
- memcpy实例(一)
- android Date 和 Calendar
- 谈谈什么情况下会导致内存泄露
- SCAN:一种基于密度的社团发现算法
- 栈溢出笔记1.4 黑掉example_2
- MySQL 锁的深入了解
- Java中equals和==的区别
- 深入浅出RxJava四-在Android中使用响应式编程
- 蓝桥杯3
- 解决thinkphp设置session周期无效的问题
- Arrays类
- 生产者消费者模型