常见机器学习聚类算法

聚类最常见的,应该是kmeans。对于spark mllib,除了支持kmeans外,还支持GMM,主题模型LDA。

比较常用的聚类模型还有:DBSCAN(密度聚类);层次聚类;

 

K-Means聚类================

1.首先,我们选择一些类/组来使用并随机地初始化它们各自的中心点。要想知道要使用的类的数量,最好快速地查看一下数据,并尝试识别任何不同的分组。中心点是与每个数据点向量相同长度的向量,在上面的图形中是“X”。

2.每个数据点通过计算点和每个组中心之间的距离进行分类,然后将这个点分类为最接近它的组。

3.基于这些分类点,我们通过取组中所有向量的均值来重新计算组中心。

4.对一组迭代重复这些步骤。你还可以选择随机初始化组中心几次,然后选择那些看起来对它提供了最好结果的来运行。

K-Means聚类算法的优势在于它的速度非常快,因为我们所做的只是计算点和群中心之间的距离;它有一个线性复杂度O(n)。

 

对于kmeans,最主要的是K值的选择。首先根据业务需求定,也可以根据尝试法:先设置一个较小的值,观察,随着k的增大,是否cost减少。当cost基本保持不变的时候,就达到了最有K值。

其次kmeans算法对簇心的初始值也比较敏感。针对kmeans有几种改进:

https://www.jianshu.com/p/2fa67f9bad60

Kmeans++ ; Kmeansll ;二分 Kmeans ;Canopy算法; Mini batch k- Means 算法;

 

Kmeans++   ===============

该算法可以避免初始簇心敏感的问题。步骤如下:

从数据集中任选一个节点作为第一个聚类中心;

对数据集中的每个点X,计算X到所有簇心的距离只和D(x)。基于D(x) 采用线性概率选择出下一个中心点。距离越大,该样本称为下一个中心点的概率越大。

重复以上两个步骤,直到找到K个簇心。

 

Kmeansll   ================

Kmeans++ 方法每确定一个簇心,就需要遍历数据集一次,而且后面的簇心依赖于前面的簇心。Kmeansll方法每次从样本中任选k个点,重复0(k*logn)次。

最终将这些样本聚类成K个点,并将这K个点作为kmeans聚类的初始簇心。

二分kmeans=============

首先将所有样本作为一个簇;从已有簇中选择一个进行二分;重复第二步,知道簇的个数>=k.

选择哪个簇进行二分?

样本数量最多;簇内聚类最大;

 

Canopy算法 kænəpi=========

(1)给定样本列表L=x1,,2…,m以及先验值T1和T2(T1>T2)
(2)从列表L中获取一个节点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点P形成一个新的聚簇),并选择出最小距离D(P,aj)。
(3)如果距离D小于T1,表示该节点属于该聚簇,添加到该聚簇列表中
(4)如果距离D小于T2,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该聚簇的中心点设置为该簇中所有样本的中心点,并将P从列表L中删除。
(5)如果距离D大于T1,那么节点P形成一个新的聚簇。
(6)直到列表L中的元素数据不再有变化或者元素数量为0的时候,结束循环操作。

 

Mini batch k- Means算法=======

(1)首先抽取部分数据集,使用K- Means算法构建出K个聚簇点的模型。
(2)继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点。
(3)更新聚簇的中心点值。
(4)循环迭代第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作。
应用场景,由于Mini Batch KMeans跟K-Means是极其相似的两种聚类算法,因此应用场景基本一致。

 

 

GMM======================

高斯混合模型就是用高斯概率密度函数正态分布曲线)精确地量化事物,它是一个将事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型

随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布

使用高斯混合模型来期望最大化聚类

1.我们首先选择聚类的数量(如K-Means所做的那样),然后随机初始化每个聚类的高斯分布参数。通过快速查看数据,可以尝试为初始参数提供良好的猜测。注意,在上面的图表中可以看到,这并不是100%的必要,因为高斯开始时的表现非常不好,但是很快就被优化了。

2.给定每个聚类的高斯分布,计算每个数据点属于特定聚类的概率。一个点离高斯中心越近,它就越有可能属于那个聚类。这应该是很直观的,因为有一个高斯分布,我们假设大部分的数据都离聚类中心很近。

