机器学习-聚类

http://en.wikipedia.org/wiki/Multispectral_pattern_recognition

  1. 聚类基础知识

  2. 凝层次聚类

  3. K-means 聚类

  4. 基于EM算法的聚类

聚类基础知识

聚类:将数据划分到不同的类里,使相似的数据在同一类里,不相似的数据在不同的类里(物以类聚,人以群分)。

主要应用:

  1. 文本聚类,图像聚类,商品聚类。

  2. 便于发现规律,以及解决数据稀疏问题。

拿到一些大数据,如果没有什么先验知识,我们可以先聚类,来发现规律。

聚类的类型:

层次聚类 非层次聚类

硬聚类 VS 软聚类

硬聚类:每个对象只属于一类。

软聚类:每个对象都以某个概率属于每个类。

距离矩阵 相似度矩阵

大家可以看到:矩阵 D 中,1 与 2 距离为2.0,2 与 4 的距离是:9.0.

由于矩阵是对称的,所以只用下三角阵就可以。

有时在优化的过程中,我们只需要相似度矩阵,而不需要知道真正原始数据。

有时我能很容易得到相似度矩阵,而不容易得到原始矩阵。比如:在社交网络中,我们计算人与人的之间关系(也就是相似度)

比如:

人1 ==》 人2 (人1 与 人2 是好友),距离1

人1 ==》 人2 ==人3 (人1 与人2,人2 和 人3 是好友),距离2

聚类效果评价:

内部评价(Internal Evaluation):同类是否相似,跨类是否相异。(无监督)

内部评价:Davies--Bouldin index

:表示类 x 的质心。

:表示类 x 内的所有对象到质心的平均距离。

外部评价(External Evaluation):跟外部标准的一致度(监督)

分类指标:准确度(accuracy)、精度(Precision)、召回(Recall)、F值(F-measure)

,其中P:是精度,R是召回。β 是参数调整 P 和 R 权重,β =1 表示:P 和 R 同等重要。F值越大越好。

凝聚层次聚类

自底向上:凝聚层次聚类(Agglomerative Hierarchical Clustering)

自顶向下:分裂层次聚类(Divisive Hierarchical Clustering)

Agglomerative Hierarchical Clustering 算法描述:

  1. 将每个对象归为一类,共得到N类,每类仅包含一个对象。

  2. 找到最近接的两个类合并成一类。

  3. 重新计算新的类与所有旧类之间的聚类

  4. 重复第 2 步和第 3 步,直到最后合并成为一个类为止(此类包含了N 个对象)

第一步 第二步 第三步

第四步 第五步 第六步

最后生成这个树。如果我们需要几个聚类,只需要在树上横切一刀,切着几根线,就是几个类。

当然,如果事先知道要聚几个类,我们不没有必要生成这个棵树,在凝聚到我们要的个数时,停止凝聚即可。

凝聚层次聚类:每次减少一个分类。所以需要聚 n-1 次(所以这种聚类方法是很慢的,如果我们有10万零1条数据,那么我们需要聚10万次)。

树在查询时,这种遍历和:前序遍历,中序遍历,后序遍历,广度优先遍历,深度优先遍历,这些传统的树遍历方法有所不一样,我们要根据 similarity 小的优先遍历,也就是我们需要模拟一条直线从上向下切割,我们通过一个有序堆栈来存别切断的类,如果堆栈中数据不够我们的要求的,我们会弹出一个 similarity 最小的node ,然后将他的左右子节点放入堆栈中(我们采用插入排序进行降序排列,保证下次弹出最小的 similarity 的 node),这样堆栈中又多了一个类。依次增加堆栈中节点个数。直到达到 K 的个数。

距离的计算法方式:

单链(single linkage):类的距离定义为:两个类中对象间的最近距离。

全链(complete linkage):类的距离定义为:两个类中对象间的最远距离。

组平均(average linkage)类的距离定义为:两个类中对象间的平均距离。

