基于Spark ML 聚类分析实战的KMeans

原创
2017/09/15 10:19
阅读数 2K

聚类分析是一个无监督学习 (Unsupervised Learning) 过程, 一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域。K-means 应该是最有名并且最经常使用的聚类算法了,其原理比较容易理解,并且聚类效果良好,有着广泛的使用。目前Spark ML支持四种聚类算法,Kmeans, Bisecting k-means(二分k均值算法),GMMs(高斯混合模型),LDA(主题模型算法)。

1、K均值(K-means)算法

K-means是一个常用的聚类算法,将数据点按预定的簇数进行聚集。

K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

假设要把样本集分为c个类别,算法描述如下:

(1)适当选择c个类的初始中心;

(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类;

(3)利用均值等方法更新该类的中心值;

(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

 使用FEA-spk技术Kmeans的可调参数如下

  • k 表示期望的聚类的个数。默认为2

  • maxIter表示方法单次运行最大的迭代次数。默认为20

  • initMode 表示初始聚类中心点的选择方式, 目前支持随机选择或者 K-means||方式默认是 K-means||。

  • initSteps表示 K-means||方法中的部数。默认是5

  • tol表示 K-means 算法迭代收敛的阀值。默认是1e-4

  • seed 表示集群初始化时的随机种子。默认为None

2、使用FEA-spk技术来实现聚类算法

FEA-spk技术,它的底层基于最流行的大数据开发框架spark,对各种算子的操作都是基于DataFrame的,使用FEA-spk来做交互分析,不但非常简单易懂,而且几乎和spark的功能一样强大,更重要的一点,它可以实现可视化,处理的数据规模更大,可以进行分布式的机器学习等。

3、聚类测试数据集简介

在本文中,我们所用到目标数据集是来自 UCI Machine Learning Repository 的 

Wholesale customer Data Set。UCI 是一个关于机器学习测试数据的下载中心站点,里面包含了适用于做聚类,分群,回归等各种机器学习问题的数据集。Wholesale customer Data Set 是引用某批发经销商的客户在各种类别产品上的年消费数。

4、案例分析和原语实现

本例中,我们将根据目标客户的消费数据,将每一列视为一个特征指标,对数据集进行聚类分析。具体的步骤如下所示

(1) 创建spk的连接,加载存放在hdfs的CSV数据集

可以看到数据的格式如图所示

(2) 将df表的所有列都转化为double类型

(3) 进行聚类分析

(4) 对模型进行打分,评估这个模型好坏

对参数进行调试的时候,这个值是越小越好

(5) 将训练好的模型保存在hdfs上面,方便用户进行使用

(6) 将hdfs上面保存的模型加载下来,进行预测

其中prediction列就是预测后的结果。

5、总结

通过本文的学习,读者已经初步了解了 FEA-spk的使用,并且掌握了 K-means 算法的基本原理,以及如何基于 FEA-spk构建自己的机器学习应用。机器学习应用的构建是一个复杂的过程,我们通常还需要对数据进行预处理,然后特征提取以及数据清洗等,然后才能利用算法来分析数据。Spark MLlib 区别于传统的机器学习工具,不仅是因为它提供了简单易用的 API,更重要的是 Spark 在处理大数据上的高效以及在迭代计算时的独特优势。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部