层次聚类算法的python实现

原创 2015年07月10日 10:35:26

文章给出层次聚类算法的python实现方法,并用《数据挖掘导论》里面的具体数据进行运行,代码如下:

from numpy import *
from math import *
from operator import *
def dist(a,b):#a,b is mat
    c=(a-b)*(a-b).T
    return sqrt(sum(c))
    
def centroid(a): #a is mat
    return a.mean(0)

def resolveList(List):#分解一个List,如将[[1,2],[[1,2],[1,2]]]分解为[[1,2],[1,2],[1,2]]
    L=[]
    for i in range(len(List)):
        if type(List[i][0])!=list:
            L.append(List[i])
            continue
        else:
            List1=resolveList(List[i])
            for j in List1:
                L.append(j)
    return L


def cluster(data,num): #data is list   num is the number of clusters you want
    dataList=data
    clusterList=range(len(dataList))
    while len(dataList)>num:
        dataMat=map(mat,data)
        distDic={}
        for i in range(len(dataMat)-1):
            for j in range(len(dataMat))[i+1:]:
                distDic[(i,j)]=dist(dataMat[i].mean(0),dataMat[j].mean(0))
        m,n=sorted(distDic.items(),key=itemgetter(1))[0][0]
        tempList=[]
        tempList.append(dataList[m])
        tempList.append(dataList[n])
        L=resolveList(tempList)
        del dataList[n]
        del dataList[m]
        dataList.append(L)
        print dataList  #打出每一次结果

data=[[0.4005,0.5306],[0.2148,0.3854],[0.3457,0.3156],[0.2652,0.1875],[0.0789,0.4139],[0.4548,0.3022]]
cluster(data,2)
结果如下:

[[0.4005, 0.5306], [0.2148, 0.3854], [0.2652, 0.1875], [0.0789, 0.4139], [[0.3457, 0.3156], [0.4548, 0.3022]]]
[[0.4005, 0.5306], [0.2652, 0.1875], [[0.3457, 0.3156], [0.4548, 0.3022]], [[0.2148, 0.3854], [0.0789, 0.4139]]]
[[0.4005, 0.5306], [[0.2148, 0.3854], [0.0789, 0.4139]], [[0.2652, 0.1875], [0.3457, 0.3156], [0.4548, 0.3022]]]
[[0.4005, 0.5306], [[0.2148, 0.3854], [0.0789, 0.4139], [0.2652, 0.1875], [0.3457, 0.3156], [0.4548, 0.3022]]]
程序可能编写的很菜,如有错误,希望指正~


文本聚类算法总结

文中的概念和定义部分摘自于百度百科和一些论文中,把我觉得写的不错的解释和语句放上来供大家参考。   一、文本聚类定义        文本聚类主要是依据著名的聚类假设:同类的文档相似度较大,而不同类的文...
  • xiaoquantouer
  • xiaoquantouer
  • 2016年12月08日 17:30
  • 1337

层次聚类算法(一)

层次聚类(hierarchical clustering)试图在不同层次上对数据集进行划分,从而形成树形的聚类结构,数据集的划分可采用“自底向上”的聚合策略,也可以采用“自顶向下”的分拆策略。即层次聚...
  • WOJIAOSUSU
  • WOJIAOSUSU
  • 2017年02月25日 17:35
  • 785

层次聚类算法伪码和matlab算法

1. 层次聚类 层次聚类算法与之前所讲的顺序聚类有很大不同,它不再产生单一聚类,而是产生一个聚类层次。说白了就是一棵层次树。介绍层次聚类之前,要先介绍一个概念——嵌套聚类。讲的简单点,聚类的嵌套...
  • zanghui426
  • zanghui426
  • 2015年12月18日 11:02
  • 1906

层次聚类算法及其实现

层次聚类算法分为合并算法和分裂算法。合并算法会在每一步减少聚类中心的数量,聚类产生的结果来自前一步的两个聚类的合并;分裂算法与合并算法原理相反,在每一步增加聚类的数量,每一步聚类产生的结果都将是前一步...
  • HUSTLX
  • HUSTLX
  • 2016年03月10日 19:57
  • 1652

层次凝聚聚类法

熟悉CMT的都知道,作者在聚类部分使用了层次凝聚聚类算法(Hierarchical Agglomerative Clustering)并且使用的是单链(Single-link),今天我们就来学习下这个...
  • sinat_31337047
  • sinat_31337047
  • 2016年10月10日 14:43
  • 1142

Python实现K-Means聚类算法

一、算法简介 1、K-Means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。 2、K-Mean...
  • u013063099
  • u013063099
  • 2017年02月27日 16:43
  • 519

python实现层次聚类

1.层次聚类的简单介绍 层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足或者达到最大迭代次数。具体又可分为: 凝聚的层次聚类(AGNES算法):一种自底向上的策略,首先将每个对象作为一个簇...
  • cang_sheng_ta_ge
  • cang_sheng_ta_ge
  • 2015年12月01日 23:55
  • 4864

层次聚类的介绍

AGNES算法(自底向上层次聚类)        AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同...
  • u011955252
  • u011955252
  • 2016年03月04日 20:43
  • 4241

层次聚类算法java实现

层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。具体又可分为凝聚的,分裂的两种方案。 1凝聚的层次聚类是一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇...
  • nice_joey
  • nice_joey
  • 2017年08月31日 16:19
  • 378

聚类分析之层次聚类算法

层次聚类算法: 前面介绍的K-means算法和K中心点算法都属于划分式(partitional)聚类算法。层次聚类算法是将所有的样本点自底向上合并组成一棵树或者自顶向下分裂成一棵树的过程,这两种方式...
  • zhuqiuhui
  • zhuqiuhui
  • 2014年11月05日 12:43
  • 1548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:层次聚类算法的python实现
举报原因:
原因补充:

(最多只允许输入30个字)