博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Spark ML 聚类分析实战的KMeans
阅读量:6973 次
发布时间:2019-06-27

本文共 1640 字,大约阅读时间需要 5 分钟。

hot3.png

聚类分析是一个无监督学习 (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类型

101111_hiIJ_3115904.gif

(3) 进行聚类分析

101111_0tzh_3115904.gif

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

101112_pzOP_3115904.gif

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

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

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

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

5、总结

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

转载于:https://my.oschina.net/u/3115904/blog/1537749

你可能感兴趣的文章
腾讯云工业互联网助力平台发布 推动制造业“数字化”蝶变
查看>>
跨平台开发框架的大旗,究竟谁能扛起来?
查看>>
Gradle 4.2发布
查看>>
Windows 10 超过Windows 7成为最受欢迎的操作系统
查看>>
资深专家都知道的Docker常用命令
查看>>
npm系列:pm2文档简单翻译
查看>>
Face-api.js:利用TensorFlow.js的JavaScript人脸识别
查看>>
.NET Core中的去虚
查看>>
区块链安全:2019年我们走了多远?
查看>>
内存限制自适应,容器中运行Java 9效果更出众
查看>>
如何在国内构建一个硅谷级的高效技术团队?
查看>>
Reinhold就Jigsaw投票一事向JCP提交公开信
查看>>
【leetcode】93. Restore IP Addresses 无分隔符字符串ip形式的可表示的所有合法ip集合...
查看>>
关于业余时间的信息摄入
查看>>
梦想还需有,因它必实现——发现最新版iOS漏洞,OverSky团队专访
查看>>
进击JavaScript之(二)词法作用域与作用域链
查看>>
【腾讯Bugly干货分享】微信Tinker的一切都在这里,包括源码(一)
查看>>
Linux+emacs个性化定制
查看>>
关于 String.intern() 的思考
查看>>
《每周一点canvas动画》—— 文字粒子
查看>>