Menu
CoddyTech

Mesurer la similarité

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 2 sur 51.

Dans k-NN, le plus proche désignait la plus petite distance. Pour trouver des groupes, il vous faut cette distance pour chaque paire de lignes : une table des distances. Quatre amis ont noté deux films, de 1 à 10 :

ratings = np.array([[9, 2], [8, 3], [2, 9], [3, 7]])  # Ana, Ben, Cy, Dee
n = len(ratings)
table = np.zeros((n, n))
for i in range(n):
    table[i] = np.sqrt(((ratings - ratings[i]) ** 2).sum(axis=1))

La ligne i contient la distance entre l’ami i et tout le monde. Voici table, représentée sous forme de grille :

Une grille de 4 sur 4 des distances entre Ana, Ben, Cy et Dee. La diagonale contient 0.0. Les deux cellules pour Ana et Ben, 1.4, sont mises en évidence comme les plus petites hors de la diagonale ; Ana et Cy sont les plus éloignés à 9.9

Ignore la diagonale de 0, chaque ami comparé à lui-même. Le plus petit nombre restant correspond à la paire la plus semblable, le plus grand à la plus différente. Petite distance, lignes similaires.

challenge icon

Défi

Facile

Un bar à jus ajoute à son menu le nouveau smoothie du chef, lu par le programme. Lesquels se ressemblent tellement que l’un peut disparaître ? Lesquels sont les plus différents, pour un assortiment de dégustation ?

  1. Construis le tableau des distances de menu.
  2. Trouve la paire la plus semblable et la plus différente : chaque paire une seule fois, jamais un smoothie avec lui-même.
  3. Affiche les deux paires, avec les noms dans l’ordre du menu et les distances à 1 décimale.

Pour un autre menu :

Most alike: Lemon Zing and Lime Twist (14.1 g apart)
Most different: Choco Shake and Cucumber Cool (212.6 g apart)

Essayez vous-même

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Une ligne par smoothie, en grammes par tasse : fruits, légumes verts, yaourt
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# La nouvelle recette du chef est ajoutée au menu en dernière ligne
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne