聚类算法(二)—— 优缺点对比

聚类算法(一)——DBSCAN

聚类算法(二)—— 优缺点对比

聚类算法(三)—— 评测方法1

聚类算法(三)—— 评测方法2

聚类算法(三)—— 评测方法3(代码)

聚类算法(四)—— 基于词语相似度的聚类算法(含代码)

聚类算法(五)——层次聚类 linkage (含代码)

聚类算法(六)——谱聚类 (含代码)

 聚类算法(七)—— Kmeans

 

各种聚类算法优缺点:

总结下:

Kmeans

优点:

  • 简单快速
  • 可处理大数据集,高效可伸缩,复杂度O(nkt),经常以局部最优结束
  • 尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,而簇与簇之间区别明显时,它的聚类效果很好

缺点:

对 K 值敏感

  • 对离群点和噪声点敏感
  • 初始聚类中心的选择
  • 只能聚凸的数据集, 即聚类的形状一般只能是球状的,不能推广到任意的形状

 

DBSCAN

优点

  • 自适应的聚类,不需要提前设定K值大小
  • 对噪声不敏感。
  • 能发现任意形状的簇。
  • 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响

缺点

  • 对两个参数的设置敏感,即圈的半径 eps 、阈值 MinPts
  • 数据密度不均匀时,很难使用该算法
  • 数据样本集越大,收敛时间越长。此时可以使用 KD 树优化

凝聚式层次聚类

优点

  • 距离和规则的相似度容易定义,限制少
  • 需要预先制定聚类数
  • 可以发现类的层次关系

缺点

  • 计算复杂度太高;
  • 奇异值也能产生很大影响;
  • 算法很可能聚类成链状

谱聚类

优点

  • 当聚类的类别个数较小的时候,谱聚类的效果会很好,但是当聚类的类别个数较大的时候,则不建议使用谱聚类;
  • 谱聚类算法使用了降维的技术,所以更加适用于高维数据的聚类;
  • 谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法(比如K-Means)很难做到
  • 谱聚类算法建立在谱图理论基础上,与传统的聚类算法相比,它具有能在任意形状的样本空间上聚类且收敛于全局最优解

 缺点

  • 谱聚类对相似度图的改变和聚类参数的选择非常的敏感;
  • 谱聚类适用于均衡分类问题,即各簇之间点的个数相差不大,对于簇之间点个数相差悬殊的聚类问题,谱聚类则不适用;

 

参考链接:

聚类算法总结 - 优缺点对比 

谱聚类(Spectral Clustering)算法介绍

 

文本聚类相关链接, 后续整理:

https://www.csdn.net/gather_23/MtTaggysMzU2Mi1ibG9n.html

https://blog.csdn.net/lovoslbdy/article/details/104927365

https://blog.csdn.net/xiaoquantouer/article/details/53521581

https://blog.csdn.net/weixin_47143210/article/details/106219013

常见的六大聚类算法  包含均值漂移、高斯、 图团体检测等聚类方法

各种聚类算法(原理+代码+对比分析)最全总结  包含 DBSCAN KMeans AHC 算法代码

 

 

----------------------

附上一篇层次聚类的介绍文章  http://blog.sciencenet.cn/blog-1271266-858703.html

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。 下面是一个使用Python实现Kmeans聚类算法的示例: ``` python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(100, 2) # 初始化K个簇中心 K = 3 centers = X[np.random.choice(len(X), K, replace=False)] # 迭代聚类 for i in range(10): # 计算每个数据点最近的簇中心 distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2) labels = np.argmin(distances, axis=1) # 更新簇中心 for k in range(K): centers[k] = np.mean(X[labels == k], axis=0) # 可视化聚类结果 colors = ['r', 'g', 'b'] for k in range(K): plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k]) plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505') plt.show() ``` 在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。 Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

微知girl

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

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

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

打赏作者

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

抵扣说明:

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

余额充值