工作需要,涉及到一些聚类算法相关的知识。工作中需要综合考虑数据量、算法效果、性能之间的平衡,所以开启新的篇章——机器学习聚类算法篇。
传统机器学习中聚类算法主要分为以下几类:
层次聚类算法是一种无监督学习算法,按照样本 or 簇之间的相似性对数据进行递归式划分,将数据样本从独立的点 逐步合并 成类簇,最终生成一颗树形结构。主要分为自上而下、自下而上 和以BIRCH算法为代表的分层、平衡迭代 三种方法。
算法初始化将每个样本都作为单独的簇,然后将相邻的簇、自下而上逐渐合并成更大的簇,直到生成需要的簇数。
该类算法需要计算两个簇之间距离的度量,通常使用欧式距离,或者根据业务或数据类型自定义度量方法。
算法自上而下递归地对样本整体进行聚类,将所有样本归于一个簇,然后依次对簇进行分裂,直到每个簇只包含一个样本。
一种用于大规模数据聚类的层次聚类算法。该算法利用了B树结构来进行聚类,并使用了CF树(Clustering Feature Tree)来存储聚类中心信息。
补充:1.1和1.2两种算法都涉及簇之间的相似度 / 距离的计算or度量,这是层次聚类算法设计的核心。在计算簇之间的距离度量时,可以使用最短距离、最长距离、簇平均距离、重心距离、Ward's方差最小化等,每种距离度量方法都有其适用的数据类型和应用场景;更细致,可以根据业务和数据特征,定制相似度 / 距离的计算方式。
划分聚类算法通过迭代聚类中心,达到(类内间距小、类间间距大)或者说 (簇内点足够近,簇间点足够远)的目标,最终算法将数据集划分为多个不相交的簇,每个数据点只属于一个簇。
常用的方法包括K-means、K-medoids、K-means++、二分K-means、C-means、
X-means、CLARANS和 CLARA等。
基于密度的聚类算法,是从密度的角度考虑样本之间的关系。该类算法通过计算数据样本分布的疏密情况,从密度的角度考虑样本之间的关系,并利用样本的密度和密度可达性来判断是否属于某个簇,最终将高密度区域的点划分到同一个簇。这种方式可以处理具有复杂形状的簇和有噪声数据。
常用的算法包括DBSCAN(Density-Based Spatial Clustering of Applications with Noise)、OPTICS(Ordering Points To Identify the Clustering Structure)、DENCLUE(DENsity-based CLUstEring)等。
最近博主有复现 + 应用到实际业务中的密度聚类算法是密度峰值聚类DPC —— science《Clustering by fast search and find of density peaks》,效果还不错
基于网格的聚类算法,利用多分辨率的网络结构将数据空间划分为一个个的网格单元,并将数据点映射到相应的单元中来进行聚类和类簇的划分。
该类算法简单、高效、适用于高维数据和大规模数据集。但是,缺点是参数敏感、无法处理不规则分布的数据、处理精度也不高
代表算法有STING 算法、CLIQUE算法(结合网格和密度的聚类算法)、WAVE-CLUSTER 算法(引入了小波变换);不同的算法主要区别是采用了不同的网格划分方法,核心步骤如下:
a. 将数据空间划分为多个互不重叠的网格
b. 对每个网格内的数据进行统计,找到高密度网格单元;
c. 将相连的高密度网格单元进行合并,合并为一个簇
d. 将低密度网格单元划分给距离最近的高密度网格单元,并认定为一个粗
该类算法主要包括基于概率的模型聚类和基于神经网络的模型聚类。这类算法利用统计模型来描述数据的分布,并根据模型判断数据点是否属于同一个簇(是否具有相同 / 相似的分布)。
为每个未知的簇假设一个模型,然后寻找数据和模型的最佳拟合,最后根据模型判断出的不同簇的分布结果,进行聚类。例如:基于概率的模型聚类算法采用概率生成的方法,假定在同一个簇中的数据有相同的概率分布。最常用的是高斯混合模型(Gaussian Mixture Models, GMM)。
主要利用神经网络的特点和能力进行数据聚类,通常将结果映射为数据所属类簇的概率问题。常见的模型有自组织映射(Self-Organizing Maps,SOM)、总体相似度神经网络(Growing Neural Gas,GNG)、流形学习聚类(Manifold Learning-based Clustering)、深度聚类(Deep Clustering)。
基于神经网络的聚类算法具有灵活性和强大的建模能力,能够捕捉数据的复杂结构和非线性关系。然而,它们通常需要更多的数据量、更多的计算资源和训练时间,并且对参数设置和网络结构的选择较为敏感。相对的,该类算法处理效率一般不高;特别是数据量很少时,聚类效果较差