Kmeans

K-means是一个反复迭代的过程,算法分为四个步骤:

1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;

2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;

3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;

4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)

 1 import numpy as np
 2 import random
 3 import math
 4 from sklearn.cluster import KMeans
 5 
 6 def km(dataset,k):
 7     random.sample(dataset,k)#打乱顺序
 8     ran = [dataset[i] for i in range(k)]
 9     charge = True
10     while charge:
11         get_fen = [[] for i in range(k)]
12         for i in dataset:
13             temp = np.array([],dtype=int)
14             for j in ran:
15                 temp = np.append(temp,Euclidean(i,j))
16             get_fen[temp.argmin()].append(i)
17             temp = np.array([],dtype=int)
18         temp_ran = [round(np.median(np.array(get_fen[i]))) for i in range(len(get_fen))]
19         if ran == temp_ran:
20             charge = False
21         ran = temp_ran
22     print(ran)
23 def Euclidean(start,end):
24     #计算欧几里得距离
25     result = math.sqrt((start-end)**2)
26     return result
27 
28 def sklearn_use(dataset,k):
29     est = KMeans(n_clusters=k)
30     est.fit(dataset)
31     print(est.cluster_centers_)
32     #print(est.predict(dataset))
33 
34 if __name__ == "__main__":
35     a = [i for i in range(1,10)]
36     km(a,3)#自编  假的kmeans
37     a = np.array(a).reshape(len(a),1)
38     sklearn_use(a,3)#调用sklearn

 

 

posted @ 2018-11-05 11:27  dafeifeifei  阅读(133)  评论(0编辑  收藏  举报