机器学习原型聚类

1. 原型聚类

原型聚类即“基于原型的聚类”(prototype-based clustering),原型表示模板的意思,就是通过参考一个模板向量或模板分布的方式来完成聚类的过程,常见的K-Means便是基于簇中心来实现聚类,混合高斯聚类则是基于簇分布来实现聚类。

1.2 kmeans

1.2.1 基本原理

K-means是一种常见的聚类算法,也叫k均值或k平均。通过迭代的方式,每次迭代都将数据集中的各个点划分到距离它最近的簇内,这里的距离即数据点到簇中心的距离。

kmean步骤

  1. 随机初始化k个簇中心坐标
  2. 计算数据集内所有点到k个簇中心的距离,并将数据点划分近最近的簇
  3. 更新簇中心坐标为当前簇内节点的坐标平均值
  4. 重复2、3步骤直到簇中心坐标不再改变(收敛了)

事实上,若将样本的类别看做为“隐变量”(latent variable),类中心看作样本的分布参数,这一过程正是通过EM算法的两步走策略而计算出,其根本的目的是为了最小化平方误差函数E:

11.png

这里的重新计算每个簇的质心,如何计算的是根据目标函数得来的,因此在开始时我们要考虑距离度量和目标函数。

考虑欧几里得距离的数据,使用误差平方和(Sum of the Squared Error,SSE)作为聚类的目标函数,两次运行K均值产生的两个不同的簇集,我们更喜欢SSE最小的那个。

1.2.2 优缺点

优点:效率高、适用于大规模数据集

缺点 改进 描述
k值的确定 ISODATA 当属于某个簇的样本数过少时把这个簇去除,
当属于某个簇的样本数过多、分散程度较大时把这个簇分为两个子簇
对奇异点敏感 k-median 中位数代替平均值作为簇中心
只能找到球状群 GMM 以高斯分布考虑簇内数据点的分布
分群结果不稳定 K-means++ 初始的聚类中心之间的相互距离要尽可能的远

1.2.3 k值得选取

K-means算法要求事先知道数据集能分为几群,主要有两种方法定义k。

  • 手肘法:通过绘制k和损失函数的关系图,选拐点处的k值。
  • 经验选取人工据经验先定几个k,多次随机初始化中心选经验上最适合的。

通常都是以经验选取,因为实际操作中拐点不明显,且手肘法效率不高。

1.3 学习向量量化(LVQ)

LVQ也是基于原型的聚类算法,与K-Means不同的是,LVQ使用样本真实类标记辅助聚类,首先LVQ根据样本的类标记,从各类中分别随机选出一个样本作为该类簇的原型,从而组成了一个原型特征向量组,接着从样本集中随机挑选一个样本,计算其与原型向量组中每个向量的距离,并选取距离最小的原型向量所在的类簇作为它的划分结果,再与真实类标比较。

若划分结果正确,则对应原型向量向这个样本靠近一些 若划分结果不正确,则对应原型向量向这个样本远离一些

LVQ算法的流程如下所示:

13.png

1.4 高斯混合聚类**

现在可以看出K-Means与LVQ都试图以类中心作为原型指导聚类,高斯混合聚类则采用高斯分布来描述原型。现假设每个类簇中的样本都服从一个多维高斯分布,那么空间中的样本可以看作由k个多维高斯分布混合而成

对于多维高斯分布,其概率密度函数如下所示:

14.png

其中u表示均值向量,∑表示协方差矩阵,可以看出一个多维高斯分布完全由这两个参数所确定。接着定义高斯混合分布为:

15.png

α称为混合系数,这样空间中样本的采集过程则可以抽象为:(1)先选择一个类簇(高斯分布),(2)再根据对应高斯分布的密度函数进行采样,这时候贝叶斯公式又能大展身手了:

16.png

此时只需要选择PM最大时的类簇并将该样本划分到其中,看到这里很容易发现:这和那个传说中的贝叶斯分类不是神似吗,都是通过贝叶斯公式展开,然后计算类先验概率和类条件概率。但遗憾的是:这里没有真实类标信息,对于类条件概率,并不能像贝叶斯分类那样通过最大似然法美好地计算出来,因为这里的样本可能属于所有的类簇,这里的似然函数变为:

17.png

可以看出:简单的最大似然法根本无法求出所有的参数,这样PM也就没法计算。这里就要召唤出之前的EM大法,首先对高斯分布的参数及混合系数进行随机初始化,计算出各个PM(即γji,第i个样本属于j类),再最大化似然函数(即LL(D)分别对α、u和∑求偏导 ),对参数进行迭代更新

