IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Algorithme Kmeans clustering


Sujet :

Bibliothèques d'apprentissage automatique

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut Algorithme Kmeans clustering
    salut à tous.

    svp j'ai un programme Kmeans, je veux le modifier pour qu'il soit kmeans incrémental.

    comment pouvais-je le faire..

    et merci d'avance.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    from scipy.spatial import distance
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import style
    import pandas as pd
    #import tkinter as tk
    from tkinter import *
    from sklearn.preprocessing import LabelEncoder
    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_samples, silhouette_score
    from sklearn.metrics import adjusted_rand_score
    import matplotlib.cm as cm
    np.seterr(divide='ignore', invalid='ignore')
     
    style.use('ggplot')
    x=0
    y=0
    silhouette_avg = []
    cluster_err = []
    clusters_df=[]
    adj_rand_score = []
    class K_Means:
    	def __init__(self, k = 3, tolerance = 0.0001, max_iterations = 500):
    		self.k = k
    		self.tolerance = tolerance
    		self.max_iterations = max_iterations
    		self.itr = 0
     
    	def manhattan(a,b):
    		return sum(abs(x - y) for x,y in zip(a, b))
     
    	def fit(self, data, dist):
     
    		self.centroids = {}
    		self.dist = dist
     
     
    		#Initializer les centroids par les 'k' premiers elements du dataset        
    		for i in range(self.k):
    			self.centroids[i] = data[i]
    			#self.centroids[i] = data[randint(1, taille)]
     
    		# Début des iterations
    		for i in range(self.max_iterations):
    			self.classes = {}
    			for i in range(self.k):
    				self.classes[i] = []
     
    			#Chercher la distance entre point et cluster; choix du plus proche centroid
    			for features in data:
    				if dist == "euclidean":
    								distances = [distance.euclidean(features,self.centroids[centroid]) for centroid in self.centroids]
    				elif dist == "cosine":
    								distances = [distance.cosine(features,self.centroids[centroid]) for centroid in self.centroids]
    				elif dist == "manhattan":
    								distances = [K_Means.manhattan(features,self.centroids[centroid]) for centroid in self.centroids]
    				elif dist == "minkowski":
    								distances = [distance.minkowski(features,self.centroids[centroid]) for centroid in self.centroids]
     
    				classification = distances.index(min(distances))
    				self.classes[classification].append(features)
     
    			previous = dict(self.centroids)
     
    			#Varier les points de données du cluster pour recalculer les centroïdes
    			for classification in self.classes:
    				self.centroids[classification] = np.average(self.classes[classification], axis = 0)
     
    			isOptimal = True
     
    			for centroid in self.centroids:
     
    				original_centroid = previous[centroid]
    				curr = self.centroids[centroid]
    				if len(original_centroid)!=0:
    					if np.sum((curr - original_centroid)/(original_centroid) * 100.0) > self.tolerance:
    						isOptimal = False
    			self.itr += 1
    			#sortir de la boucle si les résultats sont optimaux, à savoir. les centroïdes ne changent pas beaucoup leurs positions (plus que la tolérance)
    			if isOptimal:
    				break

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonjour,

    Tu pourrais aller sur le forum algorithmie, pour qu'on te donne l'algorithme ou qu'on t'explique ce que c'est afin de le traduire en python par la suite...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    merci..

    c'est fait..

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    personne??

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Il faut chercher avec KMeans Incremental python sur Google, à priori, en très peu de recherches, j'ai trouvé une autre classe pouvant aller dans ce sens, mais n'y connaissant rien, je ne peux assurer une réponse sûre.

    Apparemment MiniBatchKMeans se retrouve souvent dans les résultats de ma recherche.

    À toi de voir si cela convient...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par fideel Voir le message
    personne??
    Un peu de recherche sur Internet peut être?
    Avec les mots clefs python, kmeans, incremental vous devriez trouver des solutions.
    Par contre étudier votre code et en faire un K-means incrémental, çà c'est un boulot que pas grand monde fera à votre place...

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

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    merci a vos réponses..

    Je n'ai posté ce sujet qu'après une longue recherche sur Internet, dans l'espoir de trouver ici une solution, indication... et pas une redirection vers google.

    merci à vous.

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Points : 634
    Points
    634
    Par défaut
    Bonjour

    Ceci pourrait vous aider exemple d'incrémentation

    - B

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Citation Envoyé par bonjourajax Voir le message
    Bonjour

    Ceci pourrait vous aider exemple d'incrémentation

    - B
    Oui c'est un peu ce que je propose
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par fideel Voir le message
    Je n'ai posté ce sujet qu'après une longue recherche sur Internet, dans l'espoir de trouver ici une solution, indication... et pas une redirection vers google.
    Des algos et des codes existent et sont faciles à trouver.
    Ils ne font peut être pas exactement ce que vous voulez mais devrait vous inspirer quant aux changements à faire à votre code initial pour construire votre solution. C'est un travail de recherche et de conception qu'on peut difficilement faire à votre place car on n'est pas dans votre tête, on ne connaît pas vos contraintes, ...
    Et sans connaître l'algo. que vous voulez réaliser avec Python, vous êtes encore loin de pouvoir coder quoi que ce soit (et de l'aide sur les difficultés que vous pourriez rencontrer à coder - on ne sait trop quoi - avec Python).

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

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    salut.
    le code que j'ai posté est simple, les étapes parcourus sont claires.

    1). Initializer les centroids par les 'k' premiers elements du dataset :

    en variante incrémentale on initialise avec k=2.

    2). Début des iterations

    2.1) Chercher la distance entre point et cluster; choix du plus proche centroid

    2.2) Varier les points de données du cluster pour recalculer les centroïdes jusqu'à convergence.

    l'algorithme du incrémental Kmeans est le suivant:

    Nom : Sans titre.png
