对于KMeans++算法的精度优化理论实现

8 篇文章 0 订阅
6 篇文章 0 订阅

我们知道Kmeans聚类算法在理论上有一定弊端,由于初始化完全随机,会使得生成的点收到限制,最后聚类的结果不好,且 kmeans算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 kk 个簇的划分情况。这是因为kmeans算法收敛到了局部最小值,而非全局最小值。

正因如此,Kmeans++作为Kmeans的衍生版本出现了
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。wiki上对该算法的描述是如下:

1.从输入的数据点集合中随机选择一个点作为第一个聚类中心
2.对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
3.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4.重复2和3直到k个聚类中心被选出来
5.利用这k个初始的聚类中心来运行标准的k-means算法
其实对于聚类算法中聚类过程Kmeans++已经对Kmeans进行了很高的优化了,虽然运行效率慢了许多 在某些数据上却可以提高聚类精度近1000呗 ,但由于Kmeans++算法在初始点选取上依旧是随机选取,哪怕是后续点都是距离初始点最远的点 我们也只能保证该算法的聚类相对正确,而不是绝对正确,这就引发了我的猜想,我们要想优化该算法,就要弄清楚问题原因:
因为初始点随机问题,因为在选取第一个点上我们必须进行随机选取且让其无限接近于最正确的值,但无限接近不等于正确,当我们决定一个点一个点去寻找时,就已经无法找到最正确的点了,只有一次筛选将K个点全部筛出,这样的K才是正确的K
那么要想一次性选取出K个点,并保证正确我们第一点就该弄清楚什么样的K个点就是最正确的,假设我们有1000个点K=5,那么什么样的5个点才是符合要求的?
利用反证法 我们可以想象到其实并不是选取第一个点之后不听选取最远点,而是在K个点的情况下我们可以连接出K的累加条线假设这个集合为M也就是 M=(K+1)*K/2,假设我们先在确定最优的K(best)个点,连线集合为M(best)那么我们在取点过程中其他任意K(other)个点的连线集合M(other)中我们M(best)中所有连线最短的是在其他所有情况下M(other)里最短线段的最长的那一根(P.S:这里比较抽象)我们就能找到正确的M
所以我们将所有点之间连线创造出来再进行由大到小排序,遍历排好序的线段队列去判断已排序的所有线段集中是否有10条线段是由5个点连接组成,如果有我们可以立即返回,即找到最优5个点

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值