一、层次聚类算法原理与步骤
层次聚类算法是一种基于距离的聚类方法,其原理基于样本间的相似度或距离度量。层次聚类算法将数据样本集合视为簇,通过合并数据样本集合不断生成树形结构,最终将所有数据样本集合聚类至整个树形结构只有一个根节点的情形。其主要步骤包括:
1、计算样本间的距离/相似度矩阵。
def pairwise_distances(X, Y=None, metric='euclidean', **kwds):
X, Y = check_pairwise_arrays(X, Y)
if metric == "euclidean":
distances = - 2 * safe_sparse_dot(X, Y.T, dense_output=True)
distances += (X ** 2).sum(axis=1).reshape(-1, 1) + (Y ** 2).sum(axis=1)
return np.maximum(distances, 0)
...
2、将每个样本各自分到一个簇中。
def _initialize(X):
n_samples = X.shape[0]
clusters = np.arange(n_samples).reshape(-1, 1)
sizes = np.ones(n_samples, dtype=np.int)
return clusters, sizes, n_samples
3、迭代地根据距离/相似度矩阵合并最近的两个簇。
def _single_linkage(D, n_clusters, connectivity=None, n_neighbors=None):
if n_neighbors is not None:
if connectivity is None:
connectivity = kneighbors_graph(n_neighbors=n_neighbors, X=D, include_self=True)
connectivity = 0.5 * (connectivity + connectivity.T)
if sparse.issparse(D):
return _single_linkage_sparse(D, n_clusters, connectivity)
else:
return _single_linkage_dense(D, n_clusters, connectivity)
4、重复步骤3直至所有数据样本均聚类至整个树形结构只有一个根节点的情形。
二、层次聚类算法对链式效应的影响
层次聚类算法的链式效应表示的是不同高度的簇在合并时可能造成错误累积,进而导致最终的聚类结果产生偏差。当样本的真实类别结构为非二叉树形结构时,链式效应可能会进一步加剧聚类结果的偏差,这是层次聚类算法的局限之一。
举例而言,现有5个样本,它们真实的类别分别为{1,2},{3,4},以及{5},且这三个类别之间的距离均相等。若进行层次聚类,在不同高度的簇合并时可能会遵从不同的合并方式,导致最终聚类结果出现误差。
三、层次聚类算法原理及应用举例
层次聚类算法原理核心其实是基于距离的度量方式。聚类中的层次,由树状图表现。层次聚类广泛应用于生物学领域的基因表达数据分析,以及社会人文科学领域的数据分析,如客群分析、电商推荐系统等。
以客群分析为例,若想对用户进行分群,首先需要构建相应的样本特征,比如用户的年龄、地区、消费行为等。之后根据这些特征计算样本间的距离/相似度,通过层次聚类算法将样本分为不同的簇群。在此基础上,根据每个簇群对应的用户特征或者其聚类结果进行相关的分析和应用。
四、层次聚类算法概念
层次聚类算法主要包含以下几个概念:
1、样本间的距离/相似度:用于量化样本之间的差异,通常采用欧几里得距离、曼哈顿距离等方式。
2、簇:每个簇由多个样本组成,其特征可以通过簇内的样本特征的均值或者其他任意的方式得到。
3、树形结构:层次聚类算法的聚类结果以树状图的形式呈现,树的每个节点都对应一个数据集合,树的叶节点表示数据集合中的单个样本。
五、层次聚类的三种方法
层次聚类算法根据簇间的距离度量方法的不同,可以分为以下三种方法:
1、最小距离法(single-linkage):簇间距离定义为最近的两个数据样本之间的距离,可以有效地抑制链式效应,但同时也增加了噪音点的影响。
2、最大距离法(complete-linkage):簇间距离定义为当前两个数据簇中距离最远的两个样本之间的距离,可以抑制噪音点的影响,但容易因为马尔科夫现象而偏向相同大小簇的合并。
3、组平均法(average-linkage):簇间距离定义为两个簇中样本间距离的平均值,中庸而平衡。
六、层次聚类方法优缺点
层次聚类算法的优点主要在于:
1、不需要指定簇的数量,节省了决策过程中的主观因素;
2、可视化效果好,更直观地观察聚类结果;
3、能够处理非凸分布、大小差异较大的数据分布;
4、适合于大量数据的场景,预测效果较好。
但其缺点也显而易见:
1、每步迭代计算量较大,效率较低;
2、受到初始聚类中心的影响较大,结果易受到大量噪音样本的影响;
3、算法的结果可能受到距离度量方式的影响。
七、SPSS层次聚类法
SPSS作为一种统计分析软件,层次聚类算法也被广泛应用。其默认的层次聚类方法为最小距离法。
使用SPSS进行层次聚类需要进行以下步骤:
1、选择相应的数据集;
2、指定变量会被包含在聚类分析中;
3、选择层次聚类法方法和判断聚类数量的准则;
4、对聚类结果进行覆盖和分析。
IMPORT FILE='/path/to/data'
/TYPE=CSV
/ARRANGEMENT=DELIMITED
/DELIMITERS=","
/FIRSTCASE=2
/DATATYPEMIN PERCENTAGE=95.0
/VARIABLES=name1 name2 name3...
/USE=IF CURRENTVAR('name1')=-999.
/CLEAR.
CLUSTER name1 name2 name3
/LINKAGE = SINGLE
/DISTANCE = EUCLIDEAN
/METHOD = HIERARCHICAL(4)
/CRITERIA = CUT(number of clusters)
distance(distance cutoff)
merge(times merged together)
change in cluster similarity
(increment in R square)
/PRINT THRESHOLD
/COMPARE = NONE
/MISSING=LISTWISE.
八、层次聚类算法有哪些
除了文中已经提到的最小距离法、最大距离法、组平均法,层次聚类算法还有:
1、centroid粗略法:按照每个簇内的样本的坐标向量平均值得到该数据簇的中心。
2、median cut法:将图像转化为样本点存储,按照样本点在像素颜色空间的分布情况将空间分为几个区域,在每个区域内分别进行层次聚类,使层次聚类与图像质量的关联更加显著。
3、Ward方法:以凝聚中心法为基础,升级计算方式,使用重心距离衡量两个簇之间的相似度。