前言
机器学习算法主要分为三部分的应用:分类、回归、聚类。
前两部分我们都已经介绍过,今天我们来说最后一部分–聚类。首先来说聚类它是一种无监督学习方式,输入的数据集实例中并没有标签,也没有指定的学习任务,算法的结果是产生几个簇,把最相似的数据实例放在一起,而这个相似度的度量,正是算法的核心,本文采用的是基于距离的度量方式(有点类似KNN算法策略)。
一、算法实现
该算法思想比较简单,我就不啰嗦了,直接附上我的代码实现,这是一种传统的实现方式。数据集和代码都在这个链接里面,上面有详细的注释。
https://github.com/GritCoder/k-Means
二、补充
上面提到的是最基本的聚类算法,对于聚类算法的学习来说,是一个很好的工具,但是在很多应用场景中,已很难满足实际的需求,因此提出了很多kMeans的改进版本,比如二分K-Means 、kmeans++ 等众多改进算法。
改进点主要体现在这几方面:
1、数据集被划分为多少个簇,事先程序并不知道,需要用户手动输入,但是用户输入并没有依据参考,需要不断调试,逐步找到最佳的簇。一种改进办法就是让程序动态的划分簇,程序在执行过程中,根据数据集的特点和需要,可以动态的添加或者合并簇。
2、传统聚类算法主要是基于距离的度量方式,生成的结果簇中,保存了数据索引index和其到质心的距离,我们可以通过对距离再次进行后处理来优化,毕竟误差越小越好,其基本思想就是根据距离,再次进行簇的合并与划分。
具体的还有很多改进算法,详情可以参考一篇不错的博客,内容很赞。https://www.cnblogs.com/yixuan-xu/p/6272208.html