3.基于这些概率,我们为高斯分布计算一组新的参数,这样我们就能最大程度地利用聚类中的数据点的概率。我们使用数据点位置的加权和来计算这些新参数,权重是属于该特定聚类的数据点的概率。为了解释这一点,我们可以看一下上面的图,特别是黄色的聚类作为例子。分布在第一次迭代中是随机的,但是我们可以看到大多数的黄色点都在这个分布的右边。当我们计算一个由概率加权的和,即使在中心附近有一些点,它们中的大部分都在右边。因此,自然分布的均值更接近于这些点。我们还可以看到,大多数点都是“从右上角到左下角”。因此,标准差的变化是为了创造一个更符合这些点的椭圆,从而使概率的总和最大化。

步骤2和3被迭代地重复,直到收敛,在那里,分布不会从迭代到迭代这个过程中变化很多。

https://blog.csdn.net/u011511601/article/details/81951939

 

LDA========================

LDA要干的事情简单来说就是为一堆文档进行聚类(所以是非监督学习),一种topic就是一类,要聚成的topic数目是事先指定的。

这里可以把一个样本作为一个文档进行聚类。

 

DBSCAN====================

基于距离的聚类算法,只能找到“类圆形”的簇。基于密度的聚类,可以解决这个问题。

该聚类算法需要给定两个参数:领域大小e,簇的最小样本数量M。

1.DBSCAN以一个从未访问过的任意起始数据点开始。这个点的邻域是用距离ε(所有在ε距离的点都是邻点)来提取的。

2.如果在这个邻域中有足够数量的点(根据 minPoints),那么聚类过程就开始了,并且当前的数据点成为新聚类中的第一个点。否则,该点将被标记为噪声(稍后这个噪声点可能会成为聚类的一部分)。在这两种情况下,这一点都被标记为“访问(visited)”。

3.对于新聚类中的第一个点,其ε距离附近的点也会成为同一聚类的一部分。这一过程使在ε邻近的所有点都属于同一个聚类,然后重复所有刚刚添加到聚类组的新点。

4.步骤2和步骤3的过程将重复,直到聚类中的所有点都被确定,就是说在聚类附近的所有点都已被访问和标记。

5.一旦我们完成了当前的聚类,就会检索并处理一个新的未访问点,这将导致进一步的聚类或噪声的发现。这个过程不断地重复,直到所有的点被标记为访问。因为在所有的点都被访问过之后,每一个点都被标记为属于一个聚类或者是噪音。

DBSCAN比其他聚类算法有一些优势。首先,它不需要一个预设定的聚类数量。它还将异常值识别为噪声,而不像均值偏移聚类算法,即使数据点非常不同,它也会将它们放入一个聚类中。此外,它还能很好地找到任意大小和任意形状的聚类。

DBSCAN的主要缺点是,当聚类具有不同的密度时,它的性能不像其他聚类算法那样好。这是因为当密度变化时,距离阈值ε和识别邻近点的minPoints的设置会随着聚类的不同而变化。这种缺点也会出现在非常高维的数据中,因为距离阈值ε变得难以估计。

https://blog.csdn.net/u011511601/article/details/81951939

 

 

层次聚类===================

首先将所有的样本都当做一个簇;将最相似的两个簇进行合并为一个簇;重复第二步,知道最终只有一个簇;

如何计算两个簇间的距离?

两个簇的所有点,两两最近的距离;两两最远;平均值。

 

 

如何对聚类结果进行评估?

均一性又叫完整性;兰德系数(RI);轮廓系数 Silhouette Coefficient ;结果评估。

均一性也被认为是准确性=簇内分对的样本个数/簇内总的样本个数    最后求和取平均。

RI:分母=所有样本集合中,两个样本两两组合的数量。

分子=本来应该在一类,实际也分为了一类的对儿个数 + 本来不应该在一类,最后也没被分为一类的对儿个数。

这个系数需要知道每个样本的实际分类。

 

轮廓系数:对所有样本聚类结束后,计算每个样本与簇内其他样本的距离的平均值a(i),以及到其他簇所有样本的距离的平均值b(i)。对于每个样本计算s(i)=[b(i)-a(i)] / max(a(i)-b(i))。

聚类的轮廓系数=avg(s(i))

这个系数不需要提前知道样本类别

 

结果评估法:其实有时候聚类不是最终目的,可以看最终的结果来评价分组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值