min(single link) max(complete link) Group average

single link:易受噪音和 outliers 影响。容易形成较大大分类(链状)需要计算9次

complete link:受噪音和 outliers 影响较小。容易形成很多大小差不多的分类。需要计算9次

group average:介于两者之间。需要计算9次

还有一种,我们计算每个类的质心每个类需要3次计算。然后用质心间的距离作为类与类之间的距离。本例供需6次计算。

这样看来计算比较少。但是由于每次质心都是不一样的,所以我们要计算质心。其他三种情况,聚类都是数据与数据之间的,所以我们可以建一个相似度矩阵,这样在以后的计算划分过程中,我们只需要取值即可。总体上,经典中三种情况还是有可取之处的。

,如图:由于大类的表面积大,所以如果用single link,大类跟容易吸收其他数据。如果用complete link,由于大类就吃亏了,因为他最远点,也比较远。

凝聚层次聚类小结

  1. 算法简单

  2. 层次用于:概念聚类(生成概念、文档层次树)

  3. 聚类对象的两种表示法都适用。

  4. 处理大小不同的簇。

  5. 簇选取步骤在梳妆图生成之后。

K-means 聚类

算法描述

  1. 任意选择 K 个点作为初始聚类中心。(如果最初有一定目的性,我们可以手动设置质心,比如我们想用外部目标评价聚类,聚成两个类,一个是体育类,一个是财经,我们可以收集很多财经的词汇作为中心点,收集很多体育词汇作为另一个中心点)。

  2. 根据每个聚类的中心,计算每个对象与这些中心的距离,并根据最小距离重新对相应对象进行划分。

  3. 重新计算每个聚类中心。

  4. 当满足一算法终止定条件,如类别划分不再变化过时,则,否则继续步骤 2 和 3

  • Demonstration of the standard algorithm

    1. k initial "means" (in this case k=3) are randomly generated within the data domain (shown in color).
    1. k clusters are created by associating every observation with the nearest mean. The partitions here represent theVoronoi diagram generated by the means.
    1. The centroid of each of the k clusters becomes the new mean.
    1. Steps 2 and 3 are repeated until convergence has been reached.

损失函数:Within-Cluster Sum of Squares (WCSS)

在每次更新质心后,WCSS 是单调递减的。每次循环都输出WCSS的值,如果值没有单调递减,则表明在训练数据时,程序有错误。也可用弄一条数据,进行测试。避免数据量大不容看出计算的数值错误。

在每次求质心就是最小化 L(C)。

K-Means 是局部最优。也就是K-Means 聚类结果不稳定。

,途中红圈是 K 的初始值,我们可以看到每次 K 取的值不一样,聚类的结果相差很大。

距离的选择:

  1. L1 范数:|x-y|

  2. L2范数:(x-y)^2

  3. 余弦相似性:。注意:一般距离度量,距离越远,越不行相似。而余弦相似性:conβ 值越大越相似。

在对文本进行相似计算时:余弦相似性用的还是比较多的。由于数据稀疏性,如果两个向量中对应 feature 只有一个有值,那么计算距离时需要计算。如果余弦相似性那么就不需要计算,因为内积时这一维是为零。

中心点的选择:

1.随机

2.多轮随机,选择最小的WCSS

3.如果有目的的聚类,可以根据目的手工设置。

一旦 K 确定,K-Means 其实是按照中心点的中垂线对空间进行分割(图中黑点是中心点)。

所以中心点的选择,对聚类的结果影响也很大。 图1

所以一旦中心点确定了,空间的划分也就确定了,这样 K-Means 对原始数据的密度,类的大小没有考虑。由于 K-Means 是对空间在中垂线无偏的划分,可以根据原始数据加个权重。在后边 GMM 分类中就有这样的效果。

K 值的确定:根据先验知识我们知道 K 取值的大致范围,在取值范围内我们尽量取一个稍微大一点的值,因为一般我们将一个大类细分成两个子类我们可以接受,比如:将体育系统查分成篮球比赛和足球比赛两个类。但是将两个类没有分开是不可接受的。比如:体育类和财经类没有分开。

