Der Algorithmus ist super einfach, mit nur einem Parameter, und es sei der Schwellenwert r.
pyfof ist eine Bibliothek, mit der Freunde von Freunden mit Python mit hoher Geschwindigkeit Cluster finden können. Anstatt einfach den Friends-of-Friends-Algorithmus zu implementieren, wurde die Beschleunigung anscheinend durch die Methode R * -tree ermöglicht. (Ich kenne die Details nicht).
Installation ist
python
pip install pyfof
Es war nur OK (@ google colab, 2020.8.19)
python
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import pyfof
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
data = np.vstack((np.random.normal(-1,0.2,(nptsperdim,ndim)),\
np.random.normal(1,0.2,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.4)
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
Dann
Es kann ordentlich in zwei Klassen unterteilt werden.
Als nächstes, warum nicht eine andere Klasse in die Mitte stellen?
python
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
data = np.vstack((np.random.normal(-1,0.2,(nptsperdim,ndim)),\
np.random.normal(1,0.2,(nptsperdim,ndim)),\
np.random.normal(0.,0.2,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.4) # 0.Wenn es 4 ist, ist es zu groß und alle werden in dieselbe Klasse eingeteilt.
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
Dann hatten sie alle die gleiche Farbe, das heißt die gleiche Klasse.
Lassen Sie uns den Bereich ein wenig ändern
python
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
#Machen Sie Gaußsches Sigma kleiner.
data = np.vstack((np.random.normal(-1,0.1,(nptsperdim,ndim)),\
np.random.normal(1,0.1,(nptsperdim,ndim)),\
np.random.normal(0.,0.1,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.2) # 0.2 und machen Sie den Standard etwas kleiner. Und das obere Sigma wurde kleiner gemacht.
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
Es anschauen
Es wurde richtig in 3 Klassen eingeteilt. Dies liegt daran, dass das Gaußsche Sigma reduziert wurde und das Kriterium von 0,4 auf 0,2 reduziert wurde.
Der Code kann auch unter google colab angezeigt werden.
Recommended Posts