聚类算法笔记

目录

1. 基本概念

1.1 相似度

1.1.1 闵可夫斯基距离

1.1.2 马哈拉诺比斯距离

1.1.3 相关系数

1.1.4 夹角余弦

1.2 类或簇

1.2.1 类的特征刻画

1.2.2 类间距离

2. 层次聚类

2.1 聚合聚类

2.1.1 算法流程

3. k 均值聚类

3.1 策略

3.2 算法

3.3 特性

3.3.1 总体特点

3.3.2 收敛性

3.3.3 k 的选择


        聚类是根据样本之间的特征的相似度或距离,将样本划分到若干类之中,相似度高的在一个类,相似度低的在另一个类。

1. 基本概念

1.1 相似度

        给定样本集合 X

\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n}\\ x_{21}& x_{22} &\cdots & x_{2n}\\ \vdots &\vdots & & \vdots\\ x_{m1}& x_{m2} & \cdots &x_{mn} \end{bmatrix}

X 是一个 m\times n 的矩阵,其中 x_{ij} 表示第 j 个样本的第 i 维特征值。

        聚类的核心概念是相似度,可以用距离来表示两个样本之间的相似度。

1.1.1 闵可夫斯基距离

        闵可夫斯基距离定义如下

d_{ij}=(\sum_{k=1}^m\left | x_{ki}-x_{kj} \right |^p)^\frac{1}{p}

  • p=1 表示曼哈顿距离
  • p=2 表示欧式距离
  • p 取无穷时表示切比雪夫距离

1.1.2 马哈拉诺比斯距离

        又称马氏距离,考虑各个特征之间的相关性并与各个特征的尺度无关。马氏距离越大,相似度越小。

        令样本集合 X 的协方差矩阵为 S ,则马氏距离定义为

d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^\frac{1}{2}

当 S 为单位矩阵时,即样本数据的各分量互相独立且方差为 1 时,马氏距离就是欧氏距离,所以马氏距离是欧氏距离的推广。

1.1.3 相关系数

        除了距离也可以用相关系数来表示相似度,相关系数的绝对值越接近 1 ,表示样本越相似。

其定义如下

r_{ij}=\frac{\sum_{k=1}^m(x_{ki}-\bar{x_{i}})(x_{kj}-\bar{x_j})}{[\sum_{k=1}^m(x_{ki}-\bar{x_{i}})^2\sum_{k=1}^m(x_{kj}-\bar{x_j})^2]}

其中

\bar{x_i}=\frac{1}{m}\sum_{k=1}^mx_{ki}

1.1.4 夹角余弦

        夹角余弦越接近1 ,表示样本越相似。

s_{ij}=\frac{\sum_{k=1}^mx_{ki}x_{kj}}{[\sum_{k=1}^mx_{ki}^2\sum_{k=1}^mx_{kj}^2]^\frac{1}{2}}

1.2 类或簇

        如果一个聚类方法假定一个样本只能属于一个类,则称作硬聚类,如果一个样本可以属于多个类,则称为软聚类。用 G 表示一个类或簇,n_G 表示该类或簇的样本集,则类或簇的定义为


        设 T 为给定的正数,若集合 G 中的任意两个样本 x_i,x_j ,有 d_{ij}\leqslant T ,则称 G 为一个类或簇。


1.2.1 类的特征刻画

均值(中心)\bar{x_G}=\sum_{x_i\in x_G}x_i
直径D_G=\underset{x_i,x_j\in G}{max}d_{ij}
散布矩阵A_G=\sum_{x_i\in G}(x_i-\bar{x_G})(x_i-\bar{x_G})^T
协方差矩阵S_G=\frac{1}{m-1}A_G=\frac{1}{m-1}\sum_{x_i\in G}(x_i-\bar{x_G})(x_i-\bar{x_G})^T

1.2.2 类间距离

        考虑类 G_p,\,G_q 之间的距离 D(p,q) ,也称为连接;类间距离可以定义为

最短距离(单连接)D_{pq}=min\left \{ d_{ij}|x_i\in G_p,\, x_j\in G_q \right \}
最长距离(完全连接)D_{pq}=max\left \{ d_{ij}|x_i\in G_p,\, x_j\in G_q \right \}
中心距离D_{pq}=d_{\bar{x_p}\bar{x_q}}
平均距离D_{pq}=\frac{1}{n_pn_q}\sum_{x_i\in G_p}\sum_{x_j\in G_q}d_{ij}

2. 层次聚类

        层次聚类假设类别之间存在层次结构,又分聚合聚类或分裂聚类两种。

        聚合聚类开始将每个样本各自分到一类,然后将最近的两类合并,建立一个新的类,重复此操作直到满足停止条件。

        分裂聚类则是开始将所有样本当作一个类,然后将现有类中距离最远的样本分类两个新的类,重复直到满足条件。

2.1 聚合聚类

        聚合聚类首先需要确定三个因素:

  1. 距离或相似度
  2. 合并规则
  3. 停止条件

2.1.1 算法流程

输入:样本集合 X

输出:层次化聚类模型

  1. 计算 n 个样本两两之间的欧氏距离 d_{ij} 得到类间距离矩阵 D=[d_{ij}]_{n\times n}
  2. 构造 n 个类,每个类只包含一个样本
  3. 合并类间距离最小的两个类,得到一个新类
  4. 计算新类和当前各类的距离,重复;若类的个数是 1 则终止。

        聚合聚类的复杂度是 O(n^3m)

3. k 均值聚类

        k 均值聚类是基于样本集合划分的方法,它将样本集合划分到 k 个子集,构成 k 个类并将 n 个样本划分到 k 个类中,使得每个样本到所属类的中心点距离最小。

3.1 策略

        假定共有 n 个样本,每个样本为 m 维,共分成 k 个类,用 C 表示划分。

定义样本与所属类的中心的距离总和为损失函数

W(C)=\sum_{l=1}^k\sum_{C(i)=l}\left \| x_i-\bar{x_l} \right \|^2

则 k 均值聚类即求解最优化问题

C^*=arg\, \underset{c}{min}W(C)

        当相似的样本被聚到同类时,损失函数有最小值。但事实上求得最优解是 NP 困难问题,一般采用迭代的方法求解。

3.2 算法

        迭代过程算法大致可分为两步:

  1. 选择 k 个类中心,然后将样本指派到距离它最近的一个类中心所在的类中
  2. 更新类中心

输入:样本集合 X

输出:聚类模型 C^*

  1. 初始化,令 t=0 ,随机选择 k 个样本点作为初始聚类中心 M^0 = \left \{ m_1^0,m_2^0,...,m_k^0 \right \}
  2. 对样本聚类,对聚类中心 M^t ,计算每个样本到每个聚类中心的距离,将每个样本指派到与其最近的中心的类中,得到聚类结果 C^t
  3. 计算新的类中心,如计算每个当前类中的样本的均值,作为新的类中心,得到 M^{t+1}
  4. 重复直到满足终止条件,输出划分 C^t

        时间复杂度为 O(mnk)

3.3 特性

3.3.1 总体特点

  • 基于划分的聚类方法
  • 类别数 k 事先指定
  • 欧氏距离作为样本之间的距离
  • 以中心或样本均值表示类别
  • 以样本和所属的类中心之间的距离和为优化的目标函数
  • 得到的类是平坦的非层次化的
  • 迭代算法,不保证全局最优

3.3.2 收敛性

        是启发式方法,不保证收敛到全局最优,初始中心的选择会影响聚类结果;类中心会移动但一般不会移动太大。

        对初始中心的选择人比如可以用层次聚类得到 k 个类别时停止,然后从每个类中选取一个与中心距离最近的点作为初始中心。

3.3.3 k 的选择

        可以尝试不同的 k 来聚类,比如可以通过类的平均直径作为聚类结果的度量,一般的类别数变小,平均直径会增加;类别大到某个值后,平均值会不变,该值即可作为最优 k 值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值