《R语言数据挖掘》读书笔记:五、聚类分析

第五章、聚类分析

0. 聚类算法的系统性介绍

    聚类被定义为一个数据集的无监督分类。聚类算法的目的是使用距离或者概率度量对给定数据集(点集或者对象的集合)划分成数据实例或者对象(点)的组。根据距离或相似性或其他度量,同一个组中的成员比较接近。换言之,就是最大化类内(内部同质性)的相似性并最小化类间(外部异质性)的相似性。

    使用聚类算法一方面是为了数据的进一步分析,另一方面是为了理解数据集的性质。

    聚类过程的关键步骤:

    ①特征选择:从原始数据集中选择重要的特征

    ②聚类算法设计:基于当前可用的聚类算法设计一个适当的算法,或者可以从头开始建立一个算法。

    ③聚类验证:该步骤评估聚类,并提供关于聚类结果的置信度。

    ④结果解释:给出输入数据集的内在思想,或者根据数据集有什么获取到的潜在知识。

    主要的聚类方法基于划分的方法基于密度的方法层次方法谱方法基于网格的方法等。对于特定的数据集或者条件,每个聚类算法都有其局限性与最佳实践,另一个困难或者目标是任意形状的类、大容量的数据集、高维数据集、对噪声的不敏感性、对用户定义的参数的低度依赖、在初始学习或者聚类后没有学习处理新数据的能力、对类的数目的内在或者本质的敏感性、漂亮的数据可视化,以及同时适用于数值数据的名义数据类型。

