L'algorithme est super simple, avec un seul paramètre, et que ce soit la valeur seuil r.
pyfof est une bibliothèque qui permet aux amis d'amis de trouver des clusters à grande vitesse avec python. Au lieu de simplement implémenter l'algorithme des amis d'amis, il semble que l'accélération ait été rendue possible par la méthode R * -tree. (Je ne connais pas les détails).
L'installation est
python
pip install pyfof
C'était juste 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()
Puis
Il peut être soigneusement divisé en deux classes.
Ensuite, pourquoi ne pas mettre une autre classe au milieu?
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.S'il est 4, il est trop grand et tous sont classés dans la même classe.
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()
Ensuite, ils avaient tous la même couleur, c'est-à-dire la même classe.
Changeons un peu la gamme
python
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
#Réduisez le sigma de Gaussian.
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 et réduisez un peu la norme. Et le sigma supérieur a été rendu plus petit.
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()
Le regarder
Il a été correctement classé en 3 classes. En effet, le sigma gaussien a été réduit et le critère a été réduit de 0,4 à 0,2.
Le code peut également être consulté sur google colab.
Recommended Posts