最近在阅读阿里数据分析专家卢辉的《数据挖掘与数据化运营实战》。书中结合了实际业务案例,介绍了在实战项目中数据分析和数据挖掘的许多知识点,干货满满。
因此,打算结合书中内容,对一些重要的主题加以总结,在过程中加深对各个知识点的理解。
聚类是非监督学习中的一类算法,通常是通过多次迭代来找到数据的最优分割,将数据划分为多个类。
聚类在数据分析中十分常用,一般有两个典型的应用场景——
总的来说,聚类对目标群体进行多指标的划分,为个性化、精细化的运营提供基础。
聚类算法根据不同的思路可分为原型聚类、密度聚类、层次聚类三种,本节依次简单介绍。
原型聚类假设聚类结构能通过一组原型刻画,通常是先初始化原型,然后对原型进行迭代更新求解。
比如Kmeans聚类、GMM聚类都属于原型聚类。
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类的中心点 i∑N∣∣xi−μci∣∣2其中xi表示第i个样本点,ci表示xi所属的类,μci表示ci类的中心点
算法的运行流程如下:
随机选择 K K K 个点作为 K K K 个类的中心
对每个样本点,将其分配到最近的类,即
c i ← a r g min k ∣ ∣ x i − μ k ∣ ∣ 2 c_i \larr arg\min_k||x_i-\mu_k||^2 ci←argkmin∣∣xi−μk∣∣2
对每个簇,重新计算该类的中心(使中心变为当前类的均值点),即
μ 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 μk←argμmini:ci=k∑∣∣xi−μ∣∣2
重复第2、3步迭代过程直到收敛
其核心思想是假设K个类别均服从各自的高斯分布,模型使用EM算法求解,关于EM算法可以参考从最大似然到EM算法浅解。
算法的运行流程如下:
随机初始化K个类别的高斯分布参数
E步骤,根据当前参数计算每个样本属于每个类别的概率
M步骤,根据E步骤估计出的概率,找到更优的参数
高斯混合模型可以给出一个样本属于某类的概率是多少,因此可以用于聚类,也可以用于概率密度的估计和生成新的样本点。
密度聚类假设聚类结构能通过样本分布的紧密程度确定,基于可连接样本不断扩展聚类以得到最终的聚类结果。
DBSCAN是基于密度的聚类方法的一种,其核心思想是,同一类别中任意样本周围不远处一定有同类别的样本存在。
假设1是类C的样本,1和2距离很近,那2很可能也属于类C。而2和3距离很近,则尽管1和3距离有点远,但3仍然很有可能属于类C。基于密度的聚类可以理解成一种扩散/感染的过程。
DBSCAN中有几个概念:最小邻域点数MinPts,邻域半径Eps,核心对象。
在上述定义下,DBSCAN的思想就是,密度可达的所有点属于同一个类别。
算法运行流程如下:
这个运行流程可能有点绕,说人话就是找到一个核心对象,标记为类C,其邻域中包含的点也都属于类C。
同时,若这些点中存在核心对象,则这些核心对象包含的点也属于类C。
如果一个点不在任何类中,即不由任何核心对象密度可达,则为孤立点。因此DBSCAN可以用来定位孤立点。
层次聚类在不同层次上对数据集进行划分,形成树状的聚类结构,其中又根据构建过程分为两类:
在聚类完成后,不同于监督学习算法可以划分验证集进行评估,聚类的效果评估通常有如下方法:
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=[Np∑i∑x∈ci∣∣x−ci∣∣2]21其中,ci表示第i类,N表示样本数,p表示变量数(排除维度差异)
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=∑x∈D∣∣x−c∣∣2∑x∈D∣∣x−c∣∣2−∑i∑x∈ci∣∣x−ci∣∣2
此外,还有很多评估方式,此处不再介绍,可以参考聚类算法的评估。
前面介绍了聚类分析的应用场景、常见的聚类算法和效果评估方式,本节介绍聚类使用时的一些注意点,也是在面试中可能考察的知识点。
《数据挖掘与数据化运营实战 思路、方法、技巧与应用》,卢辉
《统计学习方法》
《百面机器学习》
从最大似然到EM算法浅解
聚类算法的评估