Menu
CoddyTech

Mierzenie podobieństwa

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 2 z 51.

W k-NN „najbliższy” oznaczał najmniejszą odległość. Aby znaleźć grupy, potrzebujesz jej dla każdej pary wierszy: tabeli odległości. Czterech znajomych oceniło dwa filmy w skali od 1 do 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))

Wiersz i zawiera odległości znajomego i od wszystkich. Oto table przedstawiona w formie siatki:

Siatka 4 na 4 przedstawiająca odległości między Aną, Benem, Cy i Dee. Na przekątnej znajdują się wartości 0.0. Dwie komórki dotyczące Any i Bena z wartością 1.4 są wyróżnione jako najmniejsze poza przekątną; Ana i Cy są najdalej od siebie — 9.9

Pomiń przekątną z wartościami 0 — przedstawia ona każdego znajomego w zestawieniu z samym sobą. Najmniejsza pozostała liczba oznacza najbardziej podobną parę, a największa — najbardziej różną. Mała odległość oznacza podobne wiersze.

challenge icon

Wyzwanie

Łatwy

Bar z sokami dodaje do menu nowy koktajl szefa kuchni, wczytany przez program. Które dwa koktajle są tak podobne, że można zrezygnować z jednego? Które dwa najbardziej się różnią i warto uwzględnić je w zestawie degustacyjnym?

  1. Zbuduj tabelę odległości dla menu.
  2. Znajdź najbardziej podobną i najbardziej różniącą się parę: każdą parę uwzględnij tylko raz, nigdy nie zestawiaj koktajlu z samym sobą.
  3. Wypisz obie pary, nazwy w kolejności z menu, a odległości zaokrąglij do 1 miejsca po przecinku.

Dla innego menu:

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

Spróbuj swoich sił

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Jeden wiersz na smoothie, gramy na kubek: owoce, zielone warzywa, jogurt
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# Nowy przepis szefa kuchni trafia do menu jako ostatni wiersz
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online