一种可分批此训练的聚类方法

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文介绍了如何将大数据集划分成若干子集,并对每个子集进行聚类分析。为了确保聚类结果的准确性,需要保证每个子集的数据分布相似。文章提出了一种称为“K-均值距离法”的聚类算法,能够有效地解决数据分布不均匀的问题。本篇文章主要介绍了如何将大数据集划分成若干子集,并对每个子集进行聚类分析。在进行子集划分时,需要保证每个子集的数据分布相似,以保证聚类结果的准确性。文章介绍了一种称为“K-均值距离法”的聚类算法,可以有效地解决数据分布不均匀的问题。

本文从聚类数据量大入手,先将将全量数据集随机分成若干个子数据集,然后对每一个子数据集进行聚类算法。

其中,每个子数据集可以同等规模(数据量相等),也可以规模不相等。但是每个子数据集的K值和聚类算法要保持一致,因为不同的K值会导致质心个数不一致最终没办法合并,而聚类算法如果不相同会导致每个子数据集的类簇之间没有可比性。

1. 系统框架

image.png

图1 加权质心聚类在线学习方法框架图

本文将传统聚类的全量数据聚类分解成若干个子数据集进行子聚类,每个子聚类的数据样本不重叠,数据总量等于全量数据,每个子数据集数据量可以相等也可以不相等。对于每个子聚类采用相同的聚类算法进行计算,为保证子聚类最终质心可以合并,因此要保证每个子聚类的K值相同

为了保证子聚类拥有相同K值,因此需要保证各个子集的数据分布是相似的,所以在整体数据采样生成子集数据集时采用随机采样的方式,具体做法可以使用Hive的rand()方法或python的StratifiedShuffleSplit()方法实现随机采样。因为数据集要分割成若干个数据子集,因此随机采样需要满足随机无放回采样,即每个样本只能出现在一个子集中。

通过以上采样方式可以得到若干个分布相似的子数据集,对每个子集进行聚类足以保证每个子集的K值相等

  当前已经保证了各个子集的分布是相似的,因此各子集的最优K值也是相同的,因此只要随机取其中一个子集获取最优K值即可应用于其它各个子集。

  为了实现算法自动计算并选取最优K值,相对于肘部法而言,我们采用更佳清晰

Gap Statistic方法。Gap Statistic的定义为:

image.png

式1 子聚类最优K值选取

这里的Dk即是手肘法计算距离的公式:

image.png

式2 手肘法距离计算

这里image.png指的是image.png的期望。这个数值通常通过蒙特卡洛模拟产生,我们在样本里所在的矩形区域中(高维的话就是立方体区域)按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本做K-Means,从而得到一个Dk。如此往复多次,通常20次,我们可以得到20个logDk。对这20个数值求平均值,就得到了E(logDk)的近似值。最终可以计算Gap Statisitc。而Gap statistic取得最大值所对应的K就是最佳的K。

Gap Statistic的基本思路是:引入参考的测值,这个参考值可以有Monte Carlo采样的方法获得。

image.png

式3 Gap Statistic公式

B是sampling的次数。为了修正MC带来的误差,我们计算sk也即标准差来矫正Gap Statistic。

image.png

式4 Gap Statistic修正公式

选择满足image.png的最小的k作为最优的聚类个数。下图阐释了Gap Statistic的过程。 

image.png

2 Gap Statistic流程说明

因为K值通常跟数据量相关,当数据量太少时数据反应的分布不代表真实分布,此时聚类质心加权合并时会产生较大波动性。具体来说,当各个子集数据极少时,即便通过前面的随机不重复采样的方式获得子集数据,由于各子集数据样本较少,其各子集分布差异较大,同时由于总样本数目确定的情况下,子集样本数量极少时,子集个数会极大,这样导致各个子集的聚类质心相似性较低,即波动性较大。这种波动性给子集质心合并计算引起波动和误差,因此需要在拆分子集数据时选取合适的子集个数来避免较大波动。通常我们采用下面的公式计算子集个数:

