J'ai expérimenté avec Hierarchical Clustering
et en R
c'est tellement simple hclust(as.dist(X),method="average")
. J'ai trouvé une méthode dans Python
qui est assez simple, sauf que je suis un peu confus sur ce qui se passe avec ma matrice de distance d'entrée.Triangle vs. Matrice de distance carrée pour Python de classification hiérarchique?
J'ai une matrice de similarité (DF_c93tom
w/une version de test plus petit appelé DF_sim
) que je convertir en une matrice de dissemblance DF_dissm = 1 - DF_sim
.
Je l'utilise comme entrée dans linkage
de scipy
mais la documentation dit qu'il prend une matrice carrée ou triangulaire. Je reçois un cluster différent pour l'entrée d'un lower triangle
, upper triangle
et square matrix
. Pourquoi est-ce? Il veut un triangle supérieur de la documentation mais le groupe de triangle inférieur semble vraiment similaire.
Ma question, pourquoi toutes les grappes sont-elles différentes? Laquelle est correcte?
Ceci est la documentation de la matrice de distance d'entrée pour linkage
y : ndarray
A condensed or redundant distance matrix. A condensed distance matrix is a flat array containing the upper triangular of the distance matrix.
Voici mon code:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import dendrogram, linkage
%matplotlib inline
#Test Data
DF_sim = DF_c93tom.iloc[:10,:10] #Similarity Matrix
DF_sim.columns = DF_sim.index = range(10)
#print(DF_test)
# 0 1 2 3 4 5 6 7 8 9
# 0 1.000000 0 0.395833 0.083333 0 0 0 0 0 0
# 1 0.000000 1 0.000000 0.000000 0 0 0 0 0 0
# 2 0.395833 0 1.000000 0.883792 0 0 0 0 0 0
# 3 0.083333 0 0.883792 1.000000 0 0 0 0 0 0
# 4 0.000000 0 0.000000 0.000000 1 0 0 0 0 0
# 5 0.000000 0 0.000000 0.000000 0 1 0 0 0 0
# 6 0.000000 0 0.000000 0.000000 0 0 1 0 0 0
# 7 0.000000 0 0.000000 0.000000 0 0 0 1 0 0
# 8 0.000000 0 0.000000 0.000000 0 0 0 0 1 0
# 9 0.000000 0 0.000000 0.000000 0 0 0 0 0 1
#Dissimilarity Matrix
DF_dissm = 1 - DF_sim
#Redundant Matrix
#np.tril(DF_dissm).T == np.triu(DF_dissm)
#True for all values
#Hierarchical Clustering for square and triangle matrices
fig_1 = plt.figure(1)
plt.title("Square")
Z_square = linkage((DF_dissm.values),method="average")
dendrogram(Z_square)
fig_2 = plt.figure(2)
plt.title("Triangle Upper")
Z_triu = linkage(np.triu(DF_dissm.values),method="average")
dendrogram(Z_triu)
fig_3 = plt.figure(3)
plt.title("Triangle Lower")
Z_tril = linkage(np.tril(DF_dissm.values),method="average")
dendrogram(Z_tril)
plt.show()