K-Means 优点:

  1. 算法简单,有效

  2. 时间复杂度低 O(nkt).n:聚类对象数,k 簇的数目,t 迭代次数。

K-means 聚类限制

  1. 处理非球(凸面)聚类。图1可以,K-Means 是直线将空间划分,所以对凸面分布的数据聚类效果不好。

  2. 密度,大小不同的聚类(受 K 的限制,难于发现自然的聚类)

K-Means 聚类效果与层次聚类效果对比

层次聚类的效果 K-Means 聚类的效果

层次聚类的效果 K-Means 聚类的效果

K-Means 分布式应用:

在 每个 Reduce 中,都有一个份质心列表。每个 Reduce 都需要计算他拥有的数据到质心的距离,并且重新分类,重新分类后,重新计算质心。这样每个Reduce 都有一个新的不同的质心。这是 Map 负责从每个Reduce那里收集质心,然后求一个平均,算出最终的质心,然后再重新分发给每个Reduce,每个Reduce就开始新的一轮计算。

基于 EM(Expectation-Maximization) 算法的聚类

高斯分布(正态分布)

一元正态分布概率密度函数(PDF): 公式 1

多元正态分布概率密度函数PDF:将方差编程协方差矩阵。

如果我们知道一些数据符合高斯分布并且知道 σ 和 μ ,你给我x 我通过密度函数能够求出 x 的概率。(已知分布求概率)

如果我们知道一些数据(x1,x2,x3,x4...)和概率,但是不知道它们具体哪个具体的高斯分布,我需要求 σ 和 μ 的值,已确定分布。

μ=(x1+x2+...+xn)/n

σ^2=[(x1-μ)^2+(x2-μ)^2+...+(xn-μ)^2]

一元高斯分布

多元高斯分布(平均数的求方法跟一元高斯分布一样)

这是一个协方差矩阵。

混合模型

数据由多个分布产生:如果:高斯分布(也可以不是高斯分布,二项分布,指数分布...等)

对数据聚类:

  1. 估计分布的参数。

  2. 根据分布计算数据属于不同的分布(不同参数的高斯分布)的概率。

高斯分布可用于描述"椭圆形"的簇。

混合模型分布:是软聚类。而分层聚类和K-Means 都是硬聚类。

我们可以看到:每个环,就像一个等高线,在同一个环上的点,概率都相同。中心环的概率最高。越向外逐渐衰减,不同的分布中环与环不具有可比性,因为不同分布的衰减率不同,有的分布衰减很快,有些分布衰减比较缓慢。所有点,都在三个高斯分布中,但是概率不同。

混合高斯分布GMM

数据是由多个高斯分布的模型线性组合之后的模型产生的。

这是混合高斯分布的模型。

x:特征向量。θ:表示其他参数像:μ,σ,Σ。 m:表示有个混合模型,这 m 模型都产生点 x 一部分。P(j):第 j 个高斯分布的一个权重。

Log 似然函数:

这就是GMM的策略。

我们要最大化这个似然函数。这个似然函数表示的意思:每条数据通过模型求得概率,然后将概率连乘,这里取了对数,所以是求和。

我们要给出一个π,μ,Σ 的值,使得似然函数值最大。平常求极值,我们直接求导等于 0 ,这可以了。大家可以看到这个方程比较复杂,所以我们需要用另外一种方法:EM 算法,虽然刚开始,我们得值不是很好,但是 EM 算法逐渐优化,最后会得到一个比较不错的结果。

这个似然函数单调上升。

EM 算法 期望最大(Expectation Maximization)

EM 是一种迭代优化算法。

解决数据不完整情况下的参数估计。不完整的意思是:不知道数据由那些模型产生的。

原理:E 步骤:利用当前参数值计算隐藏变量的后验概率,并基于此计算目标函数的期望。

