1.1聚类任务
在无监督学习(unsupervised learing)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。“聚类”是此类学习任务中研究最多,应用最广的。
“簇”:聚类将数据集中的样本划分为若干个不相交的子集,每个子集即为簇
聚类过程仅能自动形成簇结构,簇所对应的概念语义需要使用者自己把握命名
聚类 既能 作为一个单独的过程,用于寻找数据内在的分布结构;
也能 作为分类等其他学习任务的前驱过程。
1.2性能度量--“有效性指标”
什么样聚类结果的比较好
同一簇单样本尽可能彼此相似,不同簇的样本尽可能不同。
换言之,簇内相似度高;簇间相似度低。
聚类性能度量
外部指标:将聚类结果与某个参考模型比较
内部指标:直接考察聚类结构而不利用任何参考模型
基于(9.1)~(9.4)可以导出下面这些常用的聚类性能度量外部指标
基于(9.8)~(9.11)可以导出下面常用的聚类性能度量内部指标
1.3距离计算
函数dist(. , .),作为距离度量需要满足的基本性质
直递性通常被直接称作“三角不等式”
通常将属性划分为 连续属性-----在定义域上有无穷多个可能的取值
离散属性-----在定义域上是有限个取值
1.4原型聚类
“原型” 是 指样本空间中具有代表性的点
通常情况下,算法先对原型进行初始化,然后对原型进行迭代更新求解。采用不同的原型表示、不同的求解方式,将产生不同的算法。
1.4.1 K均值聚类(K-Means Clustering)
原理:通过迭代的方法,将数据集划分为K个簇,每个簇由一个质心(中心点)表示。
步骤:
1.随机选择K个初始质心。
2.将每个样本分配到最近的质心所属的簇。
3.重新计算每个簇的质心。
4.重复步骤2和3,直到质心不再变化或达到最大迭代次数。
优点:简单高效,适用于大规模数据集。
缺点:需要预先指定K值,对初始质心敏感,适用于球形簇。
1.4.2 层次聚类(Hierarchical Clustering)
层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构,数据集的划分可以采用“自底向上”的聚合策略,也可采用“自顶向下”的拆分策略。
1.4.2.1凝聚(Agglomerative)
层次凝聚的代表是AGNES(Agglomerative Nesting)算法。
AGNES算法最初将每个数据样本作为一个簇,然后这些簇根据某些准则被一步步地合并。
这是一种单链接方法,其每个簇可以被簇中所有数据样本代表,两个簇间的相似度由这两个不同簇的距离确定(相似度可以定义为距离的倒数)。
算法描述:
输入:数据样本集D,终止条件为簇数目k
输出:达到终止条件规定的k个簇
步骤
1.将每个数据样本当成一个初始簇;
2.根据两个簇中距离最近的数据样本找到距离最近的两个簇;
3.合并两个簇,生成新簇的集合;
4.循环step2到step4直到达到定义簇的数目。
1.4.2.2 分裂(Divisive)
层次分裂的代表是DIANA(Divisive Analysis)算法。
DIANA算法采用一种自顶向下的策略,在DIANA方法处理过程中,所有样本初始数据都放在一个簇中。根据一些原则(如簇中最临近数据样本的最大欧式距离),将该簇分裂。簇的分裂过程反复进行,直到最终每个新的簇只包含一个数据样本。
算法描述:
输入:数据样本集D,终止条件为簇数目k
输出:达到终止条件规定的k个簇
步骤:
1.将所有数据样本整体当成一个初始簇;
2.在所有簇中挑出具有最大直径的簇;
3.找出所挑簇里与其它数据样本平均相异度最大的一个数据样本放入splinter group,剩余的放入 old party中;
4.在old party里找出到splinter group中数据样本的最近距离不大于到old party 中数据样本的最近 距离的数据样本,并将该数据样本加入splinter group;
5.循环step2到step4直到没有新的old party数据样本分配给splinter group;
splinter group和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合。
优点:不需要预先指定簇数,能生成聚类树。
缺点:计算复杂度较高,适用于小规模数据集。
1.4.2.3基于层次聚类算法的Python实现
AgglomerativeClustering()是scikit-learn提供的层次聚类算法模型,常用形式为:
AgglomerativeClustering(n_clusters=2,affinity='euclidean',memory=None, compute_full_tree='auto', linkage='ward')
参数说明:
1.n_clusters:int,指定聚类簇的数量。
2.affinity:一个字符串或者可调用对象,用于计算距离。可
以为:’euclidean’、’mantattan’、’cosine’、’precomputed’,如果linkage=’ward’,则affinity
必 须为’euclidean’。
3.memory:用于缓存输出的结果,默认为None(不缓存)。
4.compute_full_tree:通常当训练到n_clusters后,训练过程就会停止。但是如果 compute_full_tree=True,则会继续训练从而生成一颗完整的树。
5.linkage:一个字符串,用于指定链接算法。若取值’ward’:单链接single-linkage,采用 distmin;若取值’complete’:全链接complete-linkage算法,采用distmax;若取值’average’:均连 接average-linkage算法,采用distaverage。
1.4.3 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
密度聚类(Density-Based Clustering)是一种基于密度的聚类方法,主要用于识别数据集中密度较高的区域作为簇,并能处理噪声和发现任意形状的簇。最常见的密度聚类算法是DBSCAN。
原理:基于密度的聚类方法,通过寻找高密度区域形成簇。
步骤:
1. 对于每个点,找到其在给定半径(ε)内的邻居点数。
2.如果邻居点数大于或等于最小样本数(MinPts),则该点为核心点,构成一个簇。
3.递归地将核心点的邻居点加入簇中,直到没有新的点可以加入。
优点:能识别任意形状的簇,能处理噪声数据。
缺点:参数ε和MinPts的选择较为敏感。
1.4.4 高斯混合模型(Gaussian Mixture Model, GMM)
原理:假设数据集由多个高斯分布的混合组成,通过期望最大化算法(EM算法)来估计每个高斯 分布的参数。
步骤:
1.初始化每个高斯分布的参数。
2.计算每个样本属于每个高斯分布的概率。
3.更新每个高斯分布的参数。
4.重复步骤2和3,直到参数收敛。
优点:能处理具有不同形状和大小的簇。
缺点:计算复杂度较高,容易陷入局部最优解。
高斯混合模型(Gaussian Mixture Model, GMM)是一种概率模型,假设数据集由多个高斯分布组成。GMM 是一种软聚类方法,即每个样本属于每个簇的概率不同,而不是硬聚类中样本只属于一个簇。