Menu
CoddyTech

Đo độ tương đồng

Thuộc phần Học không giám sát trong hành trình Machine Learning của Coddy. Bài học 2 trên 51.

Trong k-NN, gần nhất nghĩa là có khoảng cách nhỏ nhất. Để tìm các nhóm, bạn cần tính khoảng cách cho mọi cặp hàng: một bảng khoảng cách. Bốn người bạn chấm điểm cho hai bộ phim, từ 1 đến 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))

Hàng i lưu khoảng cách từ người bạn i đến mọi người. Đây là table, được minh họa dưới dạng lưới:

Lưới 4 × 4 biểu thị khoảng cách giữa Ana, Ben, Cy và Dee. Đường chéo chứa giá trị 0.0. Hai ô ứng với Ana và Ben, có giá trị 1.4, được tô sáng vì có giá trị nhỏ nhất ngoài đường chéo; Ana và Cy ở xa nhau nhất, với khoảng cách 9.9

Bỏ qua đường chéo số 0, vì mỗi người bạn được so sánh với chính họ. Số nhỏ nhất còn lại là cặp giống nhau nhất, số lớn nhất là cặp khác nhau nhất. Khoảng cách nhỏ thì các hàng tương tự nhau.

challenge icon

Thử thách

Dễ

Quầy nước ép thêm món sinh tố mới của đầu bếp, do chương trình đọc vào, vào thực đơn. Hai món nào giống nhau đến mức có thể bỏ một món? Hai món nào khác nhau nhất để phục vụ trong một lượt nếm thử?

  1. Lập bảng khoảng cách của menu.
  2. Tìm cặp giống nhau nhất và cặp khác nhau nhất: mỗi cặp chỉ xuất hiện một lần, không ghép một món sinh tố với chính nó.
  3. In cả hai cặp, tên theo thứ tự trong thực đơn, khoảng cách lấy 1 chữ số thập phân.

Với một thực đơn khác:

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

Tự làm thử

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# Mỗi loại sinh tố chiếm một hàng, số gam trong mỗi cốc: trái cây, rau xanh, sữa chua
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# Công thức mới của đầu bếp được thêm vào thực đơn ở hàng cuối
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học không giám sát

Tự luyện tập: Trình biên dịch Python online