算法与实战 - (1)聚类

最近在阅读阿里数据分析专家卢辉的《数据挖掘与数据化运营实战》。书中结合了实际业务案例,介绍了在实战项目中数据分析和数据挖掘的许多知识点,干货满满。

因此,打算结合书中内容,对一些重要的主题加以总结,在过程中加深对各个知识点的理解。

文章目录

      • 1. 聚类应用场景
      • 2. 常用聚类方法
        • 2.1 原型聚类
          • Kmeans聚类算法
          • 高斯混合模型GMM
        • 2.2 密度聚类
          • DBSCAN
        • 2.3 层次聚类
      • 3. 聚类效果的评估
      • 4. 聚类的注意事项
      • Reference

1. 聚类应用场景

聚类是非监督学习中的一类算法,通常是通过多次迭代来找到数据的最优分割,将数据划分为多个类。

聚类在数据分析中十分常用,一般有两个典型的应用场景——

  1. 数据分析前期的数据探索
  • 在数据分析前期,可以通过聚类和可视化了解数据分布
  • 聚类可以定位孤立点、异常值,用于数据清洗、转化等数据处理过程
  • 聚类产生的类别可以作为一个新的字段加入到其他模型的搭建中
  1. 聚类算法建模
  • 解决一些实际场景,聚类的结果可以指导落地应用,常用于样本分群
  • 用户分群中,可以根据众多指标进行聚类,将用户划分为具有明显特征区别的群体
  • 作品分群中同样通过聚类可以划分为低热度、中热度、KOL作品等

总的来说,聚类对目标群体进行多指标的划分,为个性化、精细化的运营提供基础。

2. 常用聚类方法

聚类算法根据不同的思路可分为原型聚类、密度聚类、层次聚类三种,本节依次简单介绍。

2.1 原型聚类

原型聚类假设聚类结构能通过一组原型刻画,通常是先初始化原型,然后对原型进行迭代更新求解。

比如Kmeans聚类、GMM聚类都属于原型聚类。

Kmeans聚类算法

Kmeans聚类使用K个中心点,将数据划分为K个类,使得每个样本距离所属类的中心点最近。

Kmeans聚类算法本质上是寻找K个中心点,使得所有样本点到所属类的中心点的距离之和,即
∑ i N ∣ ∣ x i − μ c i ∣ ∣ 2 其 中 x i 表 示 第 i 个 样 本 点 , c i 表 示 x i 所 属 的 类 , μ c i 表 示 c i 类 的 中 心 点 \sum_i^N||x_i-\mu_{c_i}||^2\\ 其中x_i表示第i个样本点,c_i表示x_i所属的类,\mu_{c_i}表示c_i类的中心点 iNxiμci2xiicixiμcici

算法的运行流程如下:

  1. 随机选择 K K K 个点作为 K K K 个类的中心

  2. 对每个样本点,将其分配到最近的类,即

    c i ← a r g min ⁡ k ∣ ∣ x i − μ k ∣ ∣ 2 c_i \larr arg\min_k||x_i-\mu_k||^2 ciargkminxiμk2

  3. 对每个簇,重新计算该类的中心(使中心变为当前类的均值点),即
    μ k ← a r g min ⁡ μ ∑ i : c i = k ∣ ∣ x i − μ ∣ ∣ 2 \mu_k\larr arg\min_\mu \sum_{i:c_i=k}||x_i-\mu||^2 μkargμmini:ci=kxiμ2

  4. 重复第2、3步迭代过程直到收敛

高斯混合模型GMM

其核心思想是假设K个类别均服从各自的高斯分布,模型使用EM算法求解,关于EM算法可以参考从最大似然到EM算法浅解。

算法的运行流程如下:

  1. 随机初始化K个类别的高斯分布参数

  2. E步骤,根据当前参数计算每个样本属于每个类别的概率

  3. M步骤,根据E步骤估计出的概率,找到更优的参数

