predict 메서드
Coddy의 머신 러닝 입문 코스 레슨. 19개 중 8번째.
챌린지
중급predict 메서드를 완성하세요.
이 메서드는 새로운 점들의 리스트인 X를 인자로 받습니다.
각각의 새로운 점에 대해, 해당 점과 self.points에 저장된 모든 다른 점들 사이의 거리를 계산하세요. 가장 가까운 self.k개의 점들의 라벨을 추출합니다.
가장 가까운 점들 중에서 가장 많이 나타나는 라벨(다수결)을 찾으세요. 이것이 예측된 클래스가 됩니다.
예를 들어, 다음과 같은 점들과 라벨들이 있다고 가정해 봅시다:
| points | (1, 5) | (5, 0) | (3, 2) | (8, 1) | (4, 4) | (7, 7) |
| labels | A | B | A | B | C | A |
여기에 새로운 점 (3, 3)이 있습니다.
이 점과 다른 모든 점들 사이의 거리는 다음과 같습니다:
| points | (1, 5) | (5, 0) | (3, 2) | (8, 1) | (4, 4) | (7, 7) |
| distance from (3, 3) | 8 | 13 | 1 | 29 | 2 | 32 |
| labels | A | B | A | B | C | A |
만약 k = 3이라면, 새로운 점과 가장 가까운 3개의 점을 찾아야 합니다. 가장 가까운 점들은 (3, 2), (1, 5), (4, 4)입니다. 이 점들에 해당하는 라벨은 A, A, C입니다. A가 2개이고 C가 1개이므로, A가 다수이며 따라서 새로운 점은 A로 분류됩니다.
predict 메서드는 새로운 점들에 대해 분류된 라벨들의 리스트를 반환해야 합니다.
라벨 리스트에서 다수결 라벨을 찾으려면 다음을 사용하세요: max(set(labels), key = labels.count)
직접 해보기
class KNN:
def __init__(self, k):
self.points = None
self.labels = None
self.k = k
def distance(self, point_a, point_b):
# Write your code here
return (sum([(point_a[i] - point_b[i])**2 for i in range(len(point_a))]))**0.5
def fit(self, X_train, y_train):
# Write your code here
self.points = X_train
self.labels = y_train
def predict(self, X_test):
pass머신 러닝 입문의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러