机器学习预研spark.ml-K-Means

算法介绍

聚类分析是一个无监督学习 (Unsupervised Learning) 过程, 一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域。K-means 应该是最有名并且最经常使用的聚类算法了,其原理比较容易理解,并且聚类效果良好,有着广泛的使用。
K-means是聚类算法重较为简单的一种,其属于无监督学习,所以训练样本中没有没有类别标签,只有特征。

算法流程
  1. 第一步,选择 K 个点作为初始聚类中心。
  2. 第二步,计算其余所有点到聚类中心的距离,并把每个点划分到离它最近的聚类中心所在的聚类中去。在这里,衡量距离一般有多个函数可以选择,最常用的是欧几里得距离 (Euclidean Distance), 也叫欧式距离。公式如下:
    这里写图片描述
    其中 C 代表中心点,X 代表任意一个非中心点。
  3. 第三步,重新计算每个聚类中所有点的平均值,并将其作为新的聚类中心点。
  4. 最后,重复 (二),(三) 步的过程,直至聚类中心不再发生改变,或者算法达到预定的迭代次数,又或聚类中心的改变小于预先设定的阀值。
参数含义
  1. k 表示期望的聚类的个数。
  2. maxInterations 表示方法单次运行最大的迭代次数。
  3. runs 表示算法被运行的次数。K-means 算法不保证能返回全局最优的聚类结果,所以在目标数据集上多次跑 K-means 算法,有助于返回最佳聚类结果。(1.6版本后,该参数废弃)
    1. initializationMode 表示初始聚类中心点的选择方式, 目前支持随机选择或者 K-means||方式。默认是 K-means||。
  4. initializationSteps表示 K-means||方法中的部数。
  5. epsilon 表示 K-means 算法迭代收敛的阀值。
  6. seed 表示集群初始化时的随机种子。

通常应用时,我们都会先调用 KMeans.train 方法对数据集进行聚类训练,这个方法会返回 KMeansModel 类实例,然后我们也可以使用 KMeansModel.predict 方法对新的数据点进行所属聚类的预测,这是非常实用的功能

k-means小知识

距离计算方法

1.欧几里得距离

欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。
(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:
这里写图片描述
(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:
这里写图片描述
(3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:
这里写图片描述

2.曼哈顿距离

从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(CityBlock distance)。
(1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离

这里写图片描述
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的曼哈顿距离
这里写图片描述

3.余弦相似度

余弦相似度,又称为余弦相似性。通过计算两个向量的夹角余弦值来评估他们的相似度。
(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
这里写图片描述
(2)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦
类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。
这里写图片描述

案例

K-Means算法的结果好坏依赖于对初始聚类中心的选择,容易陷入局部最优解,对K值的选择没有准则可依循,对异常数据较为敏感,只能处理数值属性的数据,聚类结构可能不平衡。

本实例中进行如下步骤:

1.装载数据,数据以文本文件方式进行存放;

2.将数据集聚类,设置2个类和20次迭代,进行模型训练形成数据模型;

3.打印数据模型的中心点;

4.使用误差平方之和来评估数据模型;

5.使用模型测试单点数据;

6.交叉评估1,返回结果;交叉评估2,返回数据集和结果。

数据格式

使用的kmeans_data.txt的数据如下所示:

0.0 0.0 0.0  
0.1 0.1 0.1  
0.2 0.2 0.2  
9.0 9.0 9.0  
9.1 9.1 9.1  
9.2 9.2 9.2  
运行参数
  • 输入数据所在目录:输入数据文件目录,本例中在代码中在代码中可设置,这里设置为/Users/Iris/Documents/idea/spark-master/data/mllib/kmeans_data.txt
  • 用户的评分文件路径:前一步骤中用户对十部电影评分结果文件路径,在这里设置为 /home/Iris/Documents/result_kmeans2
输出内容

1.两个簇中心点

17/06/19 16:48:23 INFO KMeans: KMeans converged in 1 iterations.
17/06/19 16:48:23 INFO KMeans: The cost is 0.11999999999994547.
17/06/19 16:48:23 INFO MapPartitionsRDD: Removing RDD 3 from persistence list
17/06/19 16:48:23 INFO BlockManager: Removing RDD 3
Cluster centers:
 [9.099999999999998,9.099999999999998,9.099999999999998]
 [0.1,0.1,0.1]
 ```
2.结果
模型确定后,可通过预测来几个数值来测试模型,
,注意数据要转换成向量  

方法为:

model.predict(Vectors.dense(“0.25 0.25 0.25”.split(’ ‘).map(_.toDouble))

结果为:

0.25 0.25 0.25 1
“`
它属于cluster1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值