高斯混合模型可以给出一个样本属于某类的概率是多少,因此可以用于聚类,也可以用于概率密度的估计和生成新的样本点。

2.2 密度聚类

密度聚类假设聚类结构能通过样本分布的紧密程度确定,基于可连接样本不断扩展聚类以得到最终的聚类结果。

DBSCAN

DBSCAN是基于密度的聚类方法的一种,其核心思想是,同一类别中任意样本周围不远处一定有同类别的样本存在。

假设1是类C的样本,1和2距离很近,那2很可能也属于类C。而2和3距离很近,则尽管1和3距离有点远,但3仍然很有可能属于类C。基于密度的聚类可以理解成一种扩散/感染的过程。

DBSCAN中有几个概念:最小邻域点数MinPts,邻域半径Eps,核心对象。

  • 对数据集中的所有点,以Eps为半径的邻域,若包含点数超过MinPts,则该点是核心对象
  • x i x_i xi 在核心对象 x j x_j xj 的邻域中,则称 x i x_i xi x j x_j xj 密度直达
  • 若存在序列 x i , x i + 1 , . . . , x n x_i, x_{i+1},...,x_n xi,xi+1,...,xn,使得对 k ∈ [ i + 1 , n ] k \in [i+1,n] k[i+1,n] x k x_k xk x k − 1 x_{k-1} xk1 密度直达,则称 x n x_n xn x i x_i xi 密度可达

在上述定义下,DBSCAN的思想就是,密度可达的所有点属于同一个类别

