关于聚类算法,之前整理过一篇dbscan的,可以与本文相互参考,链接地址:
1、聚类算法简介【1】
非监督学习算法中,比较有代表性的就是聚类算法。而聚类算法中,又有:
分割方法:K-means
分层次方法:ROCK 、 Chemeleon
基于密度的方法:DBSCAN、
基于网格的方法:STING 、 WaveCluster
以上只是部分算法,在这里就不一一列举了,本文讲解的是K-means算法。
2、K-means原理【1】
K-means算法原理十分简单,实行起来总共分为以下几个步骤:
1、根据要分K类来确定K个初始聚类中心
2、将每个样本数据分配给距离最近的聚类中心,形成K个簇
3、算出每个簇的均值点作为新的聚类中心
4、重复2、3两个步骤,直到聚类中心不再改变
文字往往没有这么直观,接下来看下面的图片,我们可以清晰地看到聚类中心的变化,簇的变化。随着上面步骤的结束,K-means算法到达了我们想要的效果。
k-means聚类过程
3、K-means参数优化【2】
1、代价函数
这代价函数很好理解,最小化此代价函数,无非是最小化每个样本到所属类簇中心的距离,此时的分类效果很好。
2、选择初始化聚类中心
如果采用随机初始化,很可能导致结果的不理想,下图是两个不同初始化聚类中心的分类效果,明显下面这个分类效果好
多了,所以一次随机初始化,并不能给我们带来理想的效果。
那我们该怎么选择初始聚类中心呢?其实只需多次随机初始化,并运行算法,计算其代价函数,选择代价函数值小的初始化聚类中心。
3、选择聚类的数目
如何选择聚类的数目?说实话,没有特别标准的答案。一般来说,手动选取比较多,或者采用“肘部法则”(Elbow method),此法则是计算不同聚类数目下的代价函数,画出曲线,选择这个转折点(像肘部)的K值作为聚类数目,如下面左图所示。但是,现实中的情况往往是下面右图所示,很难找到“肘部”。
注意:其实很多时候,你要分类的目标会给你相应的信息,需要分几类,此时你完全可以按照目标的要求来。
4、KNN和K-means的区别与联系【2】
5、k-means算法聚类中心选取不当造成的识别错误
左图使用了【0,max(Array)】作为k-means 2聚类的初始中心,而修正为【0.3*median(Array),0.8*max(Array)】后获得了较好的效果
参考资料
【1】https://www.cnblogs.com/steed/p/7452728.html 机器学习之K-means算法
【2】https://blog.csdn.net/sinat_35512245/article/details/55051306 机器学习之深入理解K-means、与KNN算法区别及其代码实现
网友评论