fork download
  1. def k_means_clustering(points: list[tuple[float, float]], k: int, initial_centroids: list[tuple[float, float]], max_iterations: int) -> list[tuple[float, float]]:
  2. import numpy as np
  3. my_list=[0]*len(points)
  4. my_list[1]
  5. if k==1:
  6. points=np.array(points)
  7. initial_centroids=[tuple(np.mean(points,axis=0))]
  8. final_centroids=initial_centroids
  9. return final_centroids
  10.  
  11. for _ in range(max_iterations):
  12. for index, items in enumerate(points):
  13. my_list1=[0]*len(initial_centroids)
  14. for indx2, cen in enumerate(initial_centroids):
  15. my_list1[indx2]=np.sqrt(np.sum((np.array(items)-np.array(cen))**2))
  16. # print(my_list1[indx2])
  17. max_val=999999
  18. centroid=9
  19. for index3, value in enumerate(my_list1):
  20. if value<max_val:
  21. centroid=index3
  22. max_val=value
  23. # print(centroid)
  24. my_list[index]=centroid
  25. my_list
  26.  
  27. points_array=np.array(points)
  28.  
  29. if k==1:
  30. cluster0=points_array[np.array(my_list)==0]
  31. initial_centroids=[tuple(np.mean(cluster0,axis=0))]
  32.  
  33. elif k==2:
  34. cluster0=points_array[np.array(my_list)==0]
  35. cluster1=points_array[np.array(my_list)==1]
  36. initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0))]
  37. elif k==3:
  38. cluster0=points_array[np.array(my_list)==0]
  39. cluster1=points_array[np.array(my_list)==1]
  40. cluster2=points_array[np.array(my_list)==2]
  41. initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0)),tuple(np.mean(cluster2,axis=0))]
  42. elif k==4:
  43. cluster0=points_array[np.array(my_list)==0]
  44. cluster1=points_array[np.array(my_list)==1]
  45. cluster2=points_array[np.array(my_list)==2]
  46. cluster3=points_array[np.array(my_list)==3]
  47. initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0)),tuple(np.mean(cluster2,axis=0)),tuple(np.mean(cluster3,axis=0))]
  48.  
  49. initial_centroids
  50. final_centroids=initial_centroids
  51. return final_centroids
  52. def standerd_data_z_score(points):
  53. points = np.array(points, dtype=float)
  54. mean=np.mean(points,dtype=float)
  55. std=np.std(points,dtype=float)
  56. scaled=(points-mean)/std
  57. return scaled, mean, std
  58. # print(k_means_clustering([(1, 1), (2, 2), (3, 3), (4, 4)], 1, [(0,0)], 10))
  59. # print(k_means_clustering([(0, 0), (1, 0), (0, 1), (1, 1), (5, 5), (6, 5), (5, 6), (6, 6),(0, 5), (1, 5), (0, 6), (1, 6), (5, 0), (6, 0), (5, 1), (6, 1)], 4, [(0, 0), (0, 5), (5, 0), (5, 5)], 10))
  60. points = [
  61. (5.1, 2.3, 12),
  62. (4.9, 2.5, 10),
  63. (6.2, 3.0, 15),
  64. (1.5, 0.8, 5),
  65. (1.2, 0.6, 3)
  66. ]
  67.  
  68. import numpy as np
  69. scaled, mean, std=standerd_data_z_score(points)
  70. centr=[(6.2,3,15),(1.35,0.7,4),(5,2.4,11)]
  71.  
  72. centr=np.array(centr,dtype=float)
  73. centr=(centr-mean)/std
  74. finally_centroid=k_means_clustering(scaled, 3, centr, 100)
  75.  
  76. # # max_iterations = 10
  77.  
  78. # points = [(1, 1), (2, 2), (3, 3), (4, 4)]
  79. # k=1
  80. # initial_centroids= [(0,0)]
  81. # max_iterations=10
  82.  
  83. # points[0][0]
  84.  
  85. # my_list=[0]*len(points)
  86. # my_list[1]
  87. # i=int(0)
  88. # for _ in range(max_iterations):
  89. # for index, items in enumerate(points):
  90. # my_list1=[0]*len(initial_centroids)
  91. # for indx2, cen in enumerate(initial_centroids):
  92. # my_list1[indx2]=np.sqrt(np.sum((np.array(items)-np.array(cen))**2))
  93. # # print(my_list1[indx2])
  94. # max_val=999999
  95. # centroid=9
  96. # for index3, value in enumerate(my_list1):
  97. # if value<max_val:
  98. # centroid=index3
  99. # max_val=value
  100. # # print(centroid)
  101. # my_list[index]=centroid
  102. # my_list
  103.  
  104. # points_array=np.array(points)
  105. # if k==1:
  106. # cluster0=points_array[np.array(my_list)==0]
  107. # initial_centroids=[tuple(np.mean(cluster0,axis=0))]
  108.  
  109. # elif k==2:
  110. # cluster0=points_array[np.array(my_list)==0]
  111. # cluster1=points_array[np.array(my_list)==1]
  112. # initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0))]
  113. # elif k==3:
  114. # cluster0=points_array[np.array(my_list)==0]
  115. # cluster1=points_array[np.array(my_list)==1]
  116. # cluster2=points_array[np.array(my_list)==2]
  117. # initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0)),tuple(np.mean(cluster2,axis=0))]
  118.  
  119. # # cluster1
  120. # # initial_centroids=[tuple(np.mean(cluster0,axis=0)),tuple(np.mean(cluster1,axis=0))]
  121. # # initial_centroids
  122.  
  123. # initial_centroids
  124. scaled
  125. finally_centroid
  126. level_data=[0]*5
  127.  
  128. for index, value in enumerate(scaled):
  129. lis=[0]*3
  130. for index2, centroids in enumerate(finally_centroid):
  131. dis1=np.sqrt(np.sum(value-centroids)**2)
  132. lis[index2]=dis1
  133. smallest_val=min(lis)
  134. level_data[index]=lis.index(smallest_val)
  135. scaled
  136. level_data
  137. # dis1=np.sqrt(np.array(value)-np.array(centroids)**2)
  138.  
  139. finally_centroid = np.array(finally_centroid)
  140. import matplotlib.pyplot as plt
  141. plt.scatter(scaled[:, 0], scaled[:, 1], c=level_data, cmap='viridis')
  142. plt.scatter(finally_centroid[:, 0], finally_centroid[:, 1], marker='*', s=200, c='red')
  143. plt.xlabel('Annual Spending ($1000s)')
  144. plt.ylabel('Avg Order Value ($100s)')
  145. plt.title('Customer Segmentation with k-Means')
  146. plt.legend
  147.  
Success #stdin #stdout #stderr 3.55s 68268KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Fontconfig error: No writable cache directories