Menu
CoddyTech

Medir la similitud

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 2 de 51.

En k-NN, «más cercano» significaba la distancia más pequeña. Para encontrar grupos, necesitas calcularla para cada par de filas: una tabla de distancias. Cuatro amigos puntuaron dos películas, del 1 al 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 fila i contiene la distancia de la persona amiga i a todas las demás. Aquí está table, representada como una cuadrícula:

Una cuadrícula de 4 por 4 con las distancias entre Ana, Ben, Cy y Dee. La diagonal contiene 0.0. Las dos celdas de Ana y Ben, 1.4, están resaltadas como las más pequeñas fuera de la diagonal; Ana y Cy son quienes están más lejos, con 9.9

Omite la diagonal de 0, que compara a cada amigo consigo mismo. El número más pequeño que queda corresponde al par más parecido; el más grande, al más diferente. Distancia pequeña, filas similares.

challenge icon

Desafío

Fácil

Una barra de jugos añade a su menú el nuevo batido del chef, leído por el programa. ¿Cuáles dos se parecen tanto que se podría quitar uno? ¿Cuáles dos son más diferentes, para una degustación?

  1. Construye la tabla de distancias de menu.
  2. Encuentra el par más parecido y el más diferente: cada par una sola vez, nunca un batido consigo mismo.
  3. Imprime ambos pares, con los nombres en el orden del menú y las distancias con 1 decimal.

Para otro menú:

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

Pruébalo tú mismo

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Una fila por batido, gramos por taza: fruta, verduras de hoja verde, yogur
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 nueva receta del chef se añade al menú como última fila
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online