Grit

聚类学习

距离度量

样本点之间的距离

有序属性

  • 闵可夫斯基距离
    $$ L_p = \left( \sum_{i=1}^{n} |x_i-y_i|^p \right)^{\frac{1}{p}} $$
  • 曼哈顿距离 $L_1$
  • 欧氏距离 $L_2$
  • 切比雪夫距离 $L_\infty$

无序属性

  • 属性u上,值为a,b的 VDM 距离
    $$ VDM(a,b)_p = \sum_{i=1}^{k} \left| \frac{m_{u,a,i}}{m_{u,a}} - \frac{m_{u,b,i}}{m_{u,b}} \right|^p $$

混合属性

  • 将 $L_p$ 和 $VDM_p$ 加权求和

集合之间的距离

  • 最小距离
    $$ \text{dist}_{\min}(C_i,C_j) = \min_{x\in C_i,y\in C_j} \text{dist}(x,y) $$

  • 最大距离
    $$ \text{dist}_{\max}(C_i,C_j) = \max_{x\in C_i,y\in C_j} \text{dist}(x,y) $$

  • 平均距离
    $$ \text{dist}_{\text{avg}}(C_i,C_j) = \frac{1}{|C_i||C_j|}\sum_{x\in C_i}\sum_{y\in C_j}\text{dist}(x,y) $$

  • 中心距离
    $$ \text{dist}_{\text{cen}}(C_i,C_j) = \text{dist}(\mu_i,\mu_j) \quad \mu=\frac{1}{|C|}\sum_{i=1}^{|C|} x_i $$

性能度量

内部性能度量

  • 类的平均距离
    $$ \text{avg}(C) = \frac{2}{|C|(|C|-1)}\sum_{1\leq i<j\leq |C|} \text{dist}(x_i,x_j) $$

  • 类的直径
    $$ \text{diam}(C) = \max_{1\leq i<j\leq |C|} \text{dist}(x_i,x_j) $$

  • 指数
    $$ \text{DBI} = \frac{1}{k} \sum_{i=1}^k \max_{j \neq i}\left( \frac{avg(C_i)+avg(C_j)}{\text{dist}_{\text{cen}}(C_i,C_j)}\right) $$

外部性能度量

  • 不同聚类模型之间的比较

$$ a = |SS|, \quad SS = \{ (x_i, x_j) \; | \; \lambda_i=\lambda_j, \; \lambda_i^*=\lambda_j^*, \; i<j \} $$

$$ b = |SD|, \quad SS = \{ (x_i, x_j) \; | \; \lambda_i=\lambda_j, \; \lambda_i^*\neq\lambda_j^*, \; i<j \} $$

$$ c = |DS|, \quad SS = \{ (x_i, x_j) \; | \; \lambda_i\neq\lambda_j, \; \lambda_i^*=\lambda_j^*, \; i<j \} $$

$$ d = |DD|, \quad SS = \{ (x_i, x_j) \; | \; \lambda_i\neq\lambda_j, \; \lambda_i^*\neq\lambda_j^*, \; i<j \} $$

  • 指数
    $$ \text{FMI} = \sqrt{\frac{a}{a+b}\cdot\frac{a}{a+c}} $$

原型聚类

k均值算法

  • 找原型向量,最小化平方误差
  • 迭代求解

学习向量量化算法

  • 处理带有类别标记的数据样本
  • 根据原型向量标记结果与类别标记结果是否一致来跟新原型向量
  • 迭代求解

高斯混合聚类算法

  • 概率模型,每一类对应一个高斯分布,整体服从混合高斯分布
  • EM算法求解

非原型聚类

密度聚类算法

  • 根据样本点分布的紧密程度聚类
  • 领域、核心对象、密度相连、异常样本

层次聚类算法

  • 自底向上的聚合策略:每次更新减少一个簇
  • 树形结构
1
2
3
from sklearn.datasets import make_blobs
data, label = make_blobs(n_samples=1000, n_features=2, centers=5, random_state=1)
1
2
3
4
5
6
from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=5).fit_predict(data)
pyplot.scatter(data[:, 0], data[:, 1], c=y_pred)
pyplot.show()