机器学习 之 K均值聚类

对于蜂巢的预测问题,我们使用了K均值聚类的方法

因为黄蜂种群以蜂巢为单位进行活动的,黄蜂以蜂巢为中心向四周发散活动,在蜂巢附近的区域,黄蜂出现的概率更大,因此我们认为在蜂巢附近的目击事件会更多,即目击事件集中于蜂巢附近,离蜂巢越远,目击事件越少,且越有可能是假目击事件。

而且由于黄蜂的领地性质,黄蜂不会离开蜂巢太远的距离,同时不同巢的黄蜂不会进入其他巢存在的位置,因此不太可能存在不同种群黄蜂的领地存在穿插的情况,这样的黄蜂种群模型十分有利于k均值算法。

因此对于蜂巢地点的预测问题,我们使用了K均值聚类的方法,聚类分析是一种无监督学习技术,可以在事先不知道正确结果(即无类标或预期输出值)的情况下,发现数据本身所蕴含的结构信息。其目标是发现数据中自然形成的分组,使得每个簇内样本的相似性大于其他簇内样本的相似性。

而实际上这里有一个问题,即我们并不知道到底有多少个蜂巢,即我们并不知道总体数据要分为几个簇,鉴于政府提供的资金援助有限,我们无法同时对很多地点进行勘测,因此我们无法将数据分为过多的簇,在这里我们假定政府提供的资金最多使我们能调查五个地点,因此在这里我们将样本集划分为5个簇,用算法进行运算后,取每个簇的中心点,作为预测蜂巢存在的地点,指导我们用有限的资源去进行勘测。

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。如果用数据表达式表示,假设簇划分为 ( C 1 , C 2 , . . C k ) (C_1,C_2,..C_k) (C1,C2,..Ck),则我们的目标是最小化平方误差 E E E
E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E=\sum^k_{i=1}\sum_{x\in C_i}||x-\mu_i||^2_2 E=i=1kxCixμi22

其中 μ i \mu_i μi是簇 C i C_i Ci的均值向量,有时也称为质心,在这里则表示蜂巢的位置,也是我们想要的最终结果,表达式为:
μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i=\frac{1}{|C_i|}\sum_{x\in C_i}x μi=Ci1xCix

接下来的工作就是将平方误差 E E E最小化,以求出质心的具体位置,质心的数量取决于政府的支持程度,而初始化质心的位置是随机的,由于我们用启发式方法, k k k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,由于黄蜂的蜂巢一般不会太接近,因此这些质心不能太近。

我们用机器视觉的方法,从3000张图片中辨认出不少黄蜂的图片,再结合这些图片的坐标数据,我们就得到了相当数量的目击黄蜂事件的坐标信息,将这些信息作为样本集 D = { x 1 , x 2 , . . . x m } D=\{x_1,x_2,...x_m\} D={x1,x2,...xm},聚类的簇数 k k k,最大迭代次数 N N N,输出是簇划分 C = { C 1 , C 2 , . . . C k } C=\{C_1,C_2,...C_k\} C={C1,C2,...Ck},接下来是k均值聚类的具体算法:

  1. 从数据集 D D D中随机选择 k k k个样本作为初始的 k k k个质心向量: { μ 1 , μ 2 , . . . , μ k } \{\mu_1,\mu_2,...,\mu_k\} {μ1,μ2,...,μk}

  2. 对于 n = 1 , 2 , . . . , N n=1,2,...,N n=1,2,...,N

    a) 将簇划分 C C C初始化为 C t = ∅ t = 1 , 2 , . . . , k C_t=\empty \quad t=1,2,...,k Ct=t=1,2,...,k

    b) 对于 i = 1 , 2 , . . , m i=1,2,..,m i=1,2,..,m,计算样本 x i x_i xi和各个质心向量 μ j ( j = 1 , 2 , . . . , k ) \mu_j(j=1,2,...,k) μj(j=1,2,...,k)的距离: d i j = ∣ ∣ x i − μ j ∣ ∣ 2 2 d_{ij}=||x_i-\mu_j||^2_2 dij=xiμj22,将 x i x_i xi标记最小的 d i j d_{ij} dij所对应的类别 λ i \lambda_i λi。此时更新 C λ i = C λ i ∪ { x i } C_{\lambda_i}= C_{\lambda_i}\cup\{x_i\} Cλi=Cλi{xi}

    c) 对于 j = 1 , 2 , . . . , k j=1,2,...,k j=1,2,...,k,对 C j C_j Cj中所有的样本点重新计算新的质心 μ j = 1 C j ∑ x ∈ C j x \mu_j=\frac{1}{C_j}\sum_{x\in C_j}x μj=Cj1xCjx

    d) 如果所有的 k k k个质心向量都没有发生变化,则转至步骤3

3)输出质心向量 μ j ( j = 1 , 2 , . . . , k ) \mu_j(j=1,2,...,k) μj(j=1,2,...,k)

最后输出的结果为:
[[-122.57087037 48.60566111]
[-119.64764857 47.25175143]
[-122.40038082 47.36171438]
[-117.38287273 47.38659091]]

这是质心的向量,也是蜂巢的坐标,算法表明这四个地点最有可能存在黄蜂的蜂巢,因此我们接下来就可以去这四个地点进行调查。

聚类分析是一种无监督学习技术(常见的无监督学习还有密度估计、异常检测等),可以在事先不知道正确结果(即无类标或预期输出值)的情况下,发现数据本身所蕴含的结构信息。其目标是发现数据中自然形成的分组,使得每个簇内样本的相似性大于其他簇内样本的相似性。聚类的商业领域应用包括:按照不同主题对文档、音乐、电影进行分组,或基于常见的购买行为,发现有相同兴趣爱好的顾客,并以此构建推荐引擎。

性能度量
大致分为两类:一类是将聚类结果与某种参考模型(例如将某领域专家给出的分类结果作为参考模型)进行比较,称为外部指标;另一类是直接考察外部结果而不利用任何参考模型,称为内部指标。

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
在这里插入图片描述
在这里插入图片描述
实际上是迭代的方法,每次迭代,分类的样本不同,导致均值中心也发生变化。

k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心。如果仅仅是完全随机的选择,有可能导致算法收敛很慢。K-Means++算法就是对K-Means随机初始化质心的方法的优化。

在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。

在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。

K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值