算法运行流程如下:

  1. 初始化当前类别 k = 0 k=0 k=0,未访问节点集合 S = D S=D S=D,即整个数据集
  2. 遍历所有节点,判断是否是核心对象,所有核心对象构成集合 O O O
  3. 从集合 O O O 中选出一个核心对象 o o o,标记为类别 k k k,并更新 k ← k + 1 k\larr k+1 kk+1,加入队列 Q Q Q 中,重复下列过程直到 Q Q Q 为空
    (1) 从队列 Q Q Q 中取出队头 o ′ o' o N ( o ′ ) N(o') N(o) 为其邻域包含的点,令 △ = N ( o ′ ) ∩ S \triangle =N(o')\cap S =N(o)S,即邻域中未确定类别的点,标记为类 k k k
    (2) 更新 S = S − △ S=S-\triangle S=S Q = Q ∪ ( △ ∩ O ) − o ′ Q=Q\cup (\triangle \cap O)-o' Q=Q(O)o O = O − o ′ O=O-o' O=Oo
  4. 重复第3步直到 O O O 为空

这个运行流程可能有点绕,说人话就是找到一个核心对象,标记为类C,其邻域中包含的点也都属于类C。

同时,若这些点中存在核心对象,则这些核心对象包含的点也属于类C。

如果一个点不在任何类中,即不由任何核心对象密度可达,则为孤立点。因此DBSCAN可以用来定位孤立点。

2.3 层次聚类

层次聚类在不同层次上对数据集进行划分,形成树状的聚类结构,其中又根据构建过程分为两类:

  • 自底向上的聚合,初始化每个样本为一个类,每次对两个类进行合并(如AGNES聚类每次合并距离最近的类),重复这一过程直到类的数目与设定值的相同
  • 自顶向下的分拆,初始化所有样本为一个类,每次将类进行拆分,重复这一过程直到类的数目与设定值的相同

3. 聚类效果的评估

在聚类完成后,不同于监督学习算法可以划分验证集进行评估,聚类的效果评估通常有如下方法:

  • 业务专家评估,聚类结果评估应该与实际场景结合,由业务专家根据对业务的熟悉和敏感来评估聚类效果是最重要的评估方式
  • RMSSTD,群体内对象的相似程度,越小表示同一类的样本相似度越高,聚类效果越好,公式如下:
    • 将分子的求和顺序按变量顺序排列,也可理解为所有变量的综合标准差,参考书[1]中就是这种理解。

r = [ ∑ i ∑ x ∈ c i ∣ ∣ x − c i ∣ ∣ 2 N p ] 1 2 其 中 , c i 表 示 第 i 类 , N 表 示 样 本 数 , p 表 示 变 量 数 ( 排 除 维 度 差 异 ) r=[\frac{\sum_i \sum_{x\in c_i} ||x-c_i||^2}{Np}]^{\frac{1}{2}}\\ 其中,c_i表示第i类,N表示样本数,p表示变量数(排除维度差异) r=[Npixcixci2]21ciiNp()

  • R-Square,群体间差异的大小,可理解为聚类结果多大比例解释了原数据的方差,越大说明聚类效果越好,公式如下:(分子相当于为总体方差减去组内标准差,得到组间标准差,即群体间的差异性,越大效果越好)

r = ∑ x ∈ D ∣ ∣ x − c ∣ ∣ 2 − ∑ i ∑ x ∈ c i ∣ ∣ x − c i ∣ ∣ 2 ∑ x ∈ D ∣ ∣ x − c ∣ ∣ 2 r=\frac{\sum_{x\in D}||x-c||^2-\sum_i \sum_{x\in c_i} ||x-c_i||^2}{\sum_{x\in D}||x-c||^2}\\ r=xDxc2xDxc2ixcixci2

此外,还有很多评估方式,此处不再介绍,可以参考聚类算法的评估。

4. 聚类的注意事项

前面介绍了聚类分析的应用场景、常见的聚类算法和效果评估方式,本节介绍聚类使用时的一些注意点,也是在面试中可能考察的知识点。

  1. Kmeans聚类是应用最为广泛的聚类算法,需要了解其优缺点——
  • 优点:简洁,易于理解,效率高,计算复杂度是 O ( N K t ) O(NKt) O(NKt)
  • 缺点:受初值和离群点的影响较大,可能得到局部最优解,无法很好处理数据不平衡的情况,要初始化K值
  1. 处理噪声点、异常点,对Kmeans等聚类算法,受异常点的影响较大,处理异常点的思路有两种——
  • 直接删除噪声点,可以通过可视化、计算距离等方式发现噪声点,并删除
  • 随机抽样,使得出现噪声点的概率较低
  1. 数据归一化/标准化,通常不同变量的度量尺度不同,导致取值范围差异很大,取值范围越大的变量对聚类结果影响也越大,因此聚类前需要先对数据进行标准化或归一化——
  • 数据标准化,如使用 X − μ σ \frac{X-\mu}{\sigma} σXμ 转化为标准正态分布
  • 数据归一化,如使用 X − X m i n X m a x − X m i n \frac{X-X_{min}}{X_{max}-X_{min}} XmaxXminXXmin 将数据缩放至[0, 1]区间
  1. 共线性检验,若存在成共线性的变量,则聚类结果会倾向于受这些变量影响,因此需要先进行共线性检验,只保留一个作为聚类模型的输入
  2. Kmeans需要给定K值、初值随机(导致可能局部最优解),对应两种改进算法——
  • ISODATA,迭代自组织数据分析法。对高维度的大数据集,难以估计出K的大小。ISODATA是针对这个问题进行改进,当属于某个类别的样本数过少时把这个类别去除,当属于某个类别的样本数过多、分散程度较大时把这个类别分为两个子类别
  • K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0
  1. 聚类时要选择与项目需求关系最密切的核心变量,遵循"少而精"的原则——
  • 如从产品使用习惯区分用户,则选择用户行为、使用频率、时间等变量;从购买习惯,则选择付费方式、付费产品等变量考虑
  • 可以先根据核心变量进行聚类,根据聚类结果对每一类群体进一步分析其余变量

Reference

  1. 《数据挖掘与数据化运营实战 思路、方法、技巧与应用》,卢辉

  2. 《统计学习方法》

  3. 《百面机器学习》

  4. 从最大似然到EM算法浅解

  5. 聚类算法的评估

你可能感兴趣的:(数据分析)