Advertisement
Sax

K-means - Ejemplo

Sax
Mar 12th, 2012
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.99 KB | None | 0 0
  1. # -*- coding: utf -*-
  2. # --------------------------------------------- #
  3. # Universidad Autónoma de Nuevo León            #
  4. # Facultad de Ingeniería Mecánica y Eléctrica   #
  5. # Sistemas Adaptativos                          #
  6. # Xavier Fernando Sánchez Díaz                  #
  7. # 1540717                                       #
  8. # --------------------------------------------- #
  9.  
  10. import math
  11.  
  12. def distancia(p, c):
  13.     """ Devuelve la distancia euclidiana entre un punto p y el centroide c """
  14.  
  15.     p1_x = float(p[0])
  16.     p1_y = float(p[1])
  17.     p2_x = float(c[0])
  18.     p2_y = float(c[1])
  19.    
  20.     return math.sqrt(math.pow((p2_x - p1_x),2) + math.pow((p2_y - p1_y),2))
  21.  
  22. def nuevo_centroide(grupo):
  23.     """ Devuelve la posicion del nuevo centroide """
  24.    
  25.     n = float(len(grupo))
  26.     c = []
  27.     sumx = 0
  28.     sumy = 0
  29.  
  30.     for i in range(int(n)):
  31.         sumx = sumx + grupo[i][0]
  32.         sumy = sumy + grupo[i][1]
  33.  
  34.     cx = float(sumx / n)
  35.     cy = float(sumy / n)
  36.  
  37.     c.append(cx)
  38.     c.append(cy)
  39.    
  40.     return c
  41.  
  42. #Arreglos auxiliares
  43. puntos = []
  44.  
  45. grupoA = []
  46. grupoB = []
  47.  
  48. #Puntos Iniciales
  49. puntos.append([1,1])
  50. puntos.append([2,4])
  51. puntos.append([3,2])
  52. puntos.append([7,2])
  53. puntos.append([8,3])
  54.  
  55.  
  56. #Centroides Iniciales
  57. c1 = [3,5]
  58. c2 = [9,1]
  59.  
  60. #Proceso
  61. it = int(raw_input("Repeticiones? --> ")) #No. de iteraciones del algoritmo
  62.  
  63. for it in range(it):
  64.  
  65.     for i in range(len(puntos)):
  66.         if (distancia(puntos[i], c1) < distancia(puntos[i], c2)):
  67.             grupoA.append(puntos[i])
  68.         else:
  69.             grupoB.append(puntos[i])
  70.  
  71.     print "El centroide 1 es: " + str(c1)
  72.     print "El centroide 2 es: " + str(c2)
  73.    
  74.     print "\nVuelta #%d" % (it+1)
  75.     print "\n\nEl grupo A es: " + str((grupoA))
  76.     print "El grupo B es: " + str((grupoB))
  77.  
  78.     c1 = nuevo_centroide(grupoA)
  79.     c2 = nuevo_centroide(grupoB)
  80.     print ("\nLos nuevos centroides son:")
  81.     print (c1)
  82.     print (c2)
  83.     print "--------------------------------------------"
  84.  
  85.     #Borra los grupos para poder recalcularlos
  86.     grupoA[:] = []
  87.     grupoB[:] = []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement