数学模型 机器学习 系统聚类(system clustering) Python实现

初始有m个数据, 那么系统聚类一开始就有m个类, 再根据类之间的距离函数, 将最近的类聚集在一起, 直到用户设定的K

a=[[1,0], [1,1], [3,2], [4,3], [2,5]]cluster=[]for i in range(shape(a)[0]):cluster.append([i])a=array(a)centers=a.copy()centers=centers.astype('float')m,n=shape(a)我们给出一个简单的例子, 只有5条数据

我依次演示这个聚类过程

for k in range(m-1):#md=zeros((m-k,m-k))for i in range(m-k):for j in range(i+1,m-k):d[i,j]=mandist(centers[i],centers[j])nzInd=nonzero(d)#take care of itminInd=d[nzInd].argmin(0)mA=nzInd[0][minInd]mB=nzInd[1][minInd]cluster[mA].extend(cluster[mB])cluster.remove(cluster[mB])print clusterfor i in range(m-k-1):#cluster distance: core methodcenters[i]=mean(a[cluster[i]],axis=0)结果为

[[0, 1], [2], [3], [4]][[0, 1], [2, 3], [4]][[0, 1], [2, 3, 4]][[0, 1, 2, 3, 4]]注意到这里有两个可供我们修改的地方

一个是距离函数, 这里我使用的是马氏距离, 而距离还有欧式距离之类的

def mandist(vecA,vecB):return sum(abs(vecA-vecB))二是类距离函数, 这里我使用的是重心距离. 类距离函数还有 最近邻 最远距 等方法

centers[i]=mean(a[cluster[i]],axis=0)

,然后继续努力,把让自己跌倒的石头搬掉或绕过去,不就解决问题了吗?

数学模型 机器学习 系统聚类(system clustering) Python实现

相关文章:

你感兴趣的文章:

标签云: