Vous êtes sur la page 1sur 3

# <tmp 2>

001| ## Importer les données


002| import csv
003| file=open('D:/IA/BostonHouses.csv','r')
004| R = csv.reader(file,delimiter=';')
005| data=[]
006| for e in R:
007| T=[]
008| for i in range(len(e)-1) :
009| T.append(float(e[i]))
010| data.append(T)
011|
012| print(data)
013|
014| ## Fonction de calcul de distance euclidiènne
015| def distance(X,Y):
016| s=0
017| for i in range(len(X)):
018| s=s+(X[i]-Y[i])**2
019| return s**0.5
020|
021| print(distance(data[0],data[1]))
022|
023| ## Choix alétoire de k centroides
024| from random import randint
025| def centroides_depart(data,k):
026| C=[]
027| while len(C)<k:
028| i=randint(0,len(data)-1)
029| if data[i] not in C: C.append(data[i])
030| return C
031|
032| C=centroides_depart(data,3)
033| print(C)
034|
035| ## Recherche du centroide le plus proche à une maison
036| def centroide_proche(m,C):
037| i,d=0,distance(m,C[0])
038| for j in range(1,len(C)):
039| r=distance(m,C[j])
040| if r<d: i,d=j,r
041| return i
042|
043| print(centroide_proche(data[0],C))
044| print(centroide_proche(data[100],C))
045|
046| ## Partitionnement des maisons en groupes (cluster)
1
047| def partitions(data,C):
048| k=len(C)
049| D={i:[] for i in range(k)}
050| for i in range(len(data)):
051| p=centroide_proche(data[i],C)
052| D[p].append(data[i])
053| return D
054|
055| D=partitions(data,C)
056| print(D[0])
057|
058| ## Calcul du nouveau centroide d'un cluster L
059| def calcul_centroide(L):
060| n=len(L)
061| p=len(L[0])
062| c=[0]*p
063| for m in L:
064| for j in range(p):
065| c[j]=c[j]+m[j]
066| for j in range(p):
067| c[j]=round(c[j]/n,2)
068| return c
069|
070| print(calcul_centroide(D[0]))
071|
072| ## Calcul des nouveaux centroides des k clusters
073| def maj_centroides(D):
074| C=[]
075| k=len(D)
076| for i in range(k):
077| c=calcul_centroide(D[i])
078| C.append(c)
079| return C
080|
081| C=maj_centroides(D)
082| print(C)
083|
084| ## Fonction k_means
085| def k_means(data,k,n):
086| C0=centroides_depart(data,k)
087| D=partitions(data,C0)
088| C1=maj_centroides(D)
089| c=1
090| while c<n and C0!=C1:
091| c=c+1
092| C0=C1
093| D=partitions(data,C0)
094| C1=maj_centroides(D)
2
095| return C1,D
096|
097| ## Recherche du k optimum: Méthode du coude
098| import matplotlib.pyplot as plt
099|
100| X,Y=[],[]
101| for k in range(1,11):
102| X.append(k)
103| C,D=k_means(data,k,50)
104| s=0
105| for i in range(k):
106| for e in D[i]:
107| s=s+distance(e,C[i])
108| Y.append(s)
109| plt.plot(X,Y,'*-')
110| plt.grid()
111| plt.show()
112|
113|
114| ## Représentation graphique des résultats en utilisant
le k optimum
115| import matplotlib.pyplot as plt
116| k=5
117| C,D=k_means(data,k,50)
118| for i in range(k):
119| X,Y=[],[]
120| for e in D[i]:
121| X.append(sum(e[:-1]))
122| Y.append(e[-1])
123| plt.scatter(X,Y)
124| plt.show()

Vous aimerez peut-être aussi