[클러스터링 알고리즘] 스펙트럼 클러스터링 스펙트럼 클러스터링

모든 블로그의 모든 모토: 당신은 당신이 생각하는 것보다 더 많은 것을 할 수 있습니다.
https://blog.csdn.net/weixin_39190382?type=blog

0. 서문

스펙트럼 클러스터링 스펙트럼 클러스터링 개요
설명: 아니요

1. 텍스트

1.1 전반적인 이해

Spectral Clustering은 가중 무향 그래프를 둘 이상의 최적 하위 그래프로 나누는 그래프 이론에 기반한 클러스터링 방법입니다. 하위 그래프를 최대한 비슷하게 만들고 하위 그래프 사이의 거리를 최대한 멀리 만듭니다 . 최적이란 최적의 목적 함수가 다르다는 것을 의미합니다. 두 가지 유형이 있습니다.

  • 가장 작은 컷
  • 최고의 절단은
    아래 그림에 나와 있습니다.
    여기에 이미지 설명 삽입

1.1.1 무방향 그래프

아래 그림과 같이 여러 꼭지점모서리 로 구성되어 있으며 모서리에는 방향이 없기 때문에 무방향 그래프라고 합니다. 안에,

점 집합: V = { v 1 , v 2 , . . . , v 3 } V = \{v1,v2,...,v3\}V={ v1 , _v2 , _..... ,v 3 }
에지 집합:E = { e 1 , e 2 , . . . , e 3 } E = \{e1,e2,...,e3\}이자형={ e 1 ,전자 2 ,..... ,전자 3 }

따라서 그래프는 G ( V , E ) G(V,E)( 브이 ,)


가중치 행렬(인접 행렬) WWWW ij W_{ij}이자디스플레이 ii나와 jj_j 사이의 가중치는 무방향 그래프이므로
Wi ij = W ji W_{ij}=W_{ji}이자=
사진 설명을 추가해주세요

1.1.2 차수 및 차수 행렬

데이터 구조에서 정도는 점에 직접 연결된 정점의 수로 정의됩니다.
여기서 정의는 다음과 같습니다.
di = ∑ j = 1n W ij d_i = \sum_{j=1}^{n}W_{ij}=j = 1이자

즉, 행(또는 열)에 대한 가중치의 합입니다.
차수행렬은 다음과 같이 n도로 구성된 대각행렬이다.

[ d 1 0 ⋯ 0 0 d 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ dn ] \begin{bmatrix} {d_{1}}&{0}&{\cdots}&{0}\\ {0}& {d_{2}}&{\cdots}&{0}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {0}&{0}&{\cdots} &{d_{n}}\\ \end{bmatrix} .10002000. .

1.1.3 유사성 매트릭스

참고: 두 점 사이의 거리를 계산하고 점 사이의 관계를 나타내는 인접 행렬을 생성할 수 있습니다(즉, 그래프 라고 함) 여기서 유사성 행렬은 "거리 행렬"(거리에 따라 유사 여부 판단) 일정한 방법(이하 3가지 방법)에 따라 더 "가려
"

위의 가중치 행렬은 임의의 두 지점 사이의 가중치로 구성되며 실제로는 가중치를 직접 얻을 수 없으며 데이터 포인트의 정의만 얻을 수 있으며 일반적으로 가중치는 두 지점 사이의 거리로 계산됩니다 . 거리가 멀고 무게가 높고 거리가 가깝고 무게가 높습니다. 보통 3가지 방법으로

(1). ϵ ϵϵ - 근접 방법(덜 사용됨)

임계값 설정 ϵ ϵϵ , 두 점 사이의 유클리드 거리를 계산하고 임계값과 비교,

W ij = { 0 , ifsij > ϵ ϵ , ifsij ⩽ ϵ W_{ij}=\left\{ \begin{matrix} 0 , & if &s_{ij}>ϵ \\ ϵ, &if &s_{ij}\leqslantϵ \ end{matrix} \right.이자={ 0 ,ϵ ,나는 f내가 _에스이자>ϵ에스이자ϵ
임계값을 사용하여 거리를 필터링하고, 카드 비교가 실패하고, 샘플 간의 가중치가 0이고, 많은 정보가 누락됨

(2) k-최근접 이웃 방법

임의의 점 에 대해 가장 가까운 k 꼭지점을 찾으면 이 꼭지점과 k 꼭지점의 가중치는 계산으로 구하지만(모두 0보다 크고 나머지 꼭지점의 거리는 0입니다.) 구한 유사성 행렬은 비대칭이다. 예: ii나는 jj_j 'skkk개의 가장 가까운 이웃 중에서jjj는 ii에 없을 수 있습니다.나는_k개의 가장 가까운 이웃 중에서이 문제에 대한 두 가지 솔루션이 있습니다.
설명: sij s_{ij}에스이자거리를 나타냅니다

방법 1

느슨한 버전에서 k- 최근
접 이웃을 만족하는 한 Wi ij = W ji W_{ij}=W_{ji}이자=, k-최근접 이웃이 동시에 만족되지 않는 경우에만 0입니다.
여기에 이미지 설명 삽입

b. 방법 2

엄격한 버전
두 정점이 가까운 이웃일 때만 거리가 계산되고 그렇지 않으면 가중치는 0입니다.
여기에 이미지 설명 삽입

(3) 완전히 연결됨

모든 포인트 사이의 상호 연결을 계산 하므로 가중치가 0보다 크므로 일반적으로 사용되는 거리를 계산하기 위해 다른 커널 함수를 선택할 수 있습니다.

  • 다항식 커널 함수
  • 가우스 커널 함수
  • 시그모이드 커널 함수

여기에 이미지 설명 삽입

1.1.4 라플라스 행렬

L = D - WL = D - W=-

DDD 는 차수 행렬,WWW 는 위의 인접 행렬입니다.

1.1.5 컷 그래프, 클러스터

요점으로 들어가겠습니다. 이제 위에서 언급한 무방향 그래프를 잘라야 합니다 .
여기에 이미지 설명 삽입
절단 최적화 목표:
비용( G 1 , . . . G 2 ) = ∑ i C ( G i , G i ^ ) 비용(G1,...G2) = \sum_{i}C(G_i,\hat{ 미군 병사}})비용 ( G 1 , _ _... 2 )=( ,G^)
C ( G 1 , G 2 ) = ∑ i ∈ G 1 , j ∈ G 2 wij C(G_1,G_2) = \sum_{i\in G_1,j\in G_2}w_{ij}( 1,G2)=i G1, j G2이자

  • 목표는 하위 그래프 시간을 줄이기 위한 가중치의 합을 최소화하는 것입니다 . 즉, 가장 적은 수의 모서리를 자르기 위함입니다.
  • 컷팅에서 국부적 최적점이 나타날 수 있으므로 컷팅 방법에 따라 그래프 컷팅 방법이 달라집니다.

(1). 비율컷

목표: 하위 그래프의 노드 수를 가능한 한 크게 만듭니다.
Ration Cut ( G 1 , . . . G 2 ) = ∑ i C ( G i , G i ^ ) ∣ G i ^ ∣ RationCut(G1,.. . G2) = \sum_i{C(G_i,\hat{G_i}) \over \mid \hat{G_i} \mid }R a t i o n C u t ( G 1 ,... 2 )=G^( ,G^)
분모는 하위 그래프의 노드 수입니다.

(2).NCut 컷 이미지

목표: 각 하위 그래프 간선의 가중치 합계 고려
NC ut ( C 1 , . . C k ) = ∑ i C ( G i , GI ^ ) vol ( G i ^ ) NCut(C_1,...C_k) = \ sum_i{C(G_i,\hat{G_I} )\over vol(\hat{G_i})}NC u t ( C1,... 케이)=v o l (G^)( ,G^)

분모는 하위 그래프 각 변의 가중치 합입니다.

1.2 계산 과정

1.2.1 코어에는 세 가지 주요 부분이 있습니다.

  • 유사성 매트릭스 생성(일반적으로 사용: 전체 연결 방법)
  • 절단 방법(일반적으로 사용됨: NCut)
  • 최종 클러스터링 방법(일반적으로 사용됨: K-Means)

1.2.2 알고리즘 흐름:

  1. 유사성 행렬 S, 차수 행렬 D를 구성하고 라플라시안 행렬 L = D − WL = D - W를 계산합니다.=-
  2. 표준화된 라플라시안 행렬 D − 1 2 ⋅ L ⋅ D − 1 2 D^{-1 \over 2} ·L ·D^{-1 \over 2}2 12 1
  3. 계산 D − 1 2 ⋅ L ⋅ D − 1 2 D^{-1 \over 2} · L · D^{-1 \over 2}2 12 1가장 작은 k 1 k_1케이1각 고유값에 해당하는 고유벡터 ff에프
  4. 각각의 고유 벡터 fff 로 구성된 행렬은 행별로 표준화되며 최종 구성은n ⋅ k 1 n k_1케이1차원의 특성 행렬 FF에프
  5. F의 각 행에 대해 k 1 k_1케이1차원 샘플, 총 n개 샘플, 입력 클러스터링 방법으로 클러스터링, 클러스터링 차원은 k 2 k_2케이2
  6. 클러스터 파티션 C ( c 1 , c 2 , . . ck 2 ) C(c_1,c_2,...c_{k2}) 가져오기( 1,2,... k2_ _)

1.2.3 파이썬 구현

def calculate_w_ij(a,b,sigma=1):
    w_ab = np.exp(-np.sum((a-b)**2)/(2*sigma**2))
    return w_ab

# 计算邻接矩阵
def Construct_Matrix_W(data,k=5):
    rows = len(data) # 取出数据行数
    W = np.zeros((rows,rows)) # 对矩阵进行初始化:初始化W为rows*rows的方阵
    for i in range(rows): # 遍历行
        for j in range(rows): # 遍历列
            if(i!=j): # 计算不重复点的距离
                W[i][j] = calculate_w_ij(data[i],data[j]) # 调用函数计算距离
        t = np.argsort(W[i,:]) # 对W中进行行排序,并提取对应索引
        for x in range(rows-k): # 对W进行处理
            W[i][t[x]] = 0
    W = (W+W.T)/2 # 主要是想处理可能存在的复数的虚部,都变为实数
    return W

def Calculate_Matrix_L_sym(W): # 计算标准化的拉普拉斯矩阵
    degreeMatrix = np.sum(W, axis=1) # 按照行对W矩阵进行求和
    L = np.diag(degreeMatrix) - W # 计算对应的对角矩阵减去w
    # 拉普拉斯矩阵标准化,就是选择Ncut切图
    sqrtDegreeMatrix = np.diag(1.0 / (degreeMatrix ** (0.5))) # D^(-1/2)
    L_sym = np.dot(np.dot(sqrtDegreeMatrix, L), sqrtDegreeMatrix) # D^(-1/2) L D^(-1/2)
    return L_sym

def normalization(matrix): # 归一化
    sum = np.sqrt(np.sum(matrix**2,axis=1,keepdims=True)) # 求数组的正平方根
    nor_matrix = matrix/sum # 求平均
    return nor_matrix

W = Construct_Matrix_W(your_data) # 计算邻接矩阵
L_sym = Calculate_Matrix_L_sym(W) # 依据W计算标准化拉普拉斯矩阵
lam, H = np.linalg.eig(L_sym) # 特征值分解
    
t = np.argsort(lam) # 将lam中的元素进行排序,返回排序后的下标
H = np.c_[H[:,t[0]],H[:,t[1]]] # 0和1类的两个矩阵按行连接,就是把两矩阵左右相加,要求行数相等。
H = normalization(H) # 归一化处理

model = KMeans(n_clusters=20) # 新建20簇的Kmeans模型
model.fit(H) # 训练
labels = model.labels_ # 得到聚类后的每组数据对应的标签类型
    
res = np.c_[your_data,labels] # 按照行数连接data和labels

여기에 이미지 설명 삽입

1.3 요약

스펙트럼 클러스터링 알고리즘의 주요 이점은 다음과 같습니다.

  1. 스펙트럼 클러스터링은 데이터 간의 유사성 행렬만 필요하므로 희소 데이터를 다루는 클러스터링에 효과적입니다. 이는 K-Means와 같은 기존 클러스터링 알고리즘에서는 어렵습니다.
  2. 차원 감소를 사용하기 때문에 고차원 데이터 클러스터링을 처리하는 복잡성이 기존 클러스터링 알고리즘보다 낫습니다.

스펙트럼 클러스터링 알고리즘의 주요 단점은 다음과 같습니다.

  1. 최종 클러스터링의 차원이 매우 높으면 차원 감소가 충분하지 않아 스펙트럼 클러스터링의 실행 속도와 최종 클러스터링 효과가 좋지 않습니다.
  2. 클러스터링 효과는 유사성 매트릭스에 따라 달라지며 서로 다른 유사성 매트릭스에서 얻은 최종 클러스터링 효과는 매우 다를 수 있습니다.

참고

[1] https://zhuanlan.zhihu.com/p/387483956
[2] https://blog.csdn.net/songbinxu/article/details/80838865
[3] https://blog.csdn.net/weixin_45591044 /article/details/122747024
[4] https://blog.csdn.net/yftadyz/article/details/108933660?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164345675116780264032305%25 22%252C%2522scm%2522% 253A%252220140713.130102334…%2522%257D&request_id=164345675116780264032305&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2 all top_ulrmf ~ default-2-108933660 .pc_search_insert_ulrmf&utm_term=%E8%B0%B1%E5%9B%BE%E7% 90%86%E8%AE%BA&spm=1018.2226.3001.4187
[5] https://blog.csdn.net/katrina1rani/article/details/108451882
[6]https://zhuanlan.zhihu.com/p/392736238
[7] https://zhuanlan.zhihu.com/p/91154535
[8] https://www.cnblogs.com/tychyg/p/5277137.html
[ 9] https://www.cnblogs.com/kang06/p/9468647.html
[10] https://zhuanlan.zhihu.com/p/29849122
[11] https://www.cnblogs.com/xiximayou/ p/13548514.html
[12] https://www.cnblogs.com/pinard/p/6221564.html
[13] https://zhuanlan.zhihu.com/p/54348180
[14] https://blog. csdn.net/qq_43391414/article/details/112277987
[15] https://blog.csdn.net/jxlijunhao/article/details/116443245
[16] https://zhuanlan.zhihu.com/p/368878987
[17]https://blog.csdn.net/qq280929090/article/details/103591577

추천

출처blog.csdn.net/weixin_39190382/article/details/131310141