标签:距离 blog pre color 算法 algo 程序 math rom
在模式识别中,K均值算法主要用于分类数目已知的聚类,实现较为简单,算法目的清晰,属于较为简单的动态聚类算法之一。
算法中通过迭代判断前后两次算法的聚类中心是否一致,从而决定是否继续迭代(前后一致则退出算法,完成分类)。
下面的K均值算法的简单示例:
#K-均值算法聚类分析 from numpy import* from math import sqrt #要求编写程序对下列数据进行聚类分析,取K为2 x=array([ [0,0],[1,0],[0,1],[1,1],[2,1], [1,2],[2,2],[3,2],[6,6],[7,6], [8,6],[6,7],[7,7],[8,7],[9,7], [7,8],[8,8],[9,8],[8,9],[9,9]]) #求样本点与聚类中心的距离 def dis(a,b): return sqrt((a[0]-b[0])**2+(a[1]-b[1])**2) #对样本分类 def distribution(x,z_1,z_2,n1,n2): for i in range(0,len(x)): if (dis(x[i],z_1) < dis(x[i],z_2)): n1.append(i) else: n2.append(i) #建立新的聚类中心 def new_dis_center(x,z_1,z_2,n1,n2): z_1_1=[0,0] z_2_1=[0,0] for i in range(0,(len(n1))): z_1_1=z_1_1+x[n1[i]]/len(n1) for i in range(0,(len(n2))): z_2_1=z_2_1+x[n2[i]]/len(n2) return z_1_1,z_2_1 #迭代函数 输入数据以及初始聚类中心 def iteration_fun(x,z_1,z_2): #初始化迭代聚类中心中间量 z_1_1=[0,0] z_2_1=[0,0] n1=[] n2=[] distribution(x,z_1,z_2,n1,n2) (z_1_1,z_2_1)=new_dis_center(x,z_1,z_2,n1,n2) #迭代判断 if (z_1_1 == z_1).all() or (z_2_1==z_2).all(): print("The Clustering Center after iteration:") print("Clustering center one: ") print(z_1) print("Clustering center two: ") print(z_2) else: z_1=z_1_1 z_2=z_2_1 iteration_fun(x,z_1,z_2) #初始化聚类中心(包括备用迭代聚类中心) 聚类样本集 z_1=x[0] z_2=x[1] iteration_fun(x,z_1,z_2)
Python--K-mean-algorithm进行样本点的分类
标签:距离 blog pre color 算法 algo 程序 math rom
原文地址:http://www.cnblogs.com/Mso1350/p/6747097.html