聚类算法
聚类是把相似的对象通过静态分类方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性。聚类算法的任务是将数据集划分为多个集群。在相同集群中的数据彼此会比不同集群的数据相似。通常来说,目标就是通过相似特征将数据分组并分配进不同的集群中。
K-means 实现过程
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 值运行 K-means 聚类算法并比较结果。通常,没有用于确定 K 的精确值的方法,但是可以使用以下技术获得准确的估计。
- Elbow point 拐点方法 通常用于比较不同 K 值的结果的度量之一是数据点与其聚类质心之间的平均距离。由于增加集群的数量将总是减少到数据点的距离,因此当 K 与数据点的数量相同时,增加 K 将总是减小该度量,达到零的极值。因此,该指标不能用作唯一目标。相反,绘制了作为 K 到质心的平均距离的函数,并且可以使用减小率急剧变化的“拐点”来粗略地确定 K 。
- DBI(Davies-Bouldin Index) DBI 是一种评估度量的聚类算法的指标,通常用于评估 K-means 算法中 k 的取值。简单的理解就是:DBI 是聚类内的距离与聚类外的距离的比值。所以,DBI 的数值越小,表示分散程度越低,聚类效果越好。
还存在许多用于验证 K 的其他技术,包括交叉验证,信息标准,信息理论跳跃方法,轮廓方法和 G 均值算法等等。
K-means 的缺点
- 需要提前确定 K 的选值或者需尝试很多 K 的取值
- 数据必须是数字的,可以通过欧氏距离比较
- 对特殊数据敏感,很容易受特殊数据影响
- 对初始选择的质心/中心(centers)敏感
K-means 与 K-NN 的比较
之前介绍了 KNN (K 邻近)算法,感觉这两个算法的名字很接近,下面做一个简略对比。
K-means :
- 聚类算法
- 用于非监督学习
- 使用无标签数据
- 需要训练过程
K-NN:
- 分类算法
- 用于监督学习
- 使用标签数据
- 没有明显的训练过程
基于 Rapid Miner 的 K-means 实践
- 问题阐述 在经典的 Iris Dataset 中,使用 K-means 算法将虹膜类植物进行聚类。
- 数据集准备 在 Kaggle 上下载 Iris 数据集或者 Rapid Miner 自身带有一个数据库,数据库中有 Iris 数据集。
- 数据预处理 Iris 数据集中包含这些信息:ID,SepalLengthCM(花萼的长度),SepalWidthCM(花萼的宽度),PetalLengthCM(花瓣的长度),PetalWidthCM(花瓣的宽度),Species(种类)。其中 ID 是无用数据,Species 是非数字数据。需要把这两个数据滤除。这时可以选择 “Select Attributes” 这个操作器。并设置该操作器的参数,其中 “attribute filter type” 选择 “subset”,“attritubes” 选择花萼的长度,宽度和花瓣的长度,宽度。
数据示例
特征选择
- 模型过程图搭建 按下图搭建整个 Process ,其中 “Clustering” 就是选择的 “k-means” 操作器。因为已经知道数据集是将虹膜类植物划分为 3 类,所以可以很容易的确定 k 的取值是 3(也可以通过 “Performance” 这个操作器查看不同 k 值情况下输出结果中 DBI 的值,最终可以确定 3 是 k 的最佳取值) 。
Process
k 的取值
- 分析结果 点击运行按钮,查看运行结果。 在 “Statistics” 一栏中,可以看到统计的结果。模型将数据聚集成 3 类,分别有 62,50,38 的数据量。可以发现这样的聚类与实际结果还是有点误差的。
在 “charts” 一栏中,也可以看到数据的可视化展示。如下图所示,可以发现这三个集群的特点:
代码语言:txt复制- 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 要大得多。
参考:
1. Introduction to K-means Clustering
2. K Means Clustering | Day 43 - 100 Days of ML Code