Contents
- Network Community
- Modularity
- Overlapping Community
3강에서는 Roles
에 대해 배우고, 이번 4강에서는 Community
에 대해 배운다 ~
Community
: set of tightly connected nodes,
서로간에 밀접하게 (densely) 뭉쳐져 있는 노드의 집합 (cluster)
흥미로운 사실 🧐 사람들이 new job을 찾을 때, close friend 보다 very rarely meet 하는 acquiantances 들에게서 더 많은 정보를 얻는다고 한다
왜냐면, friendship
에는 두 가지 관점이 있는데,
1. structural
: friendship이 network의 어떤 부분을 연결하는지 체크하고
2. interpersonal
: friendship이 strong 할 수도 있고 weak 할 수도 있다
structural
information
S | W | |
---|---|---|
Structure | Socially Strong | Socially Weak |
Information | Redundant | Useful |
그래서 A를 통해 건너 건너 관계인 B C 가 더 job을 얻기 좋은 관계라고 말 함.. 그래서 nurture your weak ties 라고 하심 ㅋㅋㅋㅋㅋ (약간 어이없구 모르겟음 내가 이해를 제대로 한 게 맞나 ~?)
친구들끼리 얼마나 겹쳐 있는지를 체크하는 수식!
초록색 선분으로 연결된 두 점에 대해서, 파랑과 빨강이 동시에 갖고 있는 노드
Edge Removal by Strength, Link Removal by Overlap 모두 Low to High로 끊는 것이 cluster 끼리 더 빨리 떨어진다고 한다 ~
그래서 위와 같은 input
이 들어오게 되면
output
은 이런식으로 나온다 ~
Modularity Q
: network가 community로 얼마나 잘 나누어졌는가 (partitioning) 에 대한 수치
Q = community s의 edge 수 - community s의 edge 기댓값
이 수치가 클수록 (edge 수 차이가 클수록) 우리는 매우 strong group이라고 할 수 있다
기댓값을 구하기 위해서는, null model 을 알아야 함 ~
n개의 node와 m개의 edge가 있는 그래프 G 에서, edge를 rewire 해서 random graph인 G' network
를 만든다 ~
이 때 node i와 j 사이를 연결하는 edge의 기댓값 =
는 2m개의 node 중에서, target node () 와 연결될 확률을 의미!
(2m인 이유 = every node counted twice)
아래의 식은 위의 기댓값에 대한 식이 맞다는 것을 증명 ~
💡 결론 : we can identify communities by maximizing modularity
modularity를 maximize 하는 것이 목적!
hierarchy로 community를 찾는다
greedy algorithm 이며 heuristic algorithm 임... ㅎㅎ
시간복잡도는 + n은 # of nodes in the network!
PROCESS
1. 가장 조그만 원끼리 묶고 (123)
2. 그 다음에 큰 원 묶고 (1-7)
3. entire community 묶는다 (1-14)
dendrogram 을 사용해서 hierarchy를 찾는다 ~
매우 빠르고, 수렴도 빠르고, 결과물도 좋다고 (high modularity output) 한다
Phase1
: Modularity Optimization
Phase2
: Community Aggregation
이런식으로 를 계산한다구 함 ...
(빨간색 i = interest)
알고리즘으로 표현하면 위와 같다 ~
살다보면 마니 마니 겹치게 됨 ~
인접행렬에서도 이를 확인할 수 있음!
그래서 이런 겹치는 community 들을 어떻게 표현하는가 ...
Step1
: AGM 정의
Step2
: AGM으로 그래프 G가 generate 되었다고 가정하고, G가 최적 parameter를 가지고 있는 그래프가 되는 AGM을 찾는다 → 그리고 이를 통해 community를 찾는다!
(MLE 찾는 과정이랑 비슷하다고 이해함 ..)
왼쪽의 그림은 Bipartite Graph!
주어진 graph (오른쪽) 에서 model F (왼쪽) 어떻게 찾을까 ~?
P(G|F) : F가 주어졌을 때 G가 나올 확률
확률 정의를 위해 exponential 함수 등장하는데, 이는 NLP glove embedding 에서 나온 homomorphism 개념을 차용한 것 ~ (괜시리 반가워씀..😇)
input
= 두 단어벡터의 내적이 말뭉치에서의 output
= 동시 등장확률 로그값 이 되도록 목적함수를 정의 그래서 위의 파란 식을 위의 P(G|F)에 넣고 log를 취해 log-likelihood 형태로 만들면,
이렇게 되고, log-likelihood
값을 최대로 만드는 F를 찾으면 된다 ~