Affichages : 1719
Taille : 41,4 Ko

    les lien que vous m'avez donner sont des explications de l'incrémental kmeans avec la version intégrée dans Sklean. j'ai pas utilisé le kmeans du sklearn, mon programme implémente le kmeans. l'import de kmeans que vous voyez en haut du code c'est juste pour l'estimation du nombre k avec les méthodes silhouette, elbow...

    dataset utilisé c'est Iris.csv.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Si vous pensez que ce que vous avez comme description est suffisant, il vous reste à essayer de le coder avec Python et d'exposer, le cas échéant, les difficultés rencontrées...

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

  13. #13
    Membre extrêmement actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Points : 634
    Points
    634
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Oui c'est un peu ce que je propose
    Ah ouais merde
    C'est le premier lien que j'ai trouvé sur google il avait l'air de correspondre à la problématique

    - B

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    salut.

    j'ai ce programme de la version incrémentale du kmeans, et j'ai un autre programme du kmeans de base.

    mon problème c'est lorsque je calcule le temps d'exécution de chaque un de ces programme je trouve :

    Total time in seconds: 0.3058140277862549 pour le basic.

    Total time in seconds: 0.37776637077331543 pour l'incrémentale.

    normalement je dois avoir le contraire. parce que la version incrémentale est plus rapide que la version de base.

    2ème problème: l'orsque le nombe de clusters K est supérieur à 7 j'obtient l'erreur suivante;

    Inc_Kmeans.py", line 26, in initCentroids
    centroids[i, :] = dataSet[index, :]
    File "c:\winpython-64bit-3.6.3.0qt5\python-3.6.3.amd64\lib\site-packages\numpy\matrixlib\defmatrix.py", line 284, in __getitem__
    out = N.ndarray.__getitem__(self, index)
    IndexError: index 0 is out of bounds for axis 0 with size 0

    merci d'avance.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par fideel Voir le message
    mon problème c'est lorsque je calcule le temps d'exécution de chaque un de ces programme je trouve :

    Total time in seconds: 0.3058140277862549 pour le basic.

    Total time in seconds: 0.37776637077331543 pour l'incrémentale.

    normalement je dois avoir le contraire. parce que la version incrémentale est plus rapide que la version de base.
    Il ne suffit pas de le dire, il faut aussi donner le jeu de données, les procédures de lancements des deux programmes et un code complet: si quelqu'un à le temps de travailler la dessus, il va d'abord faire tourner votre truc pour essayer de reproduire avant d'essayer de comprendre.

    2ème problème: l'orsque le nombe de clusters K est supérieur à 7 j'obtient l'erreur suivante;

    Inc_Kmeans.py", line 26, in initCentroids
    centroids[i, :] = dataSet[index, :]
    File "c:\winpython-64bit-3.6.3.0qt5\python-3.6.3.amd64\lib\site-packages\numpy\matrixlib\defmatrix.py", line 284, in __getitem__
    out = N.ndarray.__getitem__(self, index)
    IndexError: index 0 is out of bounds for axis 0 with size 0
    Je n'ai pas lu le code mais il semble normal qu'en augmentant "k", on se retrouve avec des régions vides et si la condition n'est pas testée...

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

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    c'est bon.

    merci.

Discussions similaires

  1. ALgorithme Kmeans
    Par khalil.ajmi dans le forum Images
    Réponses: 3
    Dernier message: 11/12/2013, 15h25
  2. Algorithme kmeans
    Par myriamulrik dans le forum Images
    Réponses: 8
    Dernier message: 03/02/2013, 15h03
  3. Aide kmeans clustering scipy Erreur quadratique
    Par AI_LINUX dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 10/08/2012, 09h58
  4. Algorithme Kmeans: nombre de noyaux
    Par ikuzar dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 27/02/2012, 18h57
  5. Choix de l'algorithme de clustering
    Par nounouuuuu201186 dans le forum Méthodes prédictives
    Réponses: 4
    Dernier message: 11/12/2011, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo