Menu
CoddyTech

Misurare la similarità

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 2 di 51.

In k-NN, «più vicino» significava la distanza minore. Per trovare gruppi, ti serve per ogni coppia di righe: una tabella delle distanze. Quattro amici hanno valutato due film, da 1 a 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 riga i contiene la distanza dell'amico i da tutti. Ecco table, rappresentata come una griglia:

Una griglia 4 per 4 delle distanze tra Ana, Ben, Cy e Dee. La diagonale contiene 0.0. Le due celle di Ana e Ben, 1.4, sono evidenziate come il valore più piccolo fuori dalla diagonale; Ana e Cy sono i più distanti, con 9.9

Salta la diagonale degli 0, cioè ogni amico confrontato con sé stesso. Il numero più piccolo rimasto indica la coppia più simile, quello più grande la più diversa. Distanza ridotta, righe simili.

challenge icon

Sfida

Facile

Un juice bar aggiunge al menu il nuovo frullato dello chef, letto dal programma. Quali due sono così simili che se ne può eliminare uno? Quali due sono i più diversi, per una degustazione?

  1. Costruisci la tabella delle distanze di menu.
  2. Trova la coppia più simile e quella più diversa: ogni coppia una sola volta, mai un frullato con sé stesso.
  3. Stampa entrambe, con i nomi nell'ordine del menu e le distanze con 1 cifra decimale.

Per un altro menu:

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

Provalo tu

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Una riga per ogni frullato, grammi per tazza: frutta, verdure a foglia verde, yogurt
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 nuova ricetta dello chef viene aggiunta al menu come ultima riga
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online