Menu
CoddyTech

유사도 측정하기

Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 2번째.

k-NN에서 가장 가까운 것은 거리가 가장 작다는 뜻이었습니다. 그룹을 찾으려면 모든 행의 쌍에 대해 거리를 구해야 합니다. 바로 거리 표입니다. 네 명의 친구가 두 영화를 1부터 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))

행 i에는 친구 i와 모든 사람 사이의 거리가 들어 있습니다. 격자로 그린 table은 다음과 같습니다:

Ana, Ben, Cy, Dee 사이의 거리를 나타내는 4×4 격자. 대각선에는 0.0이 있습니다. Ana와 Ben 사이의 두 셀은 1.4로, 대각선 바깥의 값 중 가장 작아 강조 표시되어 있습니다. Ana와 Cy 사이의 거리는 9.9로 가장 멉니다.

0인 대각선은 건너뛰세요. 각 친구와 자기 자신을 비교한 것입니다. 남은 숫자 중 가장 작은 값은 가장 비슷한 쌍이고, 가장 큰 값은 가장 다른 쌍입니다. 거리가 작으면 행이 비슷합니다.

challenge icon

챌린지

쉬움

주스 바에서 프로그램이 읽어 들인 셰프의 새 스무디를 메뉴에 추가합니다. 어떤 두 스무디가 너무 비슷해서 하나를 빼도 될까요? 시음 세트에 넣을 스무디 중 가장 다른 두 가지는 무엇일까요?

  1. menu의 거리 표를 만드세요.
  2. 가장 비슷한 쌍과 가장 다른 쌍을 찾으세요. 각 쌍은 한 번만 찾고, 스무디 하나와 자기 자신을 짝짓지 마세요.
  3. 두 쌍 모두 이름은 메뉴 순서대로, 거리는 소수점 첫째 자리까지 출력하세요.

다른 메뉴의 경우:

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

직접 해보기

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# 스무디당 한 행, 컵당 그램 수: 과일, 녹색 채소, 요거트
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# 셰프의 새 레시피가 메뉴의 마지막 행에 추가됩니다
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

비지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러