image.png

式5 确定最优子集个数

   N是全量样本个数,T是全量样本的计算时间复杂度,通常时间复杂度也可用N*N表示。n是计算机计算数据上限,t是计算机计算上限数据花费的时间记为时间上限,因此子数据集的样本个数image.png要小于计算机上限n,时间复杂度image.png要小于t。通常image.png是用户自定义的一个值,一般选取image.png=n即可;通常image.png使用image.png表示,一般选取image.png=t即可,其中X是子集计算时间控制因子,当X增大时表示可以承受子集计算花费更久的时间,这样M会减少,即子集个数会减少,因此每个子集的样本数会多一些;当X减少时表示期望子集计算花费更少的时间,这样M会增加,即子集个数会增加,因此每个子集的样本数会少一些。建议在进行子聚类之前可以根据计算资源实际情况确定子集个数,然后用最优K值进行子聚类,生成若干个子聚类的多组聚类质心。

 

2. 子聚类质心与全量数据聚类质心的转换

image.png

3 质心合并仿照层次聚类的思想进行

 

基于层次聚类的思想我们对全量数据进行了若干个子聚类,于是我们可以得到若干组聚类质心,每组质心包含K个质心,每个质心是符合原始数据维度的数据。于是将一系列的聚类质心当做层次聚类的样本进行反向合并。

由于子聚类分配的样本空间大小不一致,因此得到的聚类质心的可信度不一样,甚至由于子聚类样本量差异太大时,导致质心合并偏离真实情况。而传统基于距离测算的聚类方式不可避免的默认每个特征维度和每个样本的权重一样。因此,本文引入子聚类加权质心合并的计算方式来避免数据不平衡问题导致的合并结果不理想的问题

image.png

式6 子聚类质心加权合并公式

其中,I是全量数据切分的子数据集的个数,J是聚类质心序号,取值从1到K的自然数image.png是第i个子集的第j个质心,image.png是最终合并后第j类的质心,计算方式是j类在每个子聚类中的质心与j类在每个子聚类中的数据量的加权和与全量数据的比例。

各个子集聚类后的质心存在差异,分别反映各子集数据的聚类结果,当数据总量和子集个数M变化时,可能引起各个子集数据样本数量有差异,尤其是当面对两个已知的数据样本数量差异很大的子集聚类结果时,较大波动影响最终质心合并的准确性,因此需要使用式2进行合并,最终取得Q即为全量数据聚类执行:

image.png

式7 子聚类质心加权合并公式

其中,Q1到Qk分别是全量数据对应的K个类别的质心,当每个类别的质心确定时,即可计算每一个样本到各个类别质心的距离,将距离样本最近的质心对应的类别当做该样本的类别即可可得到聚类结果j,如式8计算。

image.png

式8 确定样本类别计算公式

3. 子聚类与加权质心构成在线学习方案

引入子聚类解决了数据量大的问题,引入加权质心解决了子聚类合并成原始聚类结果的桥梁。但同时因为子聚类间相互独立,因此可以并行运算加快了运算速度,而子聚类合并计算复杂度是n(IK)与K值和子聚类个数线性相关,因此进一步减少计算量加快运算速度。当加权质心引入之后可以实现任意新增子聚类或新增数据与某个版本的聚类模型进行快速融合而不再依赖原来的历史全量数据,即实现大规模数据下的聚类在线学习方案。

 