M 步骤:最大化目标函数,求得新的参数值。

E步:.这里 j 表示一个类。分母是属于所有类加起来求和,这是归一化。P(j):表示第 j 个模型本来的概率(先验概率,这个公式和朴素贝叶斯分类器那个公式非常相似,只不多朴素贝叶斯分类器的后验概率,是通过一个独立假设后,我们对每个词概率的连乘求出来的,而这里是数据满足高斯分布,我们可以直接利用高斯分布的密度函数直接求出来。在朴素贝叶斯中我们将分母舍弃,是因为我们只算一边就确定了数据分类,并且我们是比较各类别之间的大小,这里确实要计算出后验概率的实际值,因为我们多次迭代,计算出靠谱的参数后,再去划分类型)。

M步:

其中:l 表示循环第几轮。

M 步中的 p(j|t) 等价于 p ( j | xt ,θ )

这里是高斯分布,所以用了高斯分布的密度函数,用了高斯分布的参数估计的方法。如果我们用其他分布,只需要将替换成对应的密度函数和参数估计方法就可以了。

例子:假设我们有三个点:。他们分别有两个高斯模型产生:,.现在要求将这两个点聚成两类。

一开始我们先假设:初始值:

这时我们需要求: (点1 属于c1 的后验概率:注意:这和朴素贝叶斯的一样)。

第一步:条件概率等于,联合概率除以自身的概率。

第二步:自身的概率,等于分别属于c1,c2 联合概率的和。全概率公式。

我将x1 带入N1 就得到p(c1,x1).将 x1 带入 N2 就得到p(c2,x1)。这样我们的p(c1|x1)也就求出来了。

假设: p(c1|x1)=0.8 p(c2|x1)=0.2

x1(0.8,0.2) x2(0.3,0.7) x3(0.5,0.5) (与K-Means比较。在K-Means中,如果x1 属于第一个分类的概率是0.8,那么K-Means 直接就他属于第一个分类概率设置为(0,1),这EM做了这样的平滑)

以上是E步,下边是M 步

接下来,我们重现算模型:

p(c1)=0.8+0.3+0.5=1.6

p(c2)=0.2+0.7+0.5=1.4 类型的先验概率

所以天然的第一个类比第二类要大一点,所以应该给他比例大一点。当然这个先验概率在每一轮迭代中也要变得。

( 这里是将属于这个类别下的那部分加和求平均,在K-Means中,求质心时,极端化,所有概率都是1的,也就内部的点的加和平均)。

相关推荐
FHYAAAX26 分钟前
【机器学习】任务六:分类算法(支持向量机(SVM)在线性可分与不可分数据中的应用与可视化分析)
机器学习·支持向量机·分类·svm
正义的彬彬侠44 分钟前
矩阵的特征值和特征向量
人工智能·线性代数·机器学习·矩阵
赋创小助手1 小时前
下一代性能怪兽RTX 5090最新规格更新与Blackwell架构解析
人工智能·科技·深度学习·机器学习·架构
技术无疆1 小时前
【Python】Daphne:Django 异步服务的桥梁
开发语言·人工智能·后端·python·机器学习·数据挖掘·django
tt5555555555551 小时前
机器学习学习笔记-20240927
笔记·学习·机器学习·计算机视觉
Tunny_yyy1 小时前
李宏毅机器学习2022-HW9--Explainable AI
人工智能·机器学习
深度学习实战训练营4 小时前
FiBiNET模型实现推荐算法
算法·机器学习·推荐算法
拜刊物苏哲5 小时前
【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
机器学习·分类·回归·k近邻算法
@技术无疆5 小时前
Python 机器学习:预测国庆黄金周的消费趋势
开发语言·人工智能·python·深度学习·神经网络·机器学习·小程序
计算机编程-吉哥5 小时前
计算机毕业设计 基于Python高校岗位招聘和分析平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
大数据·python·机器学习·django·毕业设计·毕业论文·计算机毕业设计选题