predict 메서드
Coddy의 머신 러닝 입문 코스 레슨. 19개 중 11번째.
챌린지
중급predict 메서드는 모든 새로운 개별 점과 다른 모든 센트로이드 사이의 거리를 계산합니다. 해당 점은 가장 가까운 센트로이드의 클러스터에 할당됩니다.
각 새로운 점에 대해 가장 가까운 센트로이드의 인덱스를 할당하세요. 예측되어 할당된 클러스터의 리스트를 반환합니다.
직접 해보기
def euclidian_distance(point_a, point_b):
return (sum([(point_a[i] - point_b[i])**2 for i in range(len(point_a))]))**0.5
class KMeans:
def __init__(self, k):
self.k = k
def find_cluster_centroid(self, cluster_points):
# Write your code here
centroid = []
for point in cluster_points:
for dim, value in enumerate(point):
if len(centroid) - 1 < dim:
centroid.append(0)
centroid[dim] += value
for i in range(len(centroid)):
centroid[i] /= len(cluster_points)
return centroid
def fit(self, X_train):
# Write you code here
self.centroids = [X_train[i] for i in range(2, self.k*2 + 1, 2)]
while True:
# Assing each point to centroid
points_clusters = []
for point in X_train:
distances = []
for centroid in self.centroids:
dist_to_point = euclidian_distance(centroid, point)
distances.append(dist_to_point)
closest_centroid_index = distances.index(min(distances))
points_clusters.append((point, closest_centroid_index))
# Update centroids
clusters = {}
for point, cluster in points_clusters:
if cluster not in clusters:
clusters[cluster] = []
clusters[cluster].append(point)
new_centroids = [None]*self.k
for cluster, points in clusters.items():
new_centroids[cluster] = self.find_cluster_centroid(points)
# Check if converged
total_dist = 0
for i in range(len(new_centroids)):
total_dist += euclidian_distance(new_centroids[i], self.centroids[i])
if total_dist < 0.01:
break
self.centroids = new_centroids
def predict(self, X_test):
pass머신 러닝 입문의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러