1. k均值算法和搜索引擎

    1.0 基于划分的聚类算法

        基于划分的聚类算法一般过程是迭代,第一步定义或者选择一个预定的类的代表数,每一次迭代后,如果聚类质量有所改善,那么就更新类的代表。在聚类算法中,具体类的质量可以通过很多度量方式来衡量的。

        基于划分的聚类算法的特点:(1)在大多数情况下得到的类是互斥的(2)类的形状是球形的,因为采用的大多数度量是基于距离的度量(3)每类的代表通常是所对应的组(类)中的点的均值或者中心点(medoid) (4)一个分区代表一个类(5)这些类适用于小型到中型的数据集(6)在某个收敛目标函数下,该算法将收敛,所得到的类经常是局部最优的。

    1.1 k均值聚类算法(基于平方误差的聚类算法

        k均值聚类算法从根本上说是一个贪婪算法,也是一个互斥聚类算法,它用每个类的均值定义其重心。对于处理大型数据集它是有效的。它以一种互斥的方式对数据集进行分类,一个对象至多只能属于一个组或者一个类。它还是一种划分聚类算法,类是在一个步骤中创建的,而不是多几个步骤创建的。

        k均值算法执行尽可能多的迭代,直到与前一次聚类得到的类相比没有任何变化。

        k均值算法详解以及小例子: https://www.cnblogs.com/yue-guan/p/1072kmeans.html

                                                   https://www.jianshu.com/p/c4651e198b1e

        事实上,k均值算法可以根据重心不同的初始集合运行多次,以便找到相对较好的结果。

        k均值算法的缺点:(1) 类的均值只能用一个函数来表示 (2) 仅适用于数值数据类型(3) k的值需要用户预先定义,而这是很难的。

    1.2 核k均值聚类算法

        核函数通常与SVM经常结合在一起进行使用。总的来说,核函数,就是将输入空间,映射到高维的特征空间。然后再在高维的数据同看进行数据处理。这种映射的话,是非线性变换的,这也才能能够将输入空间映射出不同特征的高维空间。

        算法详细解析:https://www.cnblogs.com/subaiBlog/p/6271315.html

                                     https://blog.csdn.net/zhangping1987/article/details/31366143

    1.3 k模式聚类算法

        该算法是k均值算法的变体,它可以处理分类数据类型和大型数据集,它可以与k均值方法结合来处理包含所有数据类型的数据集的聚类。

    1.4 搜索引擎和网页聚类

        网络搜索引擎可能会用到k均值算法来用于网页聚类,算法表现出高效率。

2. k中心节点算法和自动提取文档文本

    k中心算法是k均值算法的扩展,以降低对异常数据点的敏感性。

    2.1 PAM算法(Partitioning Around Medoids ,PAM)

        围绕中心点的划分算法是一种基于划分的聚类算法。

        算法思想:

        一个聚类与k个中心点的集合相关,可以通过每个类中的成员与相应的代表或者中心点之间的距离来衡量聚类的质量。

        从对象的原始数据集中任意选择k个对象是找到k个中心点的第一步。在每一步中,对于一个选定的对象Oi和一个未选择的节点Oh,如果因为交换它们,类的质量得到提升,那么执行交换。在交换之前和交换之后,类的质量应该是成员与中心点之间的所有距离差的和。

        PAM算法详细解析: https://www.cnblogs.com/king-lps/p/7775108.html

                                         https://www.cnblogs.com/wenhoujx/p/3147563.html

    2.2 自动提取和总结文档文本

        提取或者总结已经普遍定义为具有两个步骤的过程。首先,从源文本中提取重要概念来获取一个中间表示。然后,从中间表示生成总结。

        对于总结的第一步,它可以很大程度上视为自动索引的一部分。从文档中提取重要概念的词汇链是一种可能的解决方案。词汇链利用任意数量的相关词汇之间的凝聚力,并且通过将语义相关的词汇集进行分组(链接)来计算他们。

3. CLARA算法及实现

    3.1 CLARA算法(Clustering LARge Application,大型应用中的聚类算法)

        算法思想:不考虑整个数据集合,而是选择实际数据的一小部分作为数据的代表。然后用PAM方法从样本中选择中心点。如果样本是以非常随机的方式选取的,那么它应当接近代表原来的数据集。从中选出代表对象(中心点)很可能和从整个数据集合中选出的代表对象相似(这里可以使用分块来计算,减少了计算量)。CLARA抽取数据集合的多个样本,对每个样本应用PAM算法,并返回最好的聚类结果作为输出。

       CLARA的有效性主要取决于样本的大小。如果任何一个最佳抽样中心点不在最佳的K个中心之中,则CLARA将永远不能找到数据集合的最佳聚类。同时这也是为了聚类效率做付出的代价(提高了效率)。是有效处理大样本聚类问题的方法利器。

       CLARA算法详细解析: https://blog.csdn.net/u013834836/article/details/41214709

    3.2 R语言实现(略)

4. CLARANS算法及实现

    4.1 CLARANS算法(A Clustering Algorithm based on Randomized Search,基于随机选择的聚类算法)

        此算法是空间挖掘的最佳实践,将采样技术(CLARA)和PAM结合起来,CLARANS在任何时候都不把自身局限于任何样本,CLARANS在搜素的每一步都以某种随机性选取样本。

        CLARANS算法详细解析: https://blog.csdn.net/assiduousknight/article/details/16831941

    4.2 R语言实现(略)

5. 仿射传播聚类和无监督的图像分类

    仿射传播(Affinity Propagation,AP)寻找数据集中的一组样本点Xe={xe1,...,xek},并将未选择的点分配给这些样本点,一个样本点代表一个类。

    5.1 仿射传播聚类

        AP聚类思想:AP算法的基本思想是将全部样本看作网络的节点,然后通过网络中各条边的消息传递计算出各样本的聚类中心。聚类过程中,共有两种消息在各节点间传递,分别是吸引度( responsibility)归属度(availability) 。AP算法通过迭代过程不断更新每一个点的吸引度和归属度值,直到产生m个高质量的Exemplar(类似于质心),同时将其余的数据点分配到相应的聚类中。

        

        算法详细解析: 

        AP近邻传播聚类算法总结:https://blog.csdn.net/manjhOK/article/details/78734025

        AP近邻传播聚类算法(Affinity Propagation):https://blog.csdn.net/captainstudio/article/details/50770316

        AP聚类: https://blog.csdn.net/zhouboke/article/details/80626962

    5.2 无监督图像分类

        无监督图像分类是一种聚类问题。图像聚类是识别一组相似的图像原语,比如像素、线(元)素和区域等。给定复杂的数据集,推荐的方法是使用基于原型的聚类算法。仿射传播可以通过寻找具有代表性的范例的一个子集来应用于无监督分类。

    5.3 谱聚类算法(很流行但是很麻烦,原理好像不难)

        谱聚类在最近几年变得受欢迎起来,主要原因就是它实现简单,聚类效果经常优于传统的聚类算法(如K-Means算法)

        对于谱聚类来说最重要的工具就是拉普拉斯矩阵

        谱聚类算法的详细解析:

        一个同学的学习笔记: https://blog.csdn.net/qq_24519677/article/details/82291867

        刘建平的谱聚类算法原理总结: https://www.cnblogs.com/pinard/p/6221564.html

        谱聚类算法入门教程: https://blog.csdn.net/qiuxy23/article/details/82872935#fnref1

6. 新闻分类和层次聚类

     层次聚类将目标数据即划分为多个层次的类。它通过连续分割来划分数据点。

      对于层次聚类有两种策略:

          ①凝聚聚类:将输入数据集中的每个数据对象作为一个类,然后在接下来的步骤中,根据某种相似性度量来合并类,直到最后只剩下一个类。

          ②分裂聚类:将数据集中的所有数据对象作为一个类中的成员,然后再接下来的步骤中,根据某种相似性的度量来拆分类,直到最后每个数据对象都成为一个类。

    6.1 凝聚层次聚类

         层次聚类就是一层一层的进行聚类,可以由上向下把大的类别(cluster)分割,叫作分裂法;也可以由下向上对小的类别进行聚合,叫作凝聚法;但是一般用的比较多的是由下向上的凝聚方法。

        凝聚法指的是初始时将每个样本点当做一个类簇,所以原始类簇的大小等于样本点的个数,然后依据某种准则合并这些初始的类簇,直到达到某种条件或者达到设定的分类数目。

        凝聚法详细解析: https://blog.csdn.net/u012500237/article/details/65437525

    6.2 BIRCH算法

        利用层次结构的平衡迭代简约和聚类算法(Balanced Iterative Reducing and using Hierarchies,BIRCH):用于大型动态数据集,也可用于增量和动态聚类。只需要扫描秒一次数据集,这意味着不需要提前读取整个数据集。

        聚类特征树(CF-Tree):是一个辅助数据结构,用来存储各类的摘要,并且它还是一个类的代表。

        BIRCH中的主要辅助算法就是聚类特征树插入(CF-Tree insertion)聚类特征树重建(CF-Tree rebuilding)

        刘建平的BIRCH算法详细解析https://www.cnblogs.com/pinard/p/6179132.html

    6.3 变色龙算法

        变色龙算法的三个主要步骤:

            稀疏化:该步骤用来生成一个k最近邻图,它由一个接近图派生出来。

            图划分:该步骤应用一个多层次划分算法来划分数据集。初始图是一个包含所有点的图或者类。然后在每个连续步骤中评分最大的图,最后得到一组大小大致相同的类(具有高度内部相似性),得到的每一个类的大小不能小于预定义的大小。

            凝聚层次聚类:最后一步就是基于自相似性来合并类。自相似性用RI(相对互联度)RC(相对近似度)定义,他们可以以各种方式进行组合来测量自相似性。

        变色龙算法详解https://blog.csdn.net/u014593570/article/details/77732292

    6.4 贝叶斯层次聚类算法

        将贝叶斯理论用于聚类算法上,算法详细解析

        百度百科: https://baike.baidu.com/item/%E8%B4%9D%E5%8F%B6%E6%96%AF%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95/10839486?fr=aladdin

    6.5 概率层次聚类算法

        概率层次聚类算法是层次聚类算法和概率聚类算法的一种混合算法。作为一种概率聚类算法,他应用了一种完全概率方法。

        

    6.6 新闻分类

        新闻门户网站为访问者提供了许多的以预定义主题的新闻。随着我们从因特网上获得的信息呈指数式增长,聚类技术广泛应用于网络文档分类,其中包括在线新闻。这些通常是新闻流或者新闻提要。

        对于该任务,聚类算法的一个优点是不需要先验的领域知识,通过对涵盖特定事件的新闻进行聚类,可以对新闻进行概括,无监督聚类在发现现有文本集的内在局部结构起着关键作用,而新的类别将根据预先定义的类集合对文档进行分类。

7.一些值得学习的博文:

理论:T级数据量下的划分聚类方法CLARANS+:https://www.jianshu.com/p/23c498b26836

            对聚类算法的综合性概述:   https://blog.csdn.net/zhoubl668/article/details/6639801

                一个PPT总结: https://wenku.baidu.com/view/c3f0629f85254b35eefdc8d376eeaeaad0f3161d.html

 

下一章将涵盖更高级别的主题,关于聚类算法、基于密度的算法、基于网格的算法、EM算法、高维算法以及基于约束的聚类算法等高级主题。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
层次聚类分析是一种常见的聚类算法,通过计算不同数据样本之间的相似度,将数据样本逐步合并成不同的聚类簇。在商圈分析中,我们可以使用层次聚类分析算法对基站定位数据进行聚类,以识别不同的商圈。 具体步骤如下: 1. 数据准备:收集基站定位数据,并将其转换为可计算距离的经纬度坐标。 2. 计算距离矩阵:使用距离公式计算不同基站之间的距离,得到一个距离矩阵。 3. 层次聚类分析:使用聚类算法对距离矩阵进行聚类分析,得到不同的商圈簇。 4. 结果展示:将聚类结果可视化,以便于分析和理解。 在Python中,可以使用scipy库中的层次聚类分析函数进行商圈分析。示例代码如下: ```python import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt # 读取基站定位数据 data = np.loadtxt('stations.csv', delimiter=',') # 计算距离矩阵 dist_mat = np.zeros((len(data), len(data))) for i in range(len(data)): for j in range(len(data)): dist_mat[i][j] = np.sqrt((data[i][0]-data[j][0])**2 + (data[i][1]-data[j][1])**2) # 层次聚类分析 Z = linkage(dist_mat, 'ward') # 可视化结果 fig = plt.figure(figsize=(25, 10)) dn = dendrogram(Z) plt.show() ``` 在上述代码中,我们首先读取了基站定位数据,并计算了距离矩阵。然后,使用scipy库中的linkage函数进行层次聚类分析,并使用dendrogram函数将聚类结果可视化。在可视化结果中,每个聚类簇都用不同的颜色表示,以便于分辨不同的商圈。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值