别看层次聚类算法简单,但是实现起来在数据结构方面还需要思考一番,不是那么轻而易举的确定数据结构,实现过的人应该知道的。
python代码是自己实现,执行结果和数学计算结果完全一致,可以放心read-code
完全人肉出品,代码详见如下:
1.层次聚类算法的计算过程原理
详见以前文章:https://blog.youkuaiyun.com/u012421852/article/details/80531184
2.Code
# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空Tom
Talk is cheap, show me the code
Aim: 实现层次聚类算法Hierarchical Clustering Alg
"""
import numpy as np
class CHC(object):
'''
Hierarchical Clustering Algorithm,HCA,层次聚类算法
'''
def __init__(self, samples):
self.samples = samples
self.hc = []
self.cnt = 0
self._work()
def indmin_matrix(self, M):
'''得到矩阵M中最小元素的行列坐标'''
row,col = divmod(np.argmin(M), np.shape(M)[1])
return row,col
def em(self, A, B):
'''
计算A和B之间的欧式距离
比如A=[1,1], B=[4,5]的欧式距离=5.0
'''
efunc = lambda a,b : np.power(float(a)-float(b),2)
func = np.frompyfunc(efunc, 2, 1)
em = np.sqrt(sum(func(A,B)))
return em
def AverageLinkage(self, A, B):
'''计算两个组合数据点中的每个数据点与其他所有数据点的距离
将所有距离的均值作为两个组合数据点间的距离
a = [1,1],b = [1,1]
c = [4,5],d = [6,7]
A=[a,b] B=