[PYTHON] Comment essayer l'algorithme des amis d'amis avec pyfof

amis d'amis Quel est l'algorithme?

L'algorithme est super simple, avec un seul paramètre, et que ce soit la valeur seuil r.

  1. Lorsqu'il y a N points dans l'espace, faites attention à un certain point. La distance entre ce point et les N-1 points restants est calculée, et tout ce qui est inférieur ou égal à r est considéré comme un ami.
  2. Ensuite, concentrez-vous sur un autre point et effectuez le même calcul. S'il y a quelque chose en commun avec l'ami que vous avez choisi plus tôt, ajoutez un ami. S'il n'y a pas d'éléments en commun, une nouvelle famille d'amis sera créée.
  3. Répétez simplement ceci.

Installation de pyfof

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)

Exemple d'exécution

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

スクリーンショット 2020-08-19 14.23.44.png

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.

スクリーンショット 2020-08-19 14.25.00.png

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

スクリーンショット 2020-08-19 14.27.57.png

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

Comment essayer l'algorithme des amis d'amis avec pyfof
Essayez l'algorithme Variational-Quantum-Eigensolver (VQE) avec Blueqat
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
[Algorithm x Python] Comment utiliser la liste
Comment réparer la population initiale avec un algorithme génétique utilisant DEAP
Comment entraîner Kaldi avec JUST Corpus
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (code Python)
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (résultat de l'exécution)
Essayez de résoudre le livre des défis de programmation avec python3
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
[Introduction à Python] Comment itérer avec la fonction range?
Comment créer un sous-menu avec le plug-in [Blender]
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Essayez d'obtenir le contenu de Word avec Golang
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Essayez de défier le sol par récursif
Comment utiliser le générateur
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment utiliser le décorateur
Comment supprimer avec SQLAlchemy?
Comment augmenter l'axe
Comment démarrer la première projection
J'ai essayé de simuler la propagation de l'infection avec Python
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
Comment manipuler le DOM dans iframe avec Selenium
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Une histoire sur la façon de traiter le problème CORS
Comment entrer dans l'environnement de développement Python avec Vagrant
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Trouver une solution au problème N-Queen avec un algorithme génétique (1)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Comment calculer le coefficient d'autocorrélation
Python: comment utiliser async avec
Comment utiliser la fonction zip
Comment utiliser le module optparse
Essayez d'exploiter Facebook avec Python
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Essayez de profiler avec ONNX Runtime
Comment obtenir la version Python
Essayez d'introduire le thème sur Pelican
Comment démarrer avec Scrapy
Comment démarrer avec Python