机器学习之k-means聚类算法学习

关于聚类算法,之前整理过一篇dbscan的,可以与本文相互参考,链接地址:

机器学习之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算法区别及其代码实现

你可能感兴趣的:(机器学习之k-means聚类算法学习)