博主最近在依据scipy的手册学习,按每个模块进行记录,对scipy其他部分有疑惑的可以看一下博主的相关合集。p.s. 更新中
层级聚类原理
当我们需要对一个集合S中的元素进行聚类的时候,我们肯定预先有一个评价标准 d d d,用于计算任意两个节点a和b之间的距离 d ( a , b ) d(a,b) d(a,b),再依据计算的结果进行聚类。说得更清楚一些,有两个方式来实现聚类,一个是从单个到总体:我们首先将每个向量都当作一个类,利用 d d d计算出两两之间的距离,合并距离最小的两个,循环进行;另一个是从整体到单一:先把所有的看作同一类,利用 d d d计算出两两之间的距离,跳出距离最大的a,b,其他向量计算到a,b的距离进而分为2类,后续以此类推。
其实看到后面会发现,这个hierarchy cluster(层级聚类)在算法上是定死的,给我们留下的空间只在于选择何种评价标准 d d d。我们首先看看这个 d d d应该有哪些性质。
度量
数学上来讲,度量是一个二元函数 D × D → R ≥ 0 \mathbf{D} \times \mathbf{D} \rightarrow \mathbb{R}_{\geq 0} D×D→R≥0,并且满足以下三条性质:
- 非负性(分离性)
d ( a , b ) ≥ 0 ( ∀ a , b ∈ D ) d(a,b) \geq 0 \quad (\forall a,b \in \mathbf{D})\quad d(a,b)≥0(∀a,b∈D) 并且 d ( a , b ) = 0 ⇔ a = b \quad d(a,b) = 0 \, \Leftrightarrow \, a = b d(a,b)=0⇔a=b - 对称性
d ( a , b ) = d ( b , a ) ( ∀ a , b ∈ D ) d(a,b) \, = d(b,a) \quad (\forall a,b \in \mathbf{D}) d(a,b)=d(b,a)(∀a,b∈D) - 三角不等式
d ( a , c ) ≤ d ( a , b ) + d ( b , c ) ( ∀ a , b ,