Ich versuche zu verstehen, wie man einen Hierarchiecluster manipuliert, aber die Dokumentation ist zu ... technisch? ... und ich kann nicht verstehen, wie es funktioniert.
Gibt es ein Tutorial, mit dem ich anfangen kann und das einige einfache Aufgaben Schritt für Schritt erklärt?
Angenommen, ich habe den folgenden Datensatz:
a = np.array([[0, 0 ],
[1, 0 ],
[0, 1 ],
[1, 1 ],
[0.5, 0 ],
[0, 0.5],
[0.5, 0.5],
[2, 2 ],
[2, 3 ],
[3, 2 ],
[3, 3 ]])
Ich kann leicht den Hierarchie-Cluster erstellen und das Dendrogramm zeichnen:
z = linkage(a)
d = dendrogram(z)
[0,1,2,4,5,6]
im Dendrogramm?Das hierarchische agglomerative Clustering (HAC) besteht aus drei Schritten:
metric
Argument)method
Argument)Tun
z = linkage(a)
führt die ersten beiden Schritte aus. Da Sie keine Parameter angegeben haben, werden die Standardwerte verwendet
metric = 'euclidean'
method = 'single'
Mit z = linkage(a)
erhalten Sie eine einzelne verknüpfte hierachische agglomerative Gruppierung von a
. Dieses Clustering ist eine Art Hierarchie von Lösungen. Aus dieser Hierarchie erhalten Sie einige Informationen über die Struktur Ihrer Daten. Was Sie jetzt tun könnten, ist:
metric
geeignet ist, e. G. cityblock
oder chebychev
quantifizieren Ihre Daten unterschiedlich (cityblock
, euclidean
und chebychev
entsprechen L1
, L2
Und L_inf
Norm)methdos
(z. B. single
, complete
und average
)Hier ist etwas zu beginnen
import numpy as np
import scipy.cluster.hierarchy as hac
import matplotlib.pyplot as plt
a = np.array([[0.1, 2.5],
[1.5, .4 ],
[0.3, 1 ],
[1 , .8 ],
[0.5, 0 ],
[0 , 0.5],
[0.5, 0.5],
[2.7, 2 ],
[2.2, 3.1],
[3 , 2 ],
[3.2, 1.3]])
fig, axes23 = plt.subplots(2, 3)
for method, axes in Zip(['single', 'complete'], axes23):
z = hac.linkage(a, method=method)
# Plotting
axes[0].plot(range(1, len(z)+1), z[::-1, 2])
knee = np.diff(z[::-1, 2], 2)
axes[0].plot(range(2, len(z)), knee)
num_clust1 = knee.argmax() + 2
knee[knee.argmax()] = 0
num_clust2 = knee.argmax() + 2
axes[0].text(num_clust1, z[::-1, 2][num_clust1-1], 'possible\n<- knee point')
part1 = hac.fcluster(z, num_clust1, 'maxclust')
part2 = hac.fcluster(z, num_clust2, 'maxclust')
clr = ['#2200CC' ,'#D9007E' ,'#FF6600' ,'#FFCC00' ,'#ACE600' ,'#0099CC' ,
'#8900CC' ,'#FF0000' ,'#FF9900' ,'#FFFF00' ,'#00CC01' ,'#0055CC']
for part, ax in Zip([part1, part2], axes[1:]):
for cluster in set(part):
ax.scatter(a[part == cluster, 0], a[part == cluster, 1],
color=clr[cluster])
m = '\n(method: {})'.format(method)
plt.setp(axes[0], title='Screeplot{}'.format(m), xlabel='partition',
ylabel='{}\ncluster distance'.format(m))
plt.setp(axes[1], title='{} Clusters'.format(num_clust1))
plt.setp(axes[2], title='{} Clusters'.format(num_clust2))
plt.tight_layout()
plt.show()
Gibt