k-means算法(易懂)

!](https://img-blog.csdnimg.cn/20201026093945824.png#pic_center)
k-means算法的嗓步骤

1、选取K个点u1、u2…uk(怎么选取,以及怎么优化后面会提到,以及k为多少比较合适)
2、分类(怎么分?):计算数据中每个点到步骤1中k个点的距离(欧氏距离、曼哈顿距离等)以欧氏距离为例:
在这里插入图片描述
3、迭代更新(更新中心点):使得所有数据点的距离距离各个中心点u1、u2…uk的距离不再改变
更新方法(可以根据自身条件设定,这里只举例一条):
在这里插入图片描述

画个示意图理解一下
以九个数据,3个分类为例
首先随机选取3个特征点u1,u2,u3按照举例计算出分类
在这里插入图片描述
注:黄色点代表中心点,黑色点代表数据点
**(哭笑hhhhh, 我这个选的太明显了)**记住这个步骤即可,然后不断地迭代更新中心点
在这里插入图片描述
上述的表示属于正常的分类,当然也就有一些特殊的情况
在这里插入图片描述
对于这样的数据,我们可以很明显的发现最左边以及最右边的点很明显就是噪声,如果按照上述的步骤,我们就很有可能将噪点归位了一类,对于噪声,我们知道都是一些很少量的数据,那么,在我们选择点的时候,我门要给所有的点一个权重,例如上面的点,虽然距离最远,但是只有一个点,其权重较小,而对于中间附近的点很多,其权重就大。例如,我们设边缘的权重是1/10,中间的点权重是1/30,但是其数量很多,假设有10个点,那么权重就可以理解为多个点的和,那就是1/3,所以,最终初始化的点会选择(0,1)与(0,-1)附近,噪声问题也就解决了。

k值如何选择
起初想总结一下别人的方法,发现不太可靠,抄袭毕竟可耻,所以还是转载一下
如何选择好的k值

优点:

1、该算法时间复杂度为O(tkmn),(其中,t为迭代次数,k为簇的数目,m为记录数,n为维数)与样本数量线性相关,所以,对于处理大数据集合,该算法非常高效,且伸缩性较好;

2、原理简单,实现容易。

缺点:

1、聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适;

2、Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用K-means++算法来解决);

3、结果不一定是全局最优,只能保证局部最优;

4、对噪声和离群点敏感;

5、该方法不适于发现非凸面形状的簇或大小差别很大的簇;

6、需样本存在均值(限定数据种类)。

6、算法改进

针对上述第2个缺陷,可以使用Kmeans++算法来解决。 k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。wiki上对该算法的描述是如下:

从输入的数据点集合中随机选择一个点作为第一个聚类中心;
对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);
选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;
重复2和3直到k个聚类中心被选出来;
利用这k个初始的聚类中心来运行标准的k-means算法。

然后就是KNN与K-means的区别和联系
写的真心不错,我偷偷懒就完事了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值