概述
- 聚类分析是研究如何将研究对象按照多个方面的特征进行综合分类的一种统计方法
- 聚类分析就是分析如何对样品(或变量)按照他们在性质上的亲疏程度进行量化分类的问题
- 聚类分析有效解决了科学研究中多因素、多指标的分类问题
类别
Q型聚类
R型聚类
分类与聚类区别
分类
- 是对当前所研究的问题已知它的类别数目及各类的特征(例如分布规律或来自各类的训练样本)
- 目的是要将另一些未知类别的个体正确地归属于其中的某一类
- 判别分析就是一种分类技术
聚类
- 是事先不知道研究的问题应分为几类, 更不知道观测到的个体的具体分类情况。
- 目的是通过对观测数据所进行的分析处理, 选定一种度量个体接近程度的统计量, 确定分类数目, 建立一种分类方法, 并按接近程度对观测对象给出合理的分类
方法分类
系统聚类法
- 系统聚类法–(分层聚类Hierarchical Cluster)系统聚类法是应用最广泛的一种聚类方法
- 聚类原则: 都是相近的聚为一类, 即距离最近或者最相似的聚为一类
- 基本思想:
- 距离相近的样品(或变量)先聚成类, 距离相远的后聚成类, 过程一直进行下去, 每个样品(或变量)总能聚到合适的类中
- 有时为了直观地反映系统聚类过程, 可以把整个分类系统画成一张谱系图(dendrogram)。因此, 系统聚类也称为谱系分析
- 过程:
- 假设总共有n个样品(或变量), 首先将每个样品(或变量)独自聚成一类, 共有n类; 然后根据所确定的样品(或变量)“距离"公式, 形成初始距离阵。之后, 将其中距离较近的两个样品(或变量)聚合为一类, 其他的样品(或变量)仍各自聚为一类
- 第二步再根据新合并类与其他类的"距离"计算公式, 再形成的新的距离阵中, 将"距离"最近的两个类进一步再聚成一类
- 以上步骤一直进行下去, 最后将所有的样品(或变量)全聚成一类
非系统聚类法
- 非系统聚类法–(快速聚类法–K-均值聚类法K-means Cluster)
- 当样本容量很大时, 系统聚类法需要占据足够大的计算机内存空间和计算时间, 因此产生了动态聚类法又称为逐步聚类法
- 其基本思想: 开始先粗略地分一下类, 然后按照某种最优的原则修改不合理的分类, 直至类分得比较合理为止
- 该方法具有计算量小, 占用计算机内存空间较少, 方法简单, 适用于大样本的Q型聚类分析
K-均值聚类法K-means Cluster
- K均值法和系统聚类法一样, 都是以距离的远近亲疏为标准进行聚类的
- 区别:
- 系统聚类对不同的类数产生一系列的聚类结果
- K均值法只能产生指定类数的聚类结果
相似性的度量
样品相似性的度量
- Q型聚类分析,常用距离来测度样品之间的相似程度。两个样品间的相似程度就可用p维空间中的两点距离公式来度量。样本阵如下:
$$X=\left[
\begin{matrix}
X_{11} & X_{12} & \cdots & X_{1p}\\
X_{21} & X_{22} & \cdots & X_{2p}\\
\vdots & \vdots & & \vdots\\
X_{n1} & X_{n2} & \cdots & X_{np}
\end{matrix}
\right]$$
- 因此,任何两个样品$X_i$与$X_j$之间的相似性可以通过矩阵中的第i行与第j行的相似程度来刻划。
变量相似性的度量
- 变量间的相似性要从它们的方向趋同性或"相关性"进行考察, 度量方法有: 夹角余弦法和相关系数
夹角余弦
- 定义:
- 二维向量a和b的夹角余弦: $cos(\theta) = \frac{a \cdot b}{||a|| \times ||b||} = \frac{(x_1, y_1) \cdot (x_2, y_2)}{\sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}} = \frac{x_1 x_2 + y_1 y_2}{\sqrt{x_1^2 + y_1^2} \times \sqrt{x_2^2 + y_2^2}}$
- 两变量$X_i$与$X_j$看作n维空间(n个样品所张成的空间)的两个向量
$$
cos(\theta) = \frac{\sum_{i=1}^n (X_i \times Y_i)}{\sqrt{\sum_{i=1}^n (X_i)^2} \times \sqrt{\sum_{i=1}^n (Y_i)^2}} = \frac{a \cdot b}{||a|| \times ||b||}
$$
- 说明
- 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小
- 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似
应用
- 文本相似度计算
- 对句子A和B分词
- 列出所有句子的词
- 计算词频
- 列出句子A和B的词频向量a和b
- 计算a和b的夹角余弦
相关系数
- 概述
- 相关系数经常用来度量变量间的相似性。变量$X_i$与$Y_i$的相关系数定义为:
$$r_{ij} = \frac{\sum_{k=1}^n(X_{ki} - \bar{X_i})(X_{kj} - \bar{X_j})}{\sqrt{\sum_{k=1}^n(X_{ki} - \bar{X_i})^2 \sum_{k=1}^n(X_{kj} - \bar{X_j})^2}}$$
- 显然$|r_{ij}| < 1$。事实上, 相关系数是将样本观测数据中心化或标准化后的夹角余弦
- 注意:
- 无论是夹角余弦还是相关系数, 把他们统称为相似系数, 记为$c_{ij}$
- 当$|c_{ij}| = 1$时, 说明变量$X_i$与$X_j$完全相似
- 当$|c_{ij}|$近似于1时, 说明变量$X_i$与$X_j$非常密切
- 当$|c_{ij}| = 0$时, 说明变量$X_i$与$X_j$完全不一样
- 当$|c_{ij}|$近似于0时, 说明变量$X_i$与$X_j$差别很大
- 如果需要用距离来测定变量间的亲疏程度, 则变量之间常借助于相似系数来定义距离:
$$d_{ij} = 1 - |c_{ij}| 或者 d_{ij}^2 = 1- c_{ij}^2$$
类间距与系统聚类法
- 概述:
- 系统聚类法共8种: 最短距离法, 最长距离法, 中间距离法, 重心法, 类平均法, 可变类平均法, 可变法和离差平方和法
- 它们的归类和步骤是一致的, 主要差异: 两类间的距离; 新合并类与其他类间距离的计算方法不同
最短距离法
- 用$d_{ij}$表示样品$X_i$与$X_j$之间的距离, 用$D_{ij}$表示类$G_i$与$G_j$之间的距离。定义类$G_i$与$G_j$之间的距离为两类最近样品的距离, 即为:
$$D_{ij} = \min\limits_{X_i \in G_i, X_j \in G_j} d_{ij}$$
最长距离法
- 用$d_{ij}$表示样品$X_i$与$X_j$之间的距离, 用$D_{ij}$表示类$G_i$与$G_j$之间的距离。定义类$G_i$与$G_j$之间的距离为两类最远样品的距离, 即为:
$$D_{ij} = \max\limits_{X_i \in G_i, X_j \in G_j} d_{ij}$$
中间距离法
- 取最长距离和最短距离的中线, 则这个中线距离的平方为:
$$D_{kr}^2 = \frac{1}{2}D_{kp}^2 + \frac{1}{2}D_{kq}^2 - \frac{1}{4}D_{pq}^2$$
重心法
- 概述:
- 重心法是定义类间距离为两类样品重心(各类样品的均值)的距离的系统聚类方法。重心指标对类有很好的代表性,但利用各样本的信息不充分
- 设$G_p$与$G_q$分别有样品$n_p,n_q$个, 其重心分别为$\bar{X_p}和\bar{X_q}$, 则$G_p$与$G_q$之间的距离定义为$X_p和X_q$之间的距离, 用欧式距离来表示, 即
$$D_{pq}^2 = (\bar{X_p} - \bar{X_q})’(\bar{X_p} - \bar{X_q})$$
- 设将$G_p和G_q$合并为$G_r$, 则$G_r$内样品个数为$n_r = n_p + n_q$, 它的重心是$\bar{X_r} = \frac{1}{n_r}(n_p \bar{X_p} + n_q \bar{X_q})$, 类$G_k$的重心是$\bar{X_k}$, 那么它与新类$G_r$的距离为:
$$
\begin{aligned}
D_{kr}^2 & = (\bar{X_k} - \bar{X_r})'(\bar{X_k} - \bar{X_r}) \\
& = [\bar{X_k} - \frac{1}{n_r}(n_p \bar{X_p} + n_q \bar{X_q})]'[\bar{X_k} - \frac{1}{n_r}(n_p \bar{X_p} + n_q \bar{X_q})] \\
& = \frac{n_p}{n_r} D_{kp}^2 + \frac{n_q}{n_r} D_{kq}^2 - \frac{n_p n_q}{n_r^2} D_{pq}^2
\end{aligned}
$$
类平均法
- 概述:
- 重心法虽然有较好的代表性, 但并未充分利用样本信息。而类平均法定义两类之间的距离平方为两类两两样品之间距离平方的平均数,即为
$$D_{pq}^2 = \frac{1}{n_pn_q} \sum_{X_i \in G_p} \sum_{X_j \in G_q} d_{ij}^2$$
- 设聚类的某一步将$G_p和G_q$合并为新类$G_r$, 则类$G_k$与新并类$G_r$的距离为:
$$
\begin{aligned}
D_{kr}^2 & = \frac{1}{n_kn_r} \sum_{X_i \in G_k} \sum_{X_j \in G_r} d_{ij}^2 \\
& = \frac{1}{n_kn_r} (\sum_{X_i \in G_k} \sum_{X_j \in G_p} d_{ij}^2 + \sum_{X_i \in G_k} \sum_{X_j \in G_q} d_{ij}^2) \\
& = \frac{n_p}{n_r} D_{kp}^2 + \frac{n_q}{n_r} D_{kq}^2
\end{aligned}
$$
可变类平均法
- 概述:
- 由于类平均法中没有反映出$G_p和G_q$之间的距离$D_{pq}$的影响, 信息利用不充分。为了充分利用各类距离的信息,可将类平均法和中间距离法进行组合,得到一个组合模型,此组合模型称为可变类平均法
- 如果将$G_p和G_q$合并为新类$G_r$, 类$G_k与新并类G_r$的距离公式为:
$$D_{kr}^2 = (1 - \beta) (\frac{n_p}{n_r}D_{kp}^2 + \frac{n_q}{n_r}D_{kq}^2) + \beta D_{pq}^2$$
- 之所以称该方法为可变类平均法是因为$\beta$是可变的
- 系数$\beta$称为聚类强度系数, $\beta$的取值不同, 聚类的结果就会不同。通常$\beta$取负值时可以使聚类的分辨能力提高; 一般情况下, 取$\beta = - \frac{1}{4}$
可变法
- 概述:
- 不考虑$G_p和G_q$两类h中各自样品的个数, 而是类同等看待, 则得到可变法
$$D_{kr}^2 = \frac{1 - \beta}{2}(D_{kp}^2 + D_{kq}^2) + \beta D_{pq}^2$$
离差平方和法(Ward法)
- 概述:
- 该方法的思想来自于方差分析, 由Ward提出, 如果分类正确, 同类样品的离差平方和应当较小, 类与类的离差平方和较大
- 具体做法是先将n个样品各自成一类, 然后每次缩小一类, 每缩小一类, 离差平方和就要增大, 选择使方差增加最小的两类合并, 直到所有的样品归为一类为止
- 设将n个样品分成k类$G_1,G_2,\cdots,G_k$, 用$X_{it}$表示$G_t$中的第i个样品, $n_t$表示$G_t$中样品的个数, $\bar{X_t}$是$G_t$的重心, 则$G_t$的样品离差平方和为:
$$S_t = \sum_{i=1}^{n_t}(X_{it} - \bar{X_t})'(X_{it} - \bar{X_t})$$
- 如果$G_p$和$G_q$合并为新类$G_r$, 则类内离差平方和分别为:
$$
S_p = \sum_{i=1}^{n_p}(X_{ip} - \bar{X_p})'(X_{ip} - \bar{X_p}) \\
S_q = \sum_{i=1}^{n_q}(X_{iq} - \bar{X_q})'(X_{iq} - \bar{X_q}) \\
S_r = \sum_{i=1}^{n_r}(X_{ir} - \bar{X_r})'(X_{ir} - \bar{X_r})
$$
- 它们反映了各自类内样品的分散程度, 如果$G_p$和$G_q$这两类相距较近, 则合并后所增加的离散平方和$S_r - S_p - S_q$应较小; 否则, 应较大。于是定义$G_p$和$G_q$之间的平方距离为: $D_{pq}^2 = S_r - S_p - S_q$
- 如果将$G_p$和$G_q$合并为新类$G_r$, 类$G_k$与新并类$G_r$的距离公式为:
$$D_{kr}^2 = \frac{n_k + n_p}{n_r + n_k} D_{kp}^2 + \frac{n_k + n_q}{n_r + n_k} D_{kq}^2 - \frac{n_k}{n_r + n_k} D_{pq}^2$$
类间距离的统一性
- 上述8种系统聚类法的步骤完全一样, 只是距离的递推公式不同。Lance和Williams于1967年给出统一公式, 即将$G_p$和$G_q$合并为新类$G_r$, 类$G_k$与新并类$G_r$的距离公式为:
$$D_{kr}^2 = \alpha_p D_{kp}^2 + \alpha_q D_{kq}^2 + \beta D_{pq}^2 + \gamma |D_{kp}^2 - D_{kq}^2|$$
其中$\alpha_p、\alpha_q、\beta、\gamma$是参数, 不同的系统聚类法, 它们的取不同的数
- 系统聚类法参数表
方法 | $\alpha_p$ | $\alpha_q$ | $\beta$ | $\gamma$ |
---|
最短距离法 | 1/2 | 1/2 | 0 | -1/2 |
最长距离法 | 1/2 | 1/2 | 0 | 1/2 |
中间距离法 | 1/2 | 1/2 | -1/4 | 0 |
重心法 | $n_p/n_r$ | $n_q/n_r$ | $-\alpha_p \alpha_q$ | 0 |
类平均法 | $n_p/n_r$ | $n_q/n_r$ | 0 | 0 |
可变类平均法 | $(1 - \beta)n_p/n_r$ | $(1 - \beta)n_q/n_r$ | $\beta(<1)$ | 0 |
可变法 | $(1 - \beta)/2$ | $(1 - \beta)/2$ | $\beta(<1)$ | 0 |
离差平方和法 | $\frac{(n_p + n_k)}{(n_r + n_k)}$ | $\frac{(n_q + n_k)}{(n_r + n_k)}$ | $-n_k/(n_k + n_r)$ | 0 |
类个数的确定
- 由适当的阀值确定
- 根据数据点的散布图直观地确定类的个数
系统聚类法在R上的实现
示例
data(iris)
attach(iris)
class=data.frame(c(1,2,3),as.vector(unique(iris[,5])))
names(class)=c("cla","name")
#系统聚类法
d=dist(iris[,-5],method = "euclidean",diag = T,upper = T,p=2)
hc=hclust(d,method = "ward")
plot(hc)
# 分成3类
rt1=data.frame(cutree(hc,k=3))
names(rt1)="cla"
rt1=merge(rt1,class,by="cla")
tab1=table(rt1$name,iris[,5])
sum(diag(prop.table(tab1)))
# k均值聚类法
km=kmeans(iris[,-5],3,nstart=20,algorithm = "Hartigan-Wong")
rt2=data.frame((km$cluster))
names(rt2)="cla"
rt2=merge(rt2,class,by="cla")
tab2=table(rt2$name,iris[,5])
sum(diag(prop.table(tab2)))