Menu
CoddyTech

Medindo a Similaridade

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 2 de 51.

No k-NN, mais próximo significava a menor distância. Para encontrar grupos, você precisa disso para cada par de linhas: uma tabela de distâncias. Quatro amigos avaliaram dois filmes, de 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))

A linha i contém a distância do amigo i em relação a todos. Aqui está table, representada como uma grade:

Uma grade de 4 por 4 das distâncias entre Ana, Ben, Cy e Dee. A diagonal contém 0.0. As duas células de Ana e Ben, 1.4, estão destacadas como o menor valor fora da diagonal; Ana e Cy estão mais distantes, a 9.9

Ignore a diagonal 0: cada amigo comparado consigo mesmo. O menor número restante indica o par mais parecido; o maior, o mais diferente. Distância pequena, linhas semelhantes.

challenge icon

Desafio

Fácil

Uma juice bar adiciona ao cardápio o novo smoothie do chef, lido pelo programa. Quais dois são tão parecidos que um deles pode sair? Quais dois são mais diferentes, para uma degustação?

  1. Monte a tabela de distâncias de menu.
  2. Encontre o par mais parecido e o mais diferente: cada par uma única vez, nunca um smoothie com ele mesmo.
  3. Imprima os dois, com os nomes na ordem do cardápio e as distâncias com 1 casa decimal.

Para outro cardápio:

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

Experimente você mesmo

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Uma linha por smoothie, gramas por copo: frutas, verduras, iogurte
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# A nova receita do chef entra no cardápio como a última linha
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online