聚类算法——最大最小距离算法(python实现)
2018-01-19 20:05
323 查看
每篇一句:
You’re gonna have to face your fear,sooner or later. —《冰河世纪》最大最小距离算法:
最大最小距离算法也成为小中取大距离算法。这种方法首先根据确定的距离阈值寻找聚类中心,然后根据最近邻规则把模式样本划分到各聚类中心对应的类别中。问题的提出
已知N个待分类的模式样本{X1,X2,…,Xn},要求分别分类到聚类中心Z1,Z2,…对应的类别中。
算法描述
1.任选一个模式样本作为第一聚类中心Z1。
2.选择离Z1距离最远的模式样本作为第二类聚类中心Z2。
3.逐个计算每个模式样本与已知确定的所有聚类中心之间的距离,并选出其中的最小距离。
4.在所有最小距离中选出一个最大距离,如果该最大值达到||Z1-Z2||的一定分数比值以上,则将产生最大距离的那个模式样本定义为新增聚类中心,并返回上一步。否则,聚类中心的计算步骤结束。
5.重复步骤3和4,直到没有新的聚类中心出现为止。
6.寻找聚类中心的运算结束后,将模式样本{Xi;i=1,2,…,n}按最近距离划分到相应的聚类中心所代表的的类别中。
从上面的步骤可以看出,最大最小距离算法可以概括的描述为以“试探类间欧氏距离最大”作为预选出最初聚类中心的条件;根据最小距离中的最大距离情况,确定其余的聚类中心;将全部聚类中心确定完之后,再按最近距离将所有模式划分到各类中去。算法的关键是怎样开新类,以及新类中心如何确定。因为算法的核心是寻找最小距离中的最大距离,所以也称小中取大距离算法。
python实现:
解释说明见代码中注释# coding=utf-8 # 最大最小距离算法的Python实现 # 数据集形式data=[[],[],...,[]] # 聚类结果形式result=[[[],[],...],[[],[],...],...] # 其中[]为一个模式样本,[[],[],...]为一个聚类 import math def start_cluster(data, t): zs = [data[0]] # 聚类中心集,选取第一个模式样本作为第一个聚 4000 类中心Z1 # 第2步:寻找Z2,并计算阈值T T = step2(data, t, zs) # 第3,4,5步,寻找所有的聚类中心 get_clusters(data, zs, T) # 按最近邻分类 result = classify(data, zs, T) return result # 分类 def classify(data, zs, T): result = [[] for i in range(len(zs))] for aData in data: min_distance = T index = 0 for i in range(len(zs)): temp_distance = get_distance(aData, zs[i]) if temp_distance < min_distance: min_distance = temp_distance index = i result[index].append(aData) return result # 寻找所有的聚类中心 def get_clusters(data, zs, T): max_min_distance = 0 index = 0 for i in range(len(data)): min_distance = [] for j in range(len(zs)): distance = get_distance(data[i], zs[j]) min_distance.append(distance) min_dis = min(dis for dis in min_distance) if min_dis > max_min_distance: max_min_distance = min_dis index = i if max_min_distance > T: zs.append(data[index]) # 迭代 get_clusters(data, zs, T) # 寻找Z2,并计算阈值T def step2(data, t, zs): distance = 0 index = 0 for i in range(len(data)): temp_distance = get_distance(data[i], zs[0]) if temp_distance > distance: distance = temp_distance index = i # 将Z2加入到聚类中心集中 zs.append(data[index]) # 计算阈值T T = t * distance return T # 计算两个模式样本之间的欧式距离 def get_distance(data1, data2): distance = 0 for i in range(len(data1)): distance += pow((data1[i]-data2[i]), 2) return math.sqrt(distance) data = [[0, 0], [3, 8], [1, 1], [2, 2], [5, 3], [4, 8], [6, 3], [5, 4], [6, 4], [7, 5]] t = 0.5 result = start_cluster(data, t) for i in range(len(result)): print "----------第" + str(i+1) + "个聚类----------" print result[i] # 打印结果: # ----------第1个聚类---------- # [[0, 0], [1, 1], [2, 2]] # ----------第2个聚类---------- # [[3, 8], [4, 8]] # ----------第3个聚类---------- # [[5, 3], [6, 3], [5, 4], [6, 4], [7, 5]]
最后:
本文简单的介绍了 聚类算法——最大最小距离算法 的相关内容,以及相应的代码实现。如果有错误的或者可以改进的地方,欢迎大家指出。代码地址:聚类算法——最大最小聚类算法(码云)
相关文章推荐
- [置顶] 聚类算法-最大最小距离算法(实例+代码)
- python 实现求和、计数、最大最小值、平均值、中位数、标准偏差、百分比。
- 聚类算法——最大最小距离算法
- 【算法——Python实现】最大堆和最小堆
- python实现最小公倍数和最大公约数
- Python实现利用最大公约数求三个正整数的最小公倍数示例
- Python实现:选出列表中乘积最大的三个数和最小的三个数
- Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
- 几种聚类算法的结合运用(K-MEANS K-medoids 最大最小距离算法)
- c++/java/python priority_que实现最大堆和最小堆
- 使用Java语言实现,自己主动生成10个整数(1~100,求出生成数列中的最大值和最小值,不同意使用Arrays类的sort方法
- 机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法
- 机器学习—最大熵模型_改进迭代尺度法IIS_python实现
- C语言查找最大值和最小值递归实现
- Python实现计算最小编辑距离
- 最小二乘法 多项式曲线拟合 原理公式理解 Python 实现
- 最小二乘法python实现
- awk实现求和、平均、最大值和最小值的计算操作
- 最大最小蚂蚁的TSP问题的实现
- 实现最大最小堆