聚类算法专题

一、聚类算法简介

在这里插入图片描述
在这里插入图片描述

  • 聚类算法:

    • 一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。
  • 聚类算法与分类算法最大的区别:

    • 聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。

二、K-means算法

在这里插入图片描述

2.1 算法原理

在这里插入图片描述
中心点也可以称之为质心

在这里插入图片描述

在这里插入图片描述

2.2 K-means算法流程

1、选择聚类的个数K
2、任意产生K个聚类,然后确定聚类中心,或者直接生成K个中心
3、对每个点确定其聚类中心点
4、再计算其聚类新中心
5、重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。)

2.3 算法原理

  • 欧式距离

在这里插入图片描述

  • 曼哈顿距离

在这里插入图片描述

  • 闵氏距离
    在这里插入图片描述

2.4 K-means算法总结

  • 事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心
  • 并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类
  • 重新计算每个类的质心(即为类中心)
  • 重复这样的过程,直到质心不再改变,最终确定了每个样本所属的类别以及每个类的质心
  • 由此每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-means算法的收敛速度比较慢

在这里插入图片描述

2.5 K-means算法案例

# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import MiniBatchKMeans,KMeans
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
# 生成数据集
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]], cluster_std=[0.4, 0.2, 0.2, 0.2], 
                  random_state =9)

# 绘制数据散点图
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

在这里插入图片描述

# 可视化
for index,k in enumerate((2,3,4,5)):
    plt.subplot(2,2,index+1)
    y_pred = MiniBatchKMeans(n_clusters=k,batch_size=200,random_state=9).fit_predict(X)
    score = metrics.calinski_harabaz_score(X,y_pred)
    plt.scatter(X[:,0],X[:,1],c=y_pred)
    plt.text(.99,.01,('k=%d,score:%.2f'%(k,score)),
            transform=plt.gca().transAxes,size=10,horizontalalignment='right')
    
plt.show()

在这里插入图片描述

三、算法效果衡量标准

3.1 SSE值:误差平方和

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 随着K值得增加,SSE值将会一直递减
    在这里插入图片描述
  • 聚类效果有可能好,有可能不好

3.2 K值确定

在这里插入图片描述

  • 对于n个点得数据集,迭代计算K,from 1 to n
  • 每次聚类完成后计算每个点到其所属得簇中心得距离得平方和
  • 平方和是会逐渐减小得,直到k==n时,平方和为0,因为每个点都是它所在得簇中心本身
  • 在这个平方变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的K值

在这里插入图片描述

3.3 轮廓系数法(Silhouette Coefficient)

在这里插入图片描述
在这里插入图片描述

  • sc范围 [-1,1]

  • 越接近1越好
    在这里插入图片描述

  • K = 2
    在这里插入图片描述

  • K =4
    在这里插入图片描述

  • 轮廓宽度相差不大的,故选择K=4

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4 Calinski-Harabasz Index(CH系数)

  • Calinski-Harabasz:类别内部数据的距离平方和越小越好,类别之间的距离平方和越大越好,这样的Calinski-Harabasz分数S会高,分数s高,则聚类效果越好。
    在这里插入图片描述

  • SSB类别之间的距离,越大越好

  • SSW内内的距离,越小越好

  • CH越大越好
    在这里插入图片描述

  • 高内聚,低耦合
    在这里插入图片描述

在这里插入图片描述

3.5 总结

在这里插入图片描述

3.5.1 肘部法

在这里插入图片描述
在这里插入图片描述

3.6 算法优点

在这里插入图片描述

3.7 算法缺点

在这里插入图片描述

四、聚类算法优化

4.1 Canopy算法配合初始聚类

在这里插入图片描述
在这里插入图片描述

  • Canopy属于一种‘粗’聚类算法,即使用一种简单、快捷的距离计算方法将数据集分为若干可重叠的子集canopy,这种算法不需要指定k值、但精度较低,可以结合K-means算法一起使用:先由Canopy算法进行粗聚类得到k个质心,再使用K-means算法进行聚类。

  • Canopy算法步骤如下:

    (1)将原始样本集随机排列成样本列表L=[x1,x2,…,xm](排列好后不再更改),根据先验知识或交叉验证调参设定初始距离阈值T1、T2,且T1>T2 。

    (2)从列表L中随机选取一个样本P作为第一个canopy的质心,并将P从列表中删除。

    (3)从列表L中随机选取一个样本Q,计算Q到所有质心的距离,考察其中最小的距离D:

      如果D≤T1,则给Q一个弱标记,表示Q属于该canopy,并将Q加入其中;
    
      如果D≤T2,则给Q一个强标记,表示Q属于该canopy,且和质心非常接近,所以将该canopy的质心设为所有强标记样本的中心位置,并将Q从列表L中删除;
    
      如果D>T1,则Q形成一个新的聚簇,并将Q从列表L中删除。
    

    (4)重复第三步直到列表L中元素个数为零。

