龙空技术网

Kmeans算法(Spark实现)

数据科学SKY 1361

前言:

今天看官们对“kmeans算法步骤”可能比较注意,同学们都想要分析一些“kmeans算法步骤”的相关内容。那么小编同时在网络上收集了一些关于“kmeans算法步骤””的相关知识,希望兄弟们能喜欢,朋友们快快来了解一下吧!

简介:在接触机器学习的时候,大部分都是从Kmeans算法开始,kmeans方法可以说是一种比较简单的聚类算法,单机版的kmeans算法网上有很基于python,java,matlab,R等的实现。运用于海量数据的有mahout,spark mllib等分布式实现,直接调用就可以使用,本文主要介绍基于spark的kmeans算法的实现,由于资源有限,该程序是在本地运行的,数据源使用的是本地文件。

数据集介绍(格式如下):

5.0#3.6#1.4#0.2#1

5.1#3.7#1.5#0.4#1

每一行都代表是一个样例的特征值,并且用#号切分,这里省去了特征提取和处理的过程。

算法原理(这个大家肯定都清楚,一笔带过):

算法接收参数K值,将实现输入的n个数据对象划分为k个聚类,以便使得所获得的聚类满足,同一聚类中的对象相似度较高,而不同聚类中的相似度较小。

spark具体实现:

这里主要涉及到4个类:

KmeansProperty:每个对象的特征值;

Cluster:每个节点所属的簇ID及其特征值;

RandomClusterGenerator:读取训练集数据,并且生成原始的簇中心点;

Kmeans:调度类;

KmeansProperty详解:

Cluster详解:

主要包含3个属性:簇ID,该簇的节点个数,该节点的特征值;其它的构造方法及toString容易理解。

RandomClusterGenerator详解:

包含4个属性:k指簇的个数,data是训练样本集,clusters是生成的k个簇中心节点,kmeansCLuster是ArrayList类型的簇中心节点。

getInitialCluster是生成k个中心点。

Kmeans详解:

主要涉及到两个方法:

获得节点到7个簇中心的最小距离(这里默认的是分成7类)在map操作中使用

计算连个节点之间的距离

该方法主要是在reduceByKey的时候调用,生成新的节点

获得每个节点所属的簇中心的ID

下面的方法是计算最新的簇中心点,并转化成ArrayList类型

上述过程是一次迭代,要是根据迭代的个数只需要加循环就可以。

标签: #kmeans算法步骤 #kmeans算法思路 #kmeans算法数据集 #r语言与kmeans算法 #matlab kmeans函数