“物以类聚,人以群分”, 所谓聚类就是将类似的元素分到一"类"(有时也被称为"簇"或"集合"), 簇内元素类似程度高, 簇间元素类似程度低. 经常使用的聚类方法有划分聚类, 层次聚类, 密度聚类, 网格聚类, 模型聚类等. 咱们这里重点介绍划分聚类.算法
划分聚类, 就是给定一个样本量为N的数据集, 将其划分为K个簇(K<N), 每个簇中至少包含一个样本点.函数
大部分的划分方法是基于距离的, 即簇内距离最小化, 簇间距离最大化. 经常使用的距离计算方法有: 曼哈顿距离和欧几里得距离. 坐标点(x1, y1)到坐标点(x2, y2)的曼哈顿距离和欧几里得距离分别表示为:大数据
为了达到全局最优解, 传统的划分法可能须要穷举全部可能的划分点, 这计算量是至关大的. 而在实际应用中, 一般会经过计算到均值或中心点的距离进行划分来逼近局部最优, 把计算到均值和到中心点距离的算法分别称为K-MEANS算法和K-MEDOIDS算法, 在这里只介绍K-MEANS算法.编码
K-MEANS算法有时也叫快速聚类算法, 其大体流程为:blog
第一步: 随机选取K个点, 做为初始的K个聚类中心, 有时也叫质心.原理
第二步: 计算每一个样本点到K个聚类中心的距离, 并将其分给距离最短的簇, 若是k个簇中均至少有一个样本点, 那么咱们就说将全部样本点分红了K个簇.方法
第三步: 计算K个簇中全部样本点的均值, 将这K个均值做为K个新的聚类中心.im
第四步: 重复第二步和第三步, 直到聚类中心再也不改变时中止算法, 输出聚类结果.数据
显然, 初始聚类中心的选择对迭代时间和聚类结果产生的影响较大, 选很差的话颇有可能严重偏离最优聚类. 在实际应用中, 一般选取多个不一样的K值以及初始聚类中心, 选取其中表现最好的做为最终的初始聚类中心. 怎么算表现最好呢? 能知足业务需求的, 且簇内距离最小的.img
簇内距离能够簇内离差平方和表示:
其中, K表示K个簇, nj表示第j个簇中的样本个数, xi表示样本, uj表示第j个簇的质心, K-means算法中质心能够表示为:
优势:
1. 原理简单, 计算速度快
2. 聚类效果较理想.
缺点:
1. K值以及初始质心对结果影响较大, 且很差把握.
2. 在大数据集上收敛较慢.
3. 因为目标函数(簇内离差平方和最小)是非凸函数, 所以经过迭代只能保证局部最优.
4. 对于离群点较敏感, 这是因为其是基于均值计算的, 而均值易受离群点的影响.
5. 因为其是基于距离进行计算的, 所以一般只能发现"类圆形"的聚类.
注意事项:
1. 因为其是基于距离进行计算的, 所以一般须要对连续型数据进行标准化处理来缩小数据间的差别.(对于离散型, 则须要进行one-hot编码)
2. 若是采用欧几里得距离进行计算的话, 单位的平方和的平方根是没有意义的, 所以一般须要进行无量纲化处理