聚类是把相似的对象通过静态分类方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性。聚类算法的任务是将数据集划分为多个集群。在相同集群中的数据彼此会比不同集群的数据相似。通常来说,目标就是通过相似特征将数据分组并分配进不同的集群中。
K-means 聚类算法是一种非监督学习算法,被用于非标签数据(data without defined categories or groups)。该算法使用迭代细化来产生最终结果。算法输入的是集群的数量 K 和数据集。数据集是每个数据点的一组功能。
算法从 Κ 质心的初始估计开始,其可以随机生成或从数据集中随机选择。然后算法在下面两个步骤之间迭代:
1.数据分配:
每个质心定义一个集群。在此步骤中,基于平方欧氏距离将每个数据点分配到其最近的质心。更正式一点,ci 属于质心集合 C ,然后每个数据点 x 基于下面的公式被分配到一个集群中。
其中 dist(·)是标准(L2)欧氏距离。让指向第 i 个集群质心的数据点集合定为 Si。
2. 质心更新:
在此步骤中,重新计算质心。这是通过获取分配给该质心集群的所有数据点的平均值来完成的。公式如下:
K-means 算法在步骤 1 和步骤 2 之间迭代,直到满足停止条件(即,没有数据点改变集群,距离的总和最小化,或者达到一些最大迭代次数)。
上述算法找到特定预选 K 值和数据集标签。为了找到数据中的集群数,用户需要针对一系列 K 值运行 K-means 聚类算法并比较结果。通常,没有用于确定 K 的精确值的方法,但是可以使用以下技术获得准确的估计。
还存在许多用于验证 K 的其他技术,包括交叉验证,信息标准,信息理论跳跃方法,轮廓方法和 G 均值算法等等。
之前介绍了 KNN (K 邻近)算法,感觉这两个算法的名字很接近,下面做一个简略对比。
K-means :
K-NN:
数据示例
特征选择
Process
k 的取值
在 “charts” 一栏中,也可以看到数据的可视化展示。如下图所示,可以发现这三个集群的特点:
- cluster\_1:花萼(萼片)的长宽比花瓣的长宽要大。花萼的长度范围在 4.25 ~ 6.00 厘米之间,宽度在 2.25 ~ 4.25 厘米之间;花瓣的长度在 1.00 ~ 2.00 厘米之间,宽度在 0.00 ~ 0.75 厘米之间。
- cluster\_0:花萼的长度和花瓣的长度都比较大,而花萼的宽度和花瓣的宽度偏小。花萼的长度范围在 5.00 ~ 7.00 厘米之间,花瓣的长度在 3.25 ~ 5.25 厘米之间;花萼的宽度在 2.00 ~ 3.75 厘米之间,花瓣的宽度在 0.50 ~ 2.00 厘米之间。
- cluster\_2:花萼的长度和花瓣的长度都比较大,而花萼的宽度和花瓣的宽度偏小。花萼的长度范围在 6.00 ~ 8.00 厘米之间,花瓣的长度在 5.25 ~ 6.75 厘米之间;花萼的宽度在 2.25 ~ 3.75 厘米之间,花瓣的宽度在 1.50 ~ 2.75 厘米之间。
综合来看,也可以发现,cluster_2 的花萼的长度和花瓣的长度普遍比 cluster_0,cluster_1 要大得多。