Bonjour, je m'excuse d'avance pour la longueur de cette question, mais est-ce-que quelqu'un pourrait m'aider?
Ci-dessous, on donne un échantillon constitué de 30 éléments réparti en 3 classes (les cercles en rouge, les losanges en vert et les croix en bleu) selon 2 critères (2 dimensions : et ). On cherche à classifier l’élément représenté en violet.
(voir l'image en pièce jointe)
1/ Sur un papier, rappeler la formule mathématique correspondant à la distance euclidienne entre 2 points A et B de coordonnées respectives (x1, x2) et (y1, y2)
Note : Cette formule se généralise à n dimensions, on a donc pour 2 points A(x1, x2, ...., xn) et , B(y1, y2, ...yn)
(voir l'image de la formue en pièce jointe)
2/ Implémenter en Python la « nouvelle » fonction permettant de calculer la distance euclidienne entre 2 points possédant n critères. On pourra prendre ces critères (réels) comme une liste possédant n éléments de type réel. Cette fonction prendra donc en paramètre 2 listes : les critères du 1er élément et les critères du 2eme élément.
3/ Que doit-on changer dans les fonctions Kvoisins et PredireLaClasse (implémentées dans l’activité n°2) pour s’adapter à une liste d’éléments possédant plusieurs critères ?
Note : On prendra par exemple pour les éléments de coordonnées (1.0, 1.0), (2.0, 1.0) et (8.0, 6.0) de classe respective ‘Cercle’, ‘Cercle’ et ‘Croix’, l’implémentation suivante :
Element = [ [1.0, 1.0], [2.0, 1.0], [8.0, 6.0] ]
Classe = [ ‘Cercle’, ‘Cercle’, ‘Croix’]
4/ Implémenter la solution permettant de résoudre notre problème initial.
Par exemple:
Test Résultat
elements = [[1.0, 1.0], [1.0, 4.0], [2.0, 3.0], [2.0, 2.0], [2.0, 5.0], [3.0, 4.0], [3.0, 3.0], [4.0, 3.0], [3.0, 2.0], [2.0, 1.0],
[7.0, 6.0], [8.0, 6.0], [9.0, 5.0], [9.0, 6.0], [9.0, 7.0], [9.0, 8.0], [9.0, 9.0], [10.0, 8.0], [10.0, 7.0], [11.0, 7.0],
[10.0, 6.0], [15.0, 8.0], [16.0, 8.0], [15.0, 9.0], [14.0, 7.0], [13.0, 10.0], [13.0, 8.0], [13.0, 9.0], [13.0, 7.0], [14.0, 8.0]]
Classes = ['Cercle', 'Cercle', 'Cercle', 'Cercle', 'Cercle', 'Cercle','Cercle', 'Cercle', 'Cercle','Cercle',
'Losange', 'Losange','Losange','Losange','Losange','Losange','Losange','Losange','Losange','Losange',
'Losange', 'Croix', 'Croix', 'Croix', 'Croix', 'Croix', 'Croix', 'Croix', 'Croix', 'Croix' ]
nouvel_element = [5.0, 6.0]
k = 1
lst_voisins = Kvoisins(elements, k, nouvel_element)
print("La classe d'appartenance prédite de l'élément d'abscis
Lista de comentários
d(A,B) = racine_carree((y1-x1)^2 + (y2-x2)^2)
2/ Voici une implémentation en Python de la fonction permettant de calculer la distance euclidienne entre 2 points possédant n critères :
```python
import math
def distance_euclidienne(point1, point2):
somme_carres = 0
for i in range(len(point1)):
somme_carres += (point1[i] - point2[i])**2
return math.sqrt(somme_carres)
```
Cette fonction prend en paramètre 2 listes : les critères du 1er élément et les critères du 2eme élément. Elle calcule la distance euclidienne entre ces deux points en parcourant les listes de critères et en calculant la somme des carrés des différences entre les critères correspondants. Puis elle retourne la racine carrée de cette somme.
3/ Pour utiliser la fonction distance_euclidienne dans les fonctions Kvoisins et PredireLaClasse, il faut remplacer la distance de Manhattan (ou toute autre distance utilisée) par la distance euclidienne.
Dans la fonction Kvoisins, il faut donc remplacer la ligne suivante :
```python
distances.append((trainX[i], distance_manhattan(trainX[i], testX)))
```
par :
```python
distances.append((trainX[i], distance_euclidienne(trainX[i], testX)))
```
Dans la fonction PredireLaClasse, il faut remplacer la ligne suivante :
```python
voisins = trier_par_distance_manhattan(voisins)
```
par :
```python
voisins = trier_par_distance_euclidienne(voisins)
```