18.png

高斯混合聚类的算法流程如下图所示:

19.png

2. 面试题

2.1 kmeans

1. K-means算法中初始点的选择对最终结果的影响
K-means选择的初始点不同获得的最终分类结果也可能不同,随机选择的中心会导致K-means陷入局部最优解。

2. 为什么在计算K-means之前要将数据点在各维度上归一化
因为数据点各维度的量级不同。
举个例子,最近正好做完基于RFM模型的会员分群,每个会员分别有R(最近一次购买距今的时长)、F(来店消费的频率)和M(购买金额)。如果这是一家奢侈品商店,你会发现M的量级(可能几万元)远大于F(可能平均10次以下),如果不归一化就算K-means,相当于F这个特征完全无效。如果我希望能把常客与其他顾客区别开来,不归一化就做不到。

  1. K-means不适用哪些数据
  • 数据特征极强相关的数据集,因为会很难收敛(损失函数是非凸函数),一般要用kernal K-means,将数据点映射到更高维度再分群。
  • 数据集可分出来的簇密度不一,或有很多离群值(outliers),这时候考虑使用密度聚类。
  1. K-means 中常用的距离度量
    K-means中比较常用的距离度量是欧几里得距离和余弦相似度。

  2. K-means是否会一直陷入选择质心的循环停不下来(为什么迭代次数后会收敛)?
    从K-means的第三步我们可以看出,每回迭代都会用簇内点的平均值去更新簇中心,所以最终簇内的平方误差和(SSE, sum of squared error)一定最小。 平方误差和的公式如下:
    L(X) = \sum_{i=1}^{k}{\sum_{j\in C_i}{(x_{ij}-\bar{x_i})^2}}

  3. 聚类和分类区别

  • 产生的结果相同(将数据进行分类)
  • 聚类事先没有给出标签(无监督学习)
  1. 如何对K-means聚类效果进行评估

回到聚类的定义,我们希望得到簇内数据相似度尽可能地大,而簇间相似度尽可能地小。常见的评估方式:

名称 公式 含义 如何比较
sum of squares within clusters(SSW) \sum_{i=1}^{K}{ \parallel x_i-c_{l_i} \parallel ^2} 所有簇内差异之和 越小越好
sum of squares between clusters(SSB) \sum_{i=1}^{K}{n_i \parallel c_i-\bar{x} \parallel ^2} 簇心与簇内均值差异的加权和 越大越好
Calinski-Harabasz \frac{\frac{SSB}{K-1}}{\frac{SSW}{N-K}} 簇间距离和簇内距离之比(除数是惩罚项,因为SSW下降地比较快) 越大越好
Ball&Hall \frac{SSW}{K} 几乎同SSW 越小越好
Dunn’s index \frac{\min_{i=1}^M{\min_{j=i+1}^M{d(c_i, c_j)}}}{\max_{k=1}^M{diam(c_k)}}
where d(c_i, c_j)=\min_{x \in c_i, x' \in c_j}{\parallel x-x' \parallel}^2 and
diam(c_k)=\max_{x, x' \in c_k}{\parallel x-x' \parallel}^2
本质上也是簇间距离和簇内距离之比 越大越好

另一个常见的方法是画图,将不同簇的数据点用不同颜色表示。这么做的好处是最直观,缺点是无法处理高维的数据,它最多能展示三维的数据集。
如果维数不多也可以做一定的降维处理(PCA)后再画图,但会损失一定的信息量。

聚类算法几乎没有统一的评估指标,可能还需要根据聚类目标想评估方式,如对会员作分群以后,我想检查分得的群体之间是否确实有差异,这时候可以用MANOVA计算,当p值小于0.01说明分群合理。

  1. K-means中空聚类的处理
    如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。如果这种情况发生,则需要某种策略来选择一个替补质心,否则的话,平方误差将会偏大。
  • 一种方法是选择一个距离当前任何质心最远的点。这将消除当前对总平方误差影响最大的点。
  • 另一种方法是从具有最大SEE的簇中选择一个替补的质心。这将分裂簇并降低聚类的总SEE。如果有多个空簇,则该过程重复多次。另外编程实现时,要注意空簇可能导致的程序bug。
  1. K-Means 的迭代循环停止条件
    簇不发生变化或达到最大迭代次数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容