例如:在物流行业中,全网每日产生运单数据巨大,当我们想通过运单的重量,流向,拖寄物类别,收发信息,运费信息,客户信息等对运单聚类,实现价值挖掘时,由于数据量巨大想要快速实现聚类并且可以实时在线上更新模型,就需要通过本文对全网运单随机采样分成若干个子数据集,对每一个子数据集就可以进行快速聚类,最终合并子集聚类质心得到全量数据聚类结果,当线上新产生运单时可以把新产生的数据当做一个子集进行聚类,再次将新子集的聚类质心与原全量数据的质心进行融合,以实现快速聚类且聚类可以在线学习而不是传统方式下的全量数据进行运算。

 

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
4天前
|
机器学习/深度学习 JSON 算法
如何在自定义数据集上训练 YOLOv8 实例分割模型
在本文中,我们将介绍微调 YOLOv8-seg 预训练模型的过程,以提高其在特定目标类别上的准确性。Ikomia API简化了计算机视觉工作流的开发过程,允许轻松尝试不同的参数以达到最佳结果。
|
8月前
|
数据采集 机器学习/深度学习 数据挖掘
【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值
【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值
287 0
|
存储 机器学习/深度学习 算法
MMDetection3d对KITT数据集的训练与评估介绍
MMDetection3d对KITT数据集的训练与评估介绍
1429 0
MMDetection3d对KITT数据集的训练与评估介绍
|
4天前
|
机器学习/深度学习 算法 数据挖掘
实战Scikit-Learn:处理不平衡数据集的策略
【4月更文挑战第17天】本文探讨了Scikit-Learn处理不平衡数据集的策略,包括重采样(过采样少数类如SMOTE,欠采样多数类如RandomUnderSampler)、修改损失函数(如加权损失函数)、使用集成学习(如随机森林、AdaBoost)以及选择合适的评估指标(精确率、召回率、F1分数)。这些方法有助于提升模型对少数类的预测性能和泛化能力。
|
4天前
|
机器学习/深度学习
大模型开发: 解释批量归一化以及它在训练深度网络中的好处。
批量归一化(BN)是2015年提出的加速深度学习训练的技术,旨在解决内部协变量偏移、梯度消失/爆炸等问题。BN通过在每层神经网络的小批量数据上计算均值和方差,进行标准化处理,并添加可学习的γ和β参数,保持网络表达能力。这样能加速训练,降低超参数敏感性,对抗过拟合,简化初始化。BN通过稳定中间层输入分布,提升了模型训练效率和性能。
54 3
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【数据科学】Scikit-learn[Scikit-learn、加载数据、训练集与测试集数据、创建模型、模型拟合、拟合数据与模型、评估模型性能、模型调整]
【数据科学】Scikit-learn[Scikit-learn、加载数据、训练集与测试集数据、创建模型、模型拟合、拟合数据与模型、评估模型性能、模型调整]
|
9月前
|
存储 算法 搜索推荐
语义检索系统:基于无监督训练SimCSE+In-batch Negatives策略有监督训练的语义索引召回
语义检索系统:基于无监督训练SimCSE+In-batch Negatives策略有监督训练的语义索引召回
语义检索系统:基于无监督训练SimCSE+In-batch Negatives策略有监督训练的语义索引召回
|
机器学习/深度学习 存储 算法
NeurIPS 2022 | 如何正确定义测试阶段训练?顺序推理和域适应聚类方法
NeurIPS 2022 | 如何正确定义测试阶段训练?顺序推理和域适应聚类方法
|
索引
每次迭代,打印当前小批量的每个样本的梯度
对于每个迭代,打印每个样本的梯度是可行的,但是通常不是一个好的做法,因为随着训练样本数量的增加,打印每个样本的梯度将变得非常耗时。 如果您仍然想打印每个样本的梯度,可以按照以下步骤进行: 1. 在训练循环中,使用 enumerate() 函数迭代数据集中的每个批次,并获取每个批次的索引和数据。 2. 在每个批次中,将数据传递到模型中,并计算梯度。然后,您可以使用 grad 属性获取每个样本的梯度,并将其打印出来。 3. 将所有批次的梯度合并为一个大梯度,并使用此梯度更新模型的参数。
239 0
|
搜索推荐
召回和粗排负样本构造问题
召回和粗排负样本构造问题
254 0

热门文章

最新文章