NSI
Projet n°3
Dans ce projet nous cherchons a classer une fleurs dans plusieurs variétés différentes. Pour cela on utilise le l'algorithme des k plus proches voisins en 2 dimensions.
Ce programme permet de visualiser les données sous forme de graphique
import pandas
import matplotlib.pyplot as plt
iris=pandas.read_csv("iris.csv")
x=iris.loc[:,"petal_length"]
y=iris.loc[:,"petal_width"]
lab=iris.loc[:,"species"]
plt.scatter(x[lab == 0], y [lab == 0], color='g', label='setosa')
plt.scatter(x[lab == 1], y[lab == 1], color='r', label='virginica')
plt.scatter(x[lab == 2], y[lab == 2], color='b', label='versicolor')
plt.legend()
plt.show()
Programme des k plus proches voisins en 2D
import pandas
import matplotlib.pyplot as plt
import math
# Données labélisées et la donnée à classer
iris=pandas.read_csv("iris.csv")
x=iris.loc[:,"petal_length"]
y=iris.loc[:,"petal_width"]
lab=iris.loc[:,"species"]
longueur = 2.5
largeur = 0.75
def distance (x1 : float, y1 : float, x2 : float, y2 : float ) -> float :
'''calcule la valeur absolue de la distance entre les points 1 et 2'''
return math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
distances =[]
for index in range(150):
distances.append([distance(x[index],y[index],longueur,largeur),lab[index]])
distances.sort()
k=3
def determiner_classe(distances_classes : list, y : int) -> str:
nombre_0=0
nombre_1=0
nombre_2=0
for i in range (y):
if distances[i][1] == 0:
nombre_0=nombre_0+1
if distances[i][1] == 1:
nombre_1=nombre_1+1
if distances[i][1] == 2:
nombre_2=nombre_2+1
if nombre_0 > nombre_1 and nombre_0 > nombre_2:
return " La fleur est une setosa "
if nombre_1 > nombre_2 and nombre_1 > nombre_0:
return " La fleur est une versicolor "
if nombre_2 > nombre_1 and nombre_2 > nombre_1:
return " La fleur est une virginica "
print(determiner_classe(distances,k))
plt.axis('equal')
plt.scatter(x[lab == 0], y[lab == 0], color='g', label='setosa')
plt.scatter(x[lab == 1], y[lab == 1], color='r', label='versicolor')
plt.scatter(x[lab == 2], y[lab == 2], color='b', label='virginica')
plt.scatter(longueur, largeur, color='y', label='à classer')
plt.legend()
plt.show()
Ceci est le graphique représentant toute les fleurs trier par variétées
