数学模型 机器学习 系统聚类(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):#m
    d=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 it
    minInd=d[nzInd].argmin(0)
    mA=nzInd[0][minInd]
    mB=nzInd[1][minInd]
    cluster[mA].extend(cluster[mB])
    cluster.remove(cluster[mB])
    print cluster
    for i in range(m-k-1):
                                                  #cluster distance: core method
        centers[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)





你可能感兴趣的:(机器学习,数学模型,python,机器学习,python,优化,算法,源码)