Ich habe mit Hierarchical Clustering
experimentiert und in R
ist es so einfach hclust(as.dist(X),method="average")
. Ich fand eine Methode in Python
, die auch ziemlich einfach ist, außer dass ich etwas verwirrt bin, was mit meiner Eingabe-Distanzmatrix passiert.Dreieck vs. Quadrat Abstandsmatrix für hierarchisches Clustering Python?
Ich habe eine Ähnlichkeitsmatrix (DF_c93tom
w/eine kleinere Testversion namens DF_sim
), die ich in eine Unähnlichkeitsmatrix DF_dissm = 1 - DF_sim
umwandeln.
Ich verwende dies als Eingabe in linkage
von scipy
, aber die Dokumentation sagt, dass es in einer quadratischen oder Dreiecksmatrix dauert. Ich bekomme einen anderen Cluster für die Eingabe eines lower triangle
, upper triangle
und square matrix
. Warum ist das? Es möchte ein oberes Dreieck aus der Dokumentation, aber das untere Dreiecks-Cluster sieht WIRKLICH ähnlich aus.
Meine Frage, warum sind alle Cluster unterschiedlich? Welches ist korrekt?
Dies ist die Dokumentation für die Eingangsdistanzmatrix für 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.
ist hier mein 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()