聚类算法总结介绍

聚类算法

“物以类聚,人以群分”,所谓的聚类,就是将样本划分为由类似的对象组成的多个类的过程。对于数据集的类别未知。

算法名称是否需要给定K值聚类依据使用范围
K-means距离
K-means++距离
系统(层次)聚类距离
DBSCAN算法密度散点图明显具有DBSCAN特征时使用

K-means(K均值)聚类算法

算法描述:

  1. 给定类的个数K值。
  2. 选定K个初始数据中心。
  3. 其余点求对数据中心的距离,每个点与哪个数据中心最近,就和哪个数据中心分为一类。
  4. 将数据中心更新为类的重心。
  5. 重复3、4的操作,每一次重复算一次迭代。

优点:

  1. 算法简单、快速。
  2. 对处理大数据集,该算法是相对高效率的。

缺点:

  1. 需要给定生成簇的数目K。
  2. 对初值敏感。
  3. 对于孤立点数据敏感。

注意:

  • 缺点的第2、3项可以使用K-means++算法解决。

  • 可以将算法步骤转化为流程图,层次清晰,是加分项,还能够减少论文查重率。

  • 亿图、PPT、Visio都可以画流程图。

K-means++算法

对K-means算法 选取初始数据中心 作了新的算法规定,使得初始数据中心之间距离保持最远,其余步骤和K-means算法相同。

  • 解决了K-means算法第2、3项缺点。

选取初始数据中心算法描述

  1. 随机选取一个样本作为第一个聚类中心;

  2. 计算其他样本点与当前已有聚类中心的最短距离(即为与最近的聚类中心之间的距离),根据距离大小给样本点赋概率(距离越长,成为聚类中心的概率越大),用轮盘法(依据概率大小来进行抽选)选

    出下一个聚类中心;

  3. 重复步骤二,直到选出K个聚类中心。

SPSS操作

  • SPSS默认使用的是K均值++算法


注:

  • 消除量纲:标准化处理。
    在这里插入图片描述
    ​ 使用SPSS标准化得到的就是如上公式所描述的 z型 标准化变量。

系统(层次)聚类

聚类前不需要给定K值,由聚类后的谱系图自行判断所需分成的类数。

算法流程

  1. 将每一个对象看成一个类,计算两两之间的最小距离;
  2. 将距离最小的两个类合并成一个类;
  3. 计算新类与各个类之间的距离;
  4. 重复2、3步,直到所有类均合成到一个类中;
  5. 结束。

SPSS操作

  • 统计:一般不用管。
  • 图:谱系图即为分类的流程图,需要勾选。
  • 方法:聚类方法——类与类之间距离的定义方法;转化值——标准化(Z得分即为Z标准化方法)
  • 保存:如果确定了K值,可以填入“聚类数”中(一般K≤5,方便解释)。

肘部法则——用图形估计聚类的数量

肘部法则(Elbow Method): 通过图形大致的估计出最优的聚类数量。

在这里插入图片描述

使用步骤
  1. 将SPSS中各阶段的系数复制到Excel中,按照降序排序(双击SPSS中生成的表格,就可以进行复制)。
  2. 插入 —> 推荐的图表 —> 散点图。
  3. 一般选择转折处的K值作为最终的分类数,当然还要兼顾方便对分类进行解释。
    在这里插入图片描述
    在这里插入图片描述

确定K值后保存聚类结果并画图

可以使用SPSS对聚类结果图形化,但是变量只能是2个或3个。
在这里插入图片描述

可以直接双击生成的图表,对其中参数进行修改,从而起到对图标美化的效果。

DBSCAN算法

DBSCAN算法是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,生成的簇的个数不定(和数据有关)。

简言之,就是随便选取基准点,再根据要求(半径 Eps 、类中最少点数 MinPts )将周围点,以及周围点的周围点一个一个圈起来,形成最后分组的过程。

数据点分类

数据点特点是否属于某个类
核心点在半径 Eps 内含有不少于 MinPts 数目的点
边界点在半径 Eps 内点的数量小于 MinPts,但是落在核心点的邻域内
噪音点既不是核心点也不是边界点的点

代码实现

可以下载Matlab官网推荐的代码使用。

优点

  1. 基于密度定义,不需要聚类个数K值;

  2. 可以发现异常点(噪音点);

缺点

  1. 对输入参数ε(半径 Eps )和 Minpts 敏感,确定参数困难;

  2. 由于DBSCAN算法中,变量 ε 和 Minpts 是全局唯一的,当聚类的密度不均匀时,聚类距离相差很大时,聚类质量差;

  3. 当数据量大时,计算密度单元的计算复杂度大。

图形化预测结果展示

在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
聚类算法是一种常用的无监督学习方法,可以将数据集分成若干个组,每个组内的数据具有相似性。下面是一些常用的聚类算法及对应实例代码。 1. K-Means算法 K-Means算法是一种基于距离的聚类算法,其核心思想是将数据集分成K个簇,使得每个数据点都属于离其最近的簇。K-Means算法的步骤如下: 1. 随机选择K个质心(簇中心)。 2. 将每个数据点分配到距离其最近的质心所在的簇中。 3. 重新计算每个簇的质心。 4. 重复步骤2和3,直到簇中心不再改变或达到最大迭代次数。 下面是K-Means算法的Python实现代码: ```python from sklearn.cluster import KMeans # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 创建K-Means模型 kmeans = KMeans(n_clusters=2) # 训练模型 kmeans.fit(X) # 预测结果 y_pred = kmeans.predict(X) # 输出聚类结果 print(y_pred) ``` 2. 层次聚类算法 层次聚类算法是一种划分聚类算法,其核心思想是从单个数据点开始,将最相似的点组合成一个簇,逐步合并成更大的簇,直到所有数据点都被合并到同一个簇中。层次聚类算法有两种方式:自下而上的聚合和自上而下的分裂。下面是自下而上的聚合层次聚类算法的Python实现代码: ```python from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 计算距离矩阵 Z = linkage(X, 'ward') # 绘制树状图 plt.figure(figsize=(10, 5)) dendrogram(Z) plt.show() ``` 3. DBSCAN算法 DBSCAN算法是一种基于密度的聚类算法,其核心思想是将密度相连的数据点划分为同一个簇。DBSCAN算法的步骤如下: 1. 选择一个未访问的数据点。 2. 如果该点周围的密度达到预设的阈值,则将其作为一个新的簇的中心点,并将其密度可达的所有点加入该簇。 3. 重复步骤2,直到所有数据点都被访问。 下面是DBSCAN算法的Python实现代码: ```python from sklearn.cluster import DBSCAN # 创建数据集 X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]] # 创建DBSCAN模型 dbscan = DBSCAN(eps=1, min_samples=2) # 训练模型 dbscan.fit(X) # 预测结果 y_pred = dbscan.labels_ # 输出聚类结果 print(y_pred) ``` 以上就是几种常用的聚类算法及对应实例代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uncle Tan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值