Está en la página 1de 2

================ algoritmo de k-means =========================

# Apellido y nom: Cahuana Vilca Adelaida Rocio


# Codigo: 145433

import numpy as np
import os

def calcular_distancia(punto, centroide):


return np.sqrt(np.sum((punto - centroide)**2))

def asignar_al_cluster_n(distancia, data_punto, centroides):


indice_del_minimo = min(distancia, key=distancia.get)
return [indice_del_minimo, data_punto,
centroides[indice_del_minimo]]

def calcular_nuevos_centroides(grupo, centroides):


return np.array(grupo + centroides)/2

def iterate_k_means(data_puntos, centroides,


cantidad_d_iteraciones):
label = []
etiqueta_y_cluster = []
total_de_puntos = len(data_puntos)
# cantidad de centroides
k = len(centroides)

for iteracion in range(0, cantidad_d_iteraciones):


for indice_del_punto in range(0, total_de_puntos):
distancia = {}
for indice_de_centroide in range(0, k):
distancia[indice_de_centroide] =
calcular_distancia(data_puntos[indice_del_punto],
centroides[indice_de_centroide])
label = asignar_al_cluster_n(distancia,
data_puntos[indice_del_punto], centroides)
centroides[label[0]] =
calcular_nuevos_centroides(label[1], centroides[label[0]])

if iteracion == (cantidad_d_iteraciones - 1):


etiqueta_y_cluster.append(label)

return [etiqueta_y_cluster, centroides]

def print_resultados(result):
print("Resultado de agrupamiento k-Means: \n")
for data in result[0]:
print("punto: {}".format(data[1]))
print("asignado al grupo : {} \n".format(data[0]))
print("posiciones de los ultimos centroids: \n
{}".format(result[1]))
# centroides iniciales
# k = 3
def crear_centroides_iniciales():
centroids = []
centroids.append([158,40])
centroids.append([170,50])
centroids.append([170,68])
return np.array(centroids)

if __name__ == "__main__":
filename = "data.csv"
datos_puntos = np.genfromtxt(filename, delimiter=",")
centroides_iniciales = crear_centroides_iniciales()
cantidad_d_iteraciones = 100

[grupo_y_etiqueta, nuevos_centroides] =
iterate_k_means(datos_puntos, centroides_iniciales,
cantidad_d_iteraciones)
print_resultados([grupo_y_etiqueta, nuevos_centroides])
print()

También podría gustarte