Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfa12f56

Browse files
authored
Merge pull request#10 from ShortyLogos/start-kmeans
Start coding kmeans, need to move some code to main.py
2 parents5debef0 +d789e03 commitfa12f56

File tree

5 files changed

+75
-3
lines changed

5 files changed

+75
-3
lines changed

‎c62/tp3/doc/Clustering.pptx‎

197 KB
Binary file not shown.

‎c62/tp3/doc/~$3_enonce.docx‎

162 Bytes
Binary file not shown.

‎c62/tp3/kmeans.py‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# matrice de centroïde : k * n, où k = nombre de centroïdes demandés et n = ensemble de tous les mots (nombre de dimensions)
2+
# placer les centroïdes à des coordonnées identiques à des points sélectionnés au hasard à l'initialisation du clustering
3+
# calcul de la distance d'un mot par rapport à un centroïde dans la boucle : utiliser least-squares
4+
# trouver une façon pour que les points de données gardent en mémoire
5+
# il faut penser à inclure les stopwords pour le tp3
6+
7+
fromdaoimportDao
8+
importnumpyasnp
9+
importrandom
10+
11+
# méthode qui sera utilisée par le main/argparse
12+
defpartionnement(bd:Dao,taille:int,k :int):
13+
donnees_uniques,liste_cooccurrences=bd.obtenir_donnees(taille)
14+
kmeans=KMeans(taille,k,liste_cooccurrences,donnees_uniques)
15+
kmeans.equilibrer()
16+
17+
classKMeans:
18+
def__init__(self,taille_fenetre :int,k :int,liste_cooccurrences:list,donnees_uniques:dict):
19+
self.__k=k
20+
self.__taille_fenetre=taille_fenetre
21+
self.__dimensions=len(donnees_uniques)
22+
self.__cooccurrences=self.__construire_matrice_cooccurrences(liste_cooccurrences)
23+
self.__centroides=self.__construire_matrice_centroides()
24+
self.__clusters= {}# [index_mot][index_centroide], va servir à vérifier à chaque itération si des mots on changé de cluster
25+
26+
def__construire_matrice_cooccurrences(self,liste_cooccurrences)->np.array:
27+
matrice=np.zeros((self.__dimensions,self.__dimensions))
28+
iflen(liste_cooccurrences)>0:
29+
forpoint1,point2,scoreinliste_cooccurrences:
30+
matrice[point1,point2]=score
31+
returnmatrice
32+
33+
# on initialise les centroïdes à des coordoonées intelligentes
34+
# on prend celles de points de données au hasard
35+
def__construire_matrice_centroides(self)->np.array:
36+
matrice=np.zeros((self.__k,self.__dimensions))
37+
points_choisis= []
38+
39+
forcentroideinrange(self.__k):
40+
whileTrue:
41+
point=random.randrange(self.__dimensions)
42+
ifpointnotinpoints_choisis:
43+
points_choisis.append(point)
44+
break
45+
46+
matrice[centroide]=self.__cooccurrences[point]
47+
returnmatrice
48+
49+
# méthode utiliser pour déterminer la distance d'un point de donnée par rapport à un centroide quelconque
50+
def__operation_moindre_carres(self,vecteur_point,vecteur_centroide:np.array)->float:
51+
returnnp.sum((vecteur_point-vecteur_centroide)**2)
52+
53+
# méthode qui s'occupera de trouver de manière itérative le point d'équilibre pour tous les centroïdes
54+
# lorsqu'aucun point de donnée n'a changé de cluster (le centroide),
55+
# on considère que l'équilibre a été trouvé et on cesse l'exécution de l'algo
56+
defequilibrer(self)->None:
57+
print(self.__centroides)
58+
forcentroideinself.__centroides:
59+
print(np.sum(centroide))
60+
61+
defmain():
62+
bd=Dao()
63+
bd.connecter()
64+
bd.afficher()
65+
partionnement(bd,5,10)
66+
bd.deconnecter()
67+
68+
return0
69+
70+
if__name__=='__main__':
71+
quit(main())
72+

‎c62/tp3/prediction.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def predire(self, mot: str, nbr_reponses: int, methode_choisie: int) -> None:
5757

5858
def__construire_matrice(self,liste_cooccurrences:list)->np.array:
5959
matrice=np.zeros((len(self.__mots_uniques),len(self.__mots_uniques)))
60-
iflen(liste_cooccurrences)>0:
60+
iflen(liste_cooccurrences)>0:
6161
formot1,mot2,scoreinliste_cooccurrences:
6262
matrice[mot1][mot2]=score
6363
returnmatrice
@@ -82,10 +82,10 @@ def __operation_scalaire(self, vecteur_compare: np.array) -> Score:
8282
returnnp.dot(self.__vecteur_mot,vecteur_compare)
8383

8484
def__operation_moindre_carres(self,vecteur_compare:np.array)->Score:
85-
returnnp.sum((self.__vecteur_mot-vecteur_compare)**2)
85+
returnnp.sum((self.__vecteur_mot-vecteur_compare)**2)
8686

8787
def__operation_city_block(self,vecteur_compare:np.array)->Score:
88-
returnnp.sum(np.abs(self.__vecteur_mot-vecteur_compare))
88+
returnnp.sum(np.abs(self.__vecteur_mot-vecteur_compare))
8989

9090
def__prediction(self,fonction:Callable,maximiser:bool)->list:
9191
liste_resultats= []

‎mainBD.db‎

20 KB
Binary file not shown.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp