[Algoritmo de agrupamiento] agrupamiento espectral agrupamiento espectral

cada blog cada lema: Puedes hacer más de lo que piensas.
https://blog.csdn.net/weixin_39190382?type=blog

0. Prefacio

Agrupación espectral
Descripción general de la agrupación espectral: no

1. Texto

1.1 Comprensión general

El agrupamiento espectral es un método de agrupamiento basado en la teoría de gráficos, que divide un gráfico no dirigido ponderado en dos o más subgráficos óptimos. Haz que los subgráficos sean lo más parecidos posible y que la distancia entre los subgráficos sea lo más posible . Lo óptimo significa que las funciones objetivo óptimas son diferentes. Hay dos tipos:

  • corte más pequeño
  • El mejor corte
    se muestra en la siguiente figura:
    inserte la descripción de la imagen aquí

1.1.1 Gráfico no dirigido

Como se muestra en la siguiente figura, consta de varios vértices y aristas . Debido a que las aristas no tienen dirección, se llama un grafo no dirigido. en,

Conjunto de puntos: V = { v 1 , v 2 , . . . . , v 3 } V = \{v1,v2,...,v3\}V={ v 1 ,v2 , _..... ,v 3 }
conjunto de aristas:E = { e 1 , e 2 , . . . . , e 3 } E = \{e1,e2,...,e3\}mi={ mi 1 ,mi 2 ,..... ,mi 3 }

Entonces, el gráfico se expresa como G ( V , E ) G(V,E)G ( V ,mi )


Matriz de peso (matriz de adyacencia) WWWW ij W_{ij}WyoPantallaii _yo yjjEl peso entre j , ya que es un gráfico no dirigido, entonces
W ij = W ji W_{ij}=W_{ji}Wyo=Wji
Por favor agregue una descripción de la imagen

1.1.2 Grado y matriz de grados

En las estructuras de datos, el grado se define como el número de vértices conectados directamente al punto.
Aquí, la definición es la siguiente:
di = ∑ j = 1 n W ij d_i = \sum_{j=1}^{n}W_{ij}dyo=j = 1nWyo

Es decir, la suma de los pesos de una fila (o columna).
La matriz de grados es una matriz diagonal compuesta de n grados, como sigue:

[ re 1 0 ⋯ 0 0 re 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{matriz} d1000d2000dn

1.1.3 Matriz de similitud

Nota: Podemos calcular la distancia entre dos puntos y generar una matriz de adyacencia para representar la relación entre nuestros puntos (es decir, lo que llamamos un gráfico ).La matriz de similitud aquí se basa en la "matriz de distancia" (según la distancia Juzgando si es similar) De acuerdo con cierto método (los siguientes tres métodos) para "filtrar" más
(se puede entender aproximadamente, algunos puntos están muy lejos)

La matriz de peso anterior se compone de pesos entre dos puntos cualesquiera. En la práctica, no podemos obtener pesos directamente, solo la definición de puntos de datos, y los pesos generalmente se calculan por la distancia entre dos puntos . La distancia es lejana y el peso es alto, y la distancia es cercana y el peso es alto. Por lo general, por tres métodos.

(1). ϵ ϵϵ - método de proximidad (menos utilizado)

Establecer un umbral ϵ ϵϵ , calcule la distancia euclidiana entre dos puntos y compárela con el umbral,

W ij = { 0 , si sij > ϵ ϵ , si sij ⩽ ϵ W_{ij}=\left\{ \begin{matrix} 0 , & si &s_{ij}>ϵ \\ ϵ, &si &s_{ij}\leqslantϵ \ end{matriz} \right.Wyo={ 0 ,, _yo fyo fsyo>ϵsyoϵ
Use el umbral para filtrar la distancia, la comparación de la tarjeta está muerta, el peso entre las muestras es 0 y falta mucha información

(2) método del k-vecino más cercano

Para cualquier punto , encuentre los k vértices más cercanos a él, los pesos de este vértice y los k vértices se obtienen por cálculo (todos son mayores que 0, y la distancia del resto de los vértices es 0), pero la matriz de similitud obtenida será ser asimétrico. Tales como: iiyo enjjkde jEntre los k vecinos mas cercanos, pero jjj puede no estar eniiyo soykkentre los k vecinos mas cercanos. Hay dos soluciones a este problema:
Descripción: sij s_{ij}syoIndica la distancia

A. Método 1

En la versión suelta,
siempre que uno satisfaga k-vecinos más cercanos , entonces sea W ij = W ji W_{ij}=W_{ji}Wyo=Wji, es 0 solo si los k vecinos más cercanos no están satisfechos al mismo tiempo.
inserte la descripción de la imagen aquí

B. Método 2

Versión estricta Solo cuando
dos vértices son vecinos cercanos , se calcula la distancia, de lo contrario, el peso es 0.
inserte la descripción de la imagen aquí

(3) Totalmente conectado

Calcule la interconexión entre todos los puntos , para que el peso sea mayor que 0, puede elegir diferentes funciones del kernel para calcular la distancia, las más utilizadas son:

  • función de núcleo polinomial
  • Función de núcleo gaussiano
  • función del núcleo sigmoide

inserte la descripción de la imagen aquí

1.1.4 Matriz de Laplace

L = re - WL = re - WL=DW

DDD es la matriz de grados,WWW es la matriz de adyacencia anterior

1.1.5 Gráfico de corte, clúster

Entremos en el punto clave, ahora tenemos que cortar el gráfico no dirigido mencionado anteriormente .
inserte la descripción de la imagen aquí
Cortar el objetivo de optimización:
C ost ( G 1 , . . . G 2 ) = ∑ i C ( G i , G i ^ ) Cost(G1,...G2) = \sum_{i}C(G_i,\hat{ Soldado americano}})Costo ( G 1 , _ _... G 2 )=ido ( solyo,GRAMOyo^)
C ( GRAMO 1 , GRAMO 2 ) = ∑ yo ∈ GRAMO 1 , j ∈ G 2 wij C(G_1,G_2) = \sum_{i\in G_1,j\in G_2}w_{ij}do ( sol1,GRAMO2)=yo G1, j G2wyo

  • El objetivo es minimizar la suma de pesos para cortar tiempos de subgráficos , es decir, cortar la menor cantidad de bordes.
  • Pueden aparecer óptimos locales en el corte, por lo que existen diferentes métodos de corte de gráficos según los diferentes métodos de corte.

(1). Relación de corte

Objetivo: Hacer que el número de nodos en el subgrafo sea lo más grande posible
Ration Cut ut ( 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 c i ó n C u t ( G 1 ,... G 2 )=iGRAMOyo^do ( solyo,GRAMOyo^)
El denominador es el número de nodos en el subgrafo

(2) Imagen de corte NCut

Objetivo: Considere la suma del peso de cada borde del subgráfico
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,... Ck)=ivolumen ( _ _GRAMOyo^)do ( solyo,GRAMOyo^)

El denominador es la suma del peso de cada lado del subgrafo

1.2 Proceso de cálculo

1.2.1 Hay tres partes principales del núcleo:

  • Generación de matriz de similitud (comúnmente utilizado: método de conexión completa)
  • Método de corte (comúnmente utilizado: NCut)
  • El método de agrupación final (comúnmente utilizado: K-Means)

1.2.2 Flujo del algoritmo:

  1. Construya la matriz de similitud S, la matriz de grados D y calcule la matriz laplaciana L = D − WL = D - WL=DW
  2. Construya la matriz laplaciana estandarizada D − 1 2 ⋅ L ⋅ D − 1 2 D^{-1 \over 2} ·L ·D^{-1 \over 2}D2 1L D2 1
  3. Calcula D − 1 2 ⋅ L ⋅ D − 1 2 D^{-1 \over 2} · L · D^{-1 \over 2}D2 1L D2 1El más pequeño k 1 k_1k1Los vectores propios ff correspondientes a cada valor propioF
  4. Los respectivos vectores propios ffLa matriz compuesta por f está estandarizada por fila, y la composición final esn ⋅ k 1 n k_1norte k1La matriz característica FF de dimensiónF
  5. Para cada fila en F como k 1 k_1k1Muestras dimensionales, un total de n muestras, agrupadas con el método de agrupación de entrada, la dimensión de agrupación es k 2 k_2k2
  6. Obtenga la partición de clúster C ( c 1 , c 2 , . . . ck 2 ) C(c_1,c_2,...c_{k2})C ( c1,C2,... dok2_ _)

1.2.3 implementación de Python

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

inserte la descripción de la imagen aquí

1.3 Resumen

Las principales ventajas del algoritmo de agrupamiento espectral son:

  1. El agrupamiento espectral solo requiere una matriz de similitud entre los datos, por lo que es efectivo para el agrupamiento que trata con datos escasos. Esto es difícil para los algoritmos de agrupamiento tradicionales como K-Means.
  2. Debido al uso de la reducción de la dimensionalidad, la complejidad de manejar el agrupamiento de datos de alta dimensión es mejor que los algoritmos de agrupamiento tradicionales.

Las principales desventajas de los algoritmos de agrupamiento espectral son:

  1. Si la dimensión del agrupamiento final es muy alta, la velocidad de ejecución del agrupamiento espectral y el efecto del agrupamiento final no son buenos debido a una reducción de la dimensionalidad insuficiente.
  2. El efecto de agrupamiento depende de la matriz de similitud, y el efecto de agrupamiento final obtenido por diferentes matrices de similitud puede ser muy diferente.

referencia

[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%2522%2 52C%2522scm%2522% 253A%252220140713.130102334…%2522%257D&request_id=164345675116780264032305&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2 todo top_ulrmf~default-2-108933 660.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

Supongo que te gusta

Origin blog.csdn.net/weixin_39190382/article/details/131310141
Recomendado
Clasificación