一,K-Means聚类算法原理
k-means 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
假设要把样本集分为c个类别,算法描述如下:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。
二,mahout Kmeans聚类实现 :
(1)参数input指定待聚类的所有数据点,clusters指定初始聚类中心
如果指定参数k,由org.apache.mahout.clustering.kmeans.RandomSeedGenerator.buildRandom
通过org.apache.hadoop.fs直接从input指定文件中随机读取k个点放入clusters中
(2)根据原数据点和上一次迭代(或初始聚类)的聚类中心计算本次迭代
的聚类中心,输出到clusters-N目录下。
该过程由org.apache.mahout.clustering.kmeans下的
KMeansMapper\KMeansCombiner\KMeansReducer\KMeansDriver实现
KMeansMapper:在configure中初始化mapper时读入上一次迭代产生或初始聚类中心
(每个mapper都读入所有的聚类中心);
map方法对输入的每个点,计算距离其最近的类,并加入其中
输出key为该点所属聚类ID,value为KMeansInfo实例,包含点的个数和各分量的累加和
KMeansCombiner:本地累加KMeansMapper输出的同一聚类ID下的点个数和各分量的和
KMeansReducer:累加同一聚类ID下的点个数和各分量的和,求本次迭代的聚类中心;
并根据输入Delta判断该聚类是否已收敛:上一次迭代聚类中心与本次迭代聚类中心距离<Delta;
输出各聚类中心和其是否收敛标记
KMeansDriver:控制迭代过程直至超过最大迭代次数或所有聚类都已收敛
每轮迭代后,KMeansDriver读取其clusters-N目录下的所有聚类,若所有聚类已收敛
则整个Kmeans聚类过程收敛了。
参数调整 :
manhout Kmeans聚类有两个重要参数:收敛Delta和最大迭代次数
个人觉得Delta值越小,表示收敛条件越高,因此最终收敛的聚类数可能会降低,
而最大迭代次数可通过观察每次迭代后收敛聚类数决定,当收敛聚类数几乎不再变化或震荡时可停止迭代了
分享到:
相关推荐
Mahout 聚类算法是数据挖掘和机器学习领域中的一种重要算法,它可以将相似的数据点聚集在一起,以便更好地理解和分析数据。Mahout 聚类算法可以分为多种类型,如 Canopy、KMeans、Fuzzy-KMeans、Spectral Clustering...
Canopy聚类算法是一种预聚类技术,常被用作K-means或其它更复杂的聚类算法的预处理步骤。Canopy算法的主要优点在于其速度和效率,尤其适用于大规模数据集。Canopy算法通过定义两个阈值T1和T2(T1>T2)来快速将数据...
在自然语言处理领域,文本聚类是一种常见的无监督学习方法,...总的来说,Java实现KMeans文本聚类涉及到数据预处理、向量化、聚类算法实现和性能优化等多个方面,理解这些知识点对于提升文本分析项目的效果至关重要。
大数据的挖掘是当今的研究热点,也有着巨大的商业价值。新型框架Spark部署在...该文研究了Spark中的机器学习中的聚类算法KMeans,先分析了算法思想,再通过实验分析其应用的方法,然后通过实验结果分析其应用场景和不足。
《深入理解Mahout中的KMeans聚类算法》 在数据挖掘和机器学习领域,聚类是一种常用的技术,用于发现数据集中的自然群体或类别。Apache Mahout作为一个强大的开源机器学习库,提供了多种聚类算法,其中KMeans是最为...
Mahout的目标是帮助开发人员构建智能应用程序,如推荐系统、分类和聚类算法,这些在大数据分析领域中极为重要。 **K-Means聚类算法** K-Means是一种无监督学习的聚类算法,用于将数据集分成不同的群组或类别。在...
在Java编程环境中,KMeans是一种常用的无监督机器学习算法,用于数据聚类。这个标题"java 利用Kmeans的jar包进行聚类---代码"表明我们将探讨如何使用Java通过预编译的KMeans库(通常是一个jar包)来执行聚类任务。...
总之,KMeans聚类算法是数据挖掘中的一种重要工具,Java为其提供了丰富的实现方式。通过理解和实践Java中的KMeans,我们可以更好地理解和应用这一算法,解决实际问题。同时,测试和分析结果是验证算法有效性和优化...
《基于Java的KMeans算法实现文本聚类及TF-IDF权重计算详解》 在数据挖掘领域,文本聚类是一种常用的技术,它通过无监督学习方法将大量文本数据自动分类为不同的组,使得相同主题的文本聚集在一起。在这个过程中,...
以上步骤详细介绍了如何在 Mahout 0.9 中运行 KMeans 算法进行数据聚类。请注意,实际操作时可能需要根据你的具体环境配置和数据集调整相关参数,例如 KMeans 中的迭代次数、初始中心点选择策略等。此外,理解 ...
【聚类分析】是数据分析领域中的重要技术,其目的是通过将数据对象分为多个类或簇,...在选择聚类算法时,需要考虑问题的特性,如排他性、层次性、簇数量以及模型基础,以确保算法能够准确地捕捉到数据中的关键信息。
K-means是最为知名的无监督聚类算法之一,而Coh-kmeans则是其半监督版本,结合了有监督和无监督的学习特性。本篇将深入探讨Coh-kmeans算法以及其Java实现。 ### 1. K-means算法简述 K-means算法基于中心点迭代更新...
1. **聚类算法**:KMeans是Mahout中最常见的聚类算法之一。在Hadoop上运行KMeans,可以处理海量数据,对大量用户行为、网站访问记录或者地理定位数据进行分组,发现潜在的模式或群体。此外,Mahout还支持其他聚类...
kmeans聚类算法 基于划分的方法单机版基于学习
- DBSCAN、谱聚类等其他聚类算法,它们对噪声和非凸形状的处理更好。 在实际项目中,可能会使用Apache Mahout、Weka或Spark MLlib等库来实现KMeans,因为它们提供了更高级的功能和优化。不过,自己动手实现KMeans...
总结来说,Apache Mahout 0.4版本是一个强大的工具,为开发者和数据分析师提供了实现机器学习任务的高效途径,特别是KMeans聚类、FPM挖掘和协同过滤。通过这个开源项目,即使是对机器学习不熟悉的用户也能处理大数据...
在这个项目中,我们将探讨如何利用聚类算法来对数据进行有效的清洗。聚类是一种无监督学习方法,常用于发现数据集中的自然群体或模式,这在数据预处理阶段对于识别异常值、填补缺失值或标准化数据非常有用。 首先,...
KMeans是一种无监督学习的聚类算法,用于将数据集分成K个不同的群组,使得每个数据点与所在群组的中心点(均值)距离最小。在Java中,Apache Mahout库提供了KMeans的实现,也可以通过实现迭代过程和质心更新逻辑来...
要点(层次聚类、kmeans)、挖掘-关联(Apriori),挖掘-预测(线性回归,指数平滑,移动平均), 原理及实际建模操作 第6周 数据挖掘实战 要点(以目标客户挖掘为例,从业务分析、方案制定、数据处理、数据准备、...