método predict
Lição 11 de 19 do curso Introdução ao aprendizado de máquina da Coddy.
Desafio
MédioO método predict calcula a distância de cada novo ponto individual para todos os outros centroides. O ponto é atribuído ao cluster do centroide mais próximo.
Para cada novo ponto, atribua o índice do centroide mais próximo. Retorne a lista dos clusters atribuídos previstos.
Experimente você mesmo
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):
passTodas as lições de Introdução ao aprendizado de máquina
Pratique por conta própria: Compilador de Python online