Python聚类算法之凝聚层次聚类实例分析

本文实例讲述了python聚类算法凝聚层次聚类。分享给大家供大家参考,具体如下:

凝聚层次聚类:所谓凝聚的,指的是该算法初始时,将每个点作为一个簇,每一步合并两个最接近的簇。另外即使到最后,对于噪音点或是离群点也往往还是各占一簇的,除非过度合并。对于这里的“最接近”,有下面三种定义。我在实现是使用了MIN,该方法在合并时,只要依次取当前最近的点对,如果这个点对当前不在一个簇中,将所在的两个簇合并就行:

单链(MIN):定义簇的邻近度为不同两个簇的两个最近的点之间的距离。
全链(MAX):定义簇的邻近度为不同两个簇的两个最远的点之间的距离。
组平均:定义簇的邻近度为取自两个不同簇的所有点对邻近度的平均值。

# scoding=utf-8# Agglomerative Hierarchical Clustering(AHC)import pylab as plfrom operator import itemgetterfrom collections import OrderedDict,Counterpoints = [[int(eachpoint.split('#')[0]), int(eachpoint.split('#')[1])] for eachpoint in open("points","r")]# 初始时每个点指派为单独一簇groups = [idx for idx in range(len(points))]# 计算每个点对之间的距离disP2P = {}for idx1,point1 in enumerate(points):  for idx2,point2 in enumerate(points):    if (idx1  finalGroupNum:  # 选取下一个距离最近的点对  twopoins,distance = disP2P.popitem()  pointA = int(twopoins.split('#')[0])  pointB = int(twopoins.split('#')[1])  pointAGroup = groups[pointA]  pointBGroup = groups[pointB]  # 当前距离最近两点若不在同一簇中,将点B所在的簇中的所有点合并到点A所在的簇中,此时当前簇数减1  if(pointAGroup != pointBGroup):    for idx in range(len(groups)):      if groups[idx] == pointBGroup:        groups[idx] = pointAGroup    groupNum -= 1# 选取规模最大的3个簇,其他簇归为噪音点wantGroupNum = 3finalGroup = Counter(groups).most_common(wantGroupNum)finalGroup = [onecount[0] for onecount in finalGroup]dropPoints = [points[idx] for idx in range(len(points)) if groups[idx] not in finalGroup]# 打印规模最大的3个簇中的点group1 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[0]]group2 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[1]]group3 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[2]]pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')  # 打印噪音点,黑色pl.plot([eachpoint[0] for eachpoint in dropPoints], [eachpoint[1] for eachpoint in dropPoints], 'ok')  pl.show()

登录后复制

运行效果截图如下:

Python聚类算法之凝聚层次聚类实例分析

希望本文所述对大家Python程序设计有所帮助。

立即学习“Python免费学习笔记(深入)”;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2534939.html

(0)
上一篇 2025年3月5日 22:11:10
下一篇 2025年3月5日 22:11:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论