Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques d'apprentissage automatique Discussion :

distance moyenne pour un cluster


Sujet :

Bibliothèques d'apprentissage automatique

  1. #1
    Membre à l'essai
    distance moyenne pour un cluster
    salut salut,
    j'ai un petit soucis, parce que j'ignore comment faire !!??

    j'ai un vecteur : label de dimension 960.
    les valeurs de ce vecteur sont entre 0 et 5 .
    C'est un résultat d'un clustering ...
    donc:
    cluster0 ->label = 0
    cluster1 -> label =1 ...etc jusqu'à cluster5-> label = 5

    dans l'algorithme de hirarchical clustering , j'ai introduit une matrice de distance : disgrandtab de dimension 960*960 .. donc, il me les a classé en fonction des distance les plus proches, et j'ai eu 6 clusters .

    comment dois je faire pour calculer la distance moyenne dans chaque cluster ??
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Citation Envoyé par Lyly87 Voir le message
    comment dois je faire pour calculer la distance moyenne dans chaque cluster ??
    Pour regrouper vos objets en cluster, il vous a fallu définir une distance. A partir de là, calculer la distance moyenne d'un cluster ou entre deux clusters devrait être simple, non?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Au départ je dois d'abord récupérer les indices des distances regroupées dans un label , les sommer puis les diviser par le nombre d'échantillons
    c bien cela non ??

  4. #4
    Expert éminent sénior
    Montrez plutôt ce que vous avez essayé sur un petit exemple reproductible.
    Exposez les problèmes que vous rencontrez.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Voilà ce que j'ai commencé :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    f=0
    clust0=np.array()
    for f in range (960):
        if label[f]==0:
            clust0 = disgrandtab[??,??]
            print clust0

    J'explique :
    j'ai déclaré f un entier et clust0 un tableau dans lequel j'aimerai par la suite récupérer les distance avec le label 0 ,
    pour f qui va de de la valeur 0 à 960 dimension du vecteur label ,
    si la valeur f dans le label = 0 j'aimerai qu'il me retourne clust0, qui est un tableau contenant les distances avec label 0
    je ne sais pas quoi mettre dans les indices ou j'ai mis les points d'interrogation !!

  6. #6
    Expert éminent sénior
    Salut,
    "un petit exemple reproductible" est un code qu'on peut faire fonctionner après un "cut&paste".
    je ne sais pas quoi mettre dans les indices ou j'ai mis les points d'interrogation !!
    Comment a été construit disgrandtab?
    Quelle est la relation entre ses (i, j) et les données de départ?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Alors je dois tout vous expliquer :
    j'ai des cellules que j'aimerai comparer, sur chaque cellule j'ai 8 points , j'ai les coordonnées de ces points en x et y qui sont représentés par une matrice d de dimension 960*16 (960 parce que j'ai 960 cellules)
    de la colonne indice 0 a l'indice 7 c'est les x et de l'indice 8 à l'indice 15 c'est les y. (parce que je les ai concaténer )
    donc, chaque cellule est représentée par une ligne quoi !


    à partir de cette matrice d j'ai fait toute cette suite :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    d_2 = d.copy()**2
    #print d_2
     
    dist=np.zeros((960,8))
    dist = d_2[:,:8]+d_2[:,8:]
     
     
    idx = np.argmax(dist, axis=1)
     
     
    dxn = d[:,:8]
     for ix, shift in enumerate(idx):
        dxn[ix,:] = np.roll( dxn[ix,:], shift)
    print u"\nTableau 'shifte' :\n", dxn
     
     
    dyn = d[:,8:]
    for iy, shift in enumerate(idx):
        dyn[iy,:] = np.roll( dyn[iy,:], shift)
    print u"\nTableau 'shifte' :\n", dyn
     
    dgranddis = np.concatenate([dxn,dyn],axis=1)
     
    disgrandtab = np.zeros((960,960))
     
    for zi in range(0,960):
        vi = dgranddis[zi,:]
        mi = dgranddis[(zi+1):,:]
        ni = mi-vi
        qi = ni**2
        arrays = np.sum(qi[:,0:8]+qi[:,8:16],axis=1)
     
     
        for zii in range(0, arrays.shape[0]):
            disgrandtab[zi,zi+zii+1] = arrays[zii]
            disgrandtab[zi+zii+1,zi] = arrays[zii]
     
    print disgrandtab
     
    plt.imshow(disgrandtab)
    plt.show()
    print disgrandtab.shape
     
    ################################################################## hirarchical clustering 
    import time as time
    import mpl_toolkits.mplot3d.axes3d as p3
    from sklearn.cluster import Ward
    from sklearn.datasets.samples_generator import make_swiss_roll
     
    #################
    X = disgrandtab
    #################
    # Compute clustering
    print "Compute unstructured hierarchical clustering..."
    st = time.time()
    ward = Ward(n_clusters=6).fit(X)
    label = ward.labels_
    #print label
    print "Elapsed time: ", time.time() - st
    print "Number of points: ", label.size
     
    ######################
    # Plot result
    fig = pl.figure()
    ax = p3.Axes3D(fig)
    ax.view_init(7, -80)
    for l in np.unique(label):
        ax.plot3D(X[label == l, 0], X[label == l, 1], X[label == l, 2],
                  'o', color=pl.cm.jet(np.float(l) / np.max(label + 1)))
    pl.title('Without connectivity constraints')
     
    pl.show()

  8. #8
    Expert éminent sénior
    Ce que je lis, c'est:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    print "Compute unstructured hierarchical clustering..."
    st = time.time()
    ward = Ward(n_clusters=6).fit(X)
    label = ward.labels_
    #print label
    print "Elapsed time: ", time.time() - st
    print "Number of points: ", label.size


    Vous utilisez la fonction de clustering Ward du module sklearn.cluster.
    Pour calculer distance moyenne sur les points d'un cluster, il faut voir comment les récupérer dans l'instance de "ward"... - et seul l'objet sait comment ont été regroupées ces "points".

    A vous de lire la documentation, faire des petits tests pour s'assurer que vous l'avez bien comprise,... Ou attendre l'éclairage avisé d'un lecteur qui a déjà utilisé cette bibliothèque.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

###raw>template_hook.ano_emploi###