7

Je cherche hexagonalself-organizing map sur Python.
Hexagonal auto-organisant la carte en Python

hexagonal tiling

  1. module prêt à. Si un existe.
  2. chemin à tracer des algorithmes cellule hexagonale
  3. travailler avec des cellules hexagonales comme tableau ou smth autre

A propos: Une carte d'auto-organisation (SOM) ou auto-organisation carte de fonction (SOFM) est un type de réseau de neurones artificiel qui est formé en utilisant un apprentissage non supervisé pour produire un bas-dimensionnel (généralement bidimensionnel)

+0

@ S. Lott: Une carte auto organisation est un algorithme AI. Voir http://en.wikipedia.org/wiki/Self-organizing_map – Zifre

+0

Que cherchez-vous?S'agit-il d'une question d'IA sur les algorithmes auto-organisés, ou d'une question graphique sur les hexagones de dessin ou d'une question de représentation des données sur la façon de représenter un pavage hexagonal d'une surface? –

Répondre

6

Je n'ai pas de réponse pour le point 1, mais quelques conseils pour les points 2 et 3. En votre contexte, vous ne modélisez pas un espace physique 2D mais un co espace nceptuel avec des tuiles qui ont 6 voisins. Cela peut être modélisé avec des carreaux carrés disposés en colonnes avec les colonnes impaires décalées verticalement de la moitié de la taille d'un carré. Je vais essayer un diagramme ASCII:

___  ___  ___  
| |___| |___| |___ 
|___| |___| |___| | 
| |___| |___| |___| 
|___| |___| |___| | 
| |___| |___| |___| 
|___| |___| |___| | 
    |___| |___| |___| 

Vous pouvez facilement voir que chaque carré a 6 voisins (sauf ceux sur les bords bien sûr). Cela devient facilement modélisé comme un tableau 2D de carrés, et les règles pour calculer les coordonnées du carré à la position (i, j), i étant la ligne et j la colonne sont assez simples:

si j est pair :

(i+1, j), (i-1, j), (i, j-1), (i, j+1), (i-1, j-1), (i+1, j-1) 

si j est impair:

(i+1, j), (i-1, j), (i, j-1), (i, j+1), (i+1, j-1), (i+1, j+1) 

(les 4 premiers termes sont identiques)

6

Je sais que cette discussion est de 4 ans, trouver mais je ne l'ai pas une answe satisfaisante r sur le web.

Si vous avez quelque chose comme un tableau mappant l'entrée du neurone et un tableau de 2-d lié à l'emplacement de chaque neurone.

Par exemple, considérons quelque chose comme ceci:

hits = array([1, 24, 14, 16, 6, 11, 8, 23, 15, 16, 15, 9, 20, 1, 3, 29, 4, 
       32, 22, 7, 26, 26, 35, 23, 7, 6, 11, 9, 18, 17, 22, 19, 34, 1, 
       36, 3, 31, 10, 22, 11, 21, 18, 29, 3, 6, 32, 15, 30, 27], 
      dtype=int32) 
centers = array([[ 1.5  , 0.8660254 ], 
       [ 2.5  , 0.8660254 ], 
       [ 3.5  , 0.8660254 ], 
       [ 4.5  , 0.8660254 ], 
       [ 5.5  , 0.8660254 ], 
       [ 6.5  , 0.8660254 ], 
       [ 1.  , 1.73205081], 
       [ 2.  , 1.73205081], 
       [ 3.  , 1.73205081], 
       [ 4.  , 1.73205081], 
       [ 5.  , 1.73205081], 
       [ 6.  , 1.73205081], 
       [ 1.5  , 2.59807621], 
       [ 2.5  , 2.59807621], 
       [ 3.5  , 2.59807621], 
       [ 4.5  , 2.59807621], 
       [ 5.5  , 2.59807621], 
       [ 6.5  , 2.59807621], 
       [ 1.  , 3.46410162], 
       [ 2.  , 3.46410162], 
       [ 3.  , 3.46410162], 
       [ 4.  , 3.46410162], 
       [ 5.  , 3.46410162], 
       [ 6.  , 3.46410162], 
       [ 1.5  , 4.33012702], 
       [ 2.5  , 4.33012702], 
       [ 3.5  , 4.33012702], 
       [ 4.5  , 4.33012702], 
       [ 5.5  , 4.33012702], 
       [ 6.5  , 4.33012702], 
       [ 1.  , 5.19615242], 
       [ 2.  , 5.19615242], 
       [ 3.  , 5.19615242], 
       [ 4.  , 5.19615242], 
       [ 5.  , 5.19615242], 
       [ 6.  , 5.19615242]]) 

Alors I'do cela en utilisant une la méthode suivante:

from matplotlib import collections, transforms 
from matplotlib.colors import colorConverter 
from matplotlib import cm 
import matplotlib.pyplot as plt 
import numpy as np 

def plot_map(hits, n_centers, w=10): 
    """ 
    Plot Map 
    """ 

    fig = plt.figure(figsize=(w, .7 * w)) 
    ax = fig.add_subplot(111) 
    hits_count = np.histogram(hits, bins=n_centers.shape[0])[0] 
    # Discover difference between centers 
    collection = RegularPolyCollection(
     numsides=6, # a hexagon 
     rotation=0, sizes=((6.6*w)**2 ,), 
     edgecolors = (0, 0, 0, 1), 
     array= hits_count, 
     cmap = cm.winter, 
     offsets = n_centers, 
     transOffset = ax.transData, 
    ) 
    ax.axis('off') 
    ax.add_collection(collection, autolim=True) 
    ax.autoscale_view() 
    fig.colorbar(collection) 
    return ax 

_ = plot_map(som_classif, matrix) 

Enfin j'ai eu cette sortie:

enter image description here

EDIT

Une version mise à jour de ce code sur https://stackoverflow.com/a/23811383/575734