参考链接:https://blog.youkuaiyun.com/liuy9803/article/details/80779692

在这里插入图片描述

  • 注意:

(1)‘粗’距离计算的选择对canopy的分布非常重要,如选择其中某个属性、其他外部属性、欧式距离等。

(2)当T2<D≤T1时,样本不会从列表中被删除,而是继续参与下一轮迭代,直到成为新的质心或者某个canopy的强标记成员。

(3)T1、T2的取值影响canopy的重叠率及粒度:当T1过大时,会使样本属于多个canopy,各个canopy间区别不明显;当T2过大时,会减少canopy个数,而当T2过小时,会增加canopy个数,同时增加计算时间。

(4)canopy之间可能存在重叠的情况,但是不会存在某个样本不属于任何canopy的情况。

(5)Canopy算法可以消除孤立点,即删除包含样本数目较少的canopy,往往这些canopy包含的是孤立点或噪音点。

4.2 K-means++

在这里插入图片描述

  • K-means++算法可以解决K-means对初始质心比较敏感的问题,算法的区别主要在于选择的初始k个质心的之间的相互距离要尽可能的远。

  • K-means++算法的流程是:

(1)从数据集中随机选择一个样本作为第一个质心;

(2)对数据集中的每个样本,计算它到所有已有质心的距离的总和D(x);

(3)采用线性概率选择出下一个聚类中心点,即D(x)较大的点成为新增质心的概率较大;

(4)重复步骤2直到找到k个聚类中心点

(5)使用得到的k个质心作为初始化质心运行K-means算法。

  • K-means++算法的缺点:

(1)有可能选中离群点作为质心;

(2)计算距离质心最远的点的开销比较大;

(3)由于质心的选择过程中的内在有序性(第k个质心的选择依赖前k-1个质心的值),在扩展方面存在着性能问题。

4.3 二分K-means

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 每一步都最大限度减小了误差

  • 为了克服K-means算法容易收敛于局部极小值的问题,可以使用bisecting K-means算法弱化随机初始质心的影响。该算法首先将所有的样本作为一个簇,然后根据某种规则将该簇一分为二;之后选择其中一个簇继续划分,直到达到停止条件(聚簇数量、迭代次数、最小SSE等)。

  • 选择划分聚簇的规则一般有两种:

(1)选择样本量最大的簇进行划分;

(2)选择SSE值最大的簇进行划分。

    伪代码如下:

        将所有样本作为一个簇

        当簇数目小于k时

                对于每一个簇

                        计算总误差SSE

                        将给定的簇划分,对其进行k=2的K-means聚类

                        计算将该簇一分为二后的总误差

               选择使总误差最小的那个簇进行划分操作

4.4 Kernel K-means

  • 核函数K-means,数据集升维,使其线性平面可分
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 高斯核函数
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.5 K-medoids(k-中心聚类算法)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 曼哈顿距离
    在这里插入图片描述
  • 步骤:
    (1)选点:总体n个样本点中任意选取k个点作为medoids
    (2)聚类:按与medoids最近的原则,将剩余n-k个点分配到当前最佳的medoids代表的类中
    (3)遍历:对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,代价函数的值,遍历所有的可能,选取代价函数最小时对应的点作为新的medoids
    (4)迭代:重复2-3过程,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数
    (5)完成:产出最终确定的K个类
    在这里插入图片描述

在这里插入图片描述

4.6 ISODATA

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.7 Mini Batch K-means(适合大数据的聚类算法)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.8 总结

在这里插入图片描述

五、DBSCAN聚类算法

5.1 DBSCAN聚类方法简介

在这里插入图片描述

  • 参数1 —— 半径
    • 半径(EPS):表示以给定点P为中心的圆形领域的范围
  • 参数2 —— 点的数量
    • 以点P为中心的领域内最少点的数量(Minipts)
  • 如果满足:以点P为中心,半径为EPS的领域内的点的个数不少于MiniPts,则称点P为核心点
  • 抗噪性好
  • 对于聚类形状捕捉敏锐

5.2 步骤

在这里插入图片描述
(1)将所有点标记为核心点,边界点或噪声点
(2)删除噪声点
(3)以距离在EPS之内的所有核心点之间赋予一条边
(4)每组连通的核心点形成一个簇
(5)将每个边界点都指派到一个与之关联的核心点的簇中

5.3 优缺点

在这里插入图片描述

5.3.1 优点

  • 聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类
  • 与K-means比较,不需要输入要划分的聚类个数
  • 可以在需要时输入过滤噪声的参数,且聚类簇形状较稳定可靠

5.3.2 缺点

  • 数据量增大时,需求较大的内存支持且I/O消耗也很大
  • 当聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,此时参数MiniPts和EPS选取困难
  • 算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”

六、层次聚类

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

七、Mean shift聚类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

八、 AP聚类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

九、SOM聚类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

十、谱聚类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

十一、总结

在这里插入图片描述

本文参考:黑马程序员聚类算法视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值