支持向量机、逻辑回归、决策树等经典的机器学习算法主要用于分类问题,即根据一些己给定类别的样本, 训练某种分类器,使得它能够对类别未知的样本进行分类。与分类问题不同,聚类是在事先并不知道任何样本类别标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高 , 不同类别之间的样本相似度低。分类问题属于监督学习的范畴 , 而聚类则是非监督学习。
K均值聚类( K-Means Clustering )是最基础和最常用的聚类算法。它的基本思想是 通过迭代方式寻找 K个簇(Cluster )的一种划分方案 , 使得聚类结果对应的代价函数最小。特别地,代价函数可以定义为各个样本距离所属簇中心点的误差平方和 其中 x i x_i xi 代表第i 个样本, c i c_i ci 是 x i x_i xi 所属于的簇, u c i u_{ci} uci 代表簇对应的中心点 , M是样本总数。
K 均值聚类的核心目标是将给定的数据集划分成 K 个簇,并给出每个数据对应的簇中心点。算法的具体步骤描述如下: ( 1 )数据预处理,如归一化、离群点处理等。 ( 2 )随机选取K个簇中心 。 ( 3 )定义代价函数: (4)令 t=0, 1 ,2, …为迭代步数,重复下面两步直到 J 收敛: · 对于每一个样本 x i x_i xi, 将其分配到距离最近的簇 · 对于每一个类簇 k,重新计算该类簇的中心 K 均值算法在迭代时,假设当前 J 没有达到最小值,那么首先固定簇中心{ µ k µ_k µk },调整每个样例 x i x_i xi所属的类别 c i c_i ci,来让 J函数减少,然后固定{ c i c_i ci} ,调整簇中心{ µ k µ_k µk}使J减小。这两个过程交替循环, J单调递减,当 J递减到最小值时,{ µ k µ_k µk}和{ c i c_i ci}也同时收敛。
下图是 K-means 算法的 个迭代过程示意图 。
K 均值算法有一些缺点,例如受初值和离群点的影响,每次的结果不稳定、结果通常不是全局最优而是局部最优解、无法很好地解决数据簇分布差别比较大的情况(比如一类是另一类样本数量的 100 倍)、不太适用于离散分类等 等。总结如下: ( 1 )需要人工预先确定初始 K值,且该值和真实的数据分布未必吻合。 ( 2 ) K 均值只能收敛到局部最优,效果受到初始值很大。 ( 3 )易受到噪点的影响。 ( 4 )样本点只能被划分到单一的类中 。
但是瑕不掩瑜, K 均值聚类的优点也是很明显和突出的,主要体现在:对于大数据集, K 均值聚类算法相对是可伸缩和高效的,它的计算复杂度是 O(NKt) 接近于线性,真中 N是数据对象的数目, K是聚类的簇数, t 是迭代的轮数。尽管算法经常以局部最优结束 , 但一般情况下达到的局部最优已经可以满足聚类的需求 。
调优一般可以从以下几个角度出发。
( 1 )数据归一化和离群点处理 K 均值聚类本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性的影响 。所以未做归一化处理和统一单位的数据是无法直接参与运算相比较的 。 同时, 离群点或者少量的噪声数据就会对均值产生较大的影响,导致中心偏移 , 因此使用 K 均值聚类算法之前通常需要对数据做预处理。
( 2 )合理选择 K值 K值的选择是 K 均值聚类最大的问题之一 , 这也是 K 均值聚类算法的主要缺点。 实际上,我们希望能够找到一些可行的办法来弥补这一缺点 ,或者说找到 K值的合理估计方法。 但是 , K值的选择一般基于经验和多次实验结果。 例如采用手肘法,我们可以尝试不同的 K值,并将不同 K值所对应的损失函数画成折线,横轴为 K的取值,纵轴为误差平万平日所定义的损失函数,如下图所示。 由图可见, K值越大,距离和越小;并且,当 K=3 肘,存在一个拐点,就像人的时部一样,当 Kε(1,3)时,曲线急速下降;当 K>3 时,曲线趋于平稳。 手肘法认为拐点就是 K的最佳值。
( 3 )采用核函数 采用核函数是另一种可以尝试的改进方向 。 传统的欧式距离度量方式 , 使得 K 均值算法本质上假设了各个数据簇的数据具有高一样的先验概率 ,并呈现球形或者高维球开三分布,这种分布在实际生活中并不常见。面对非凸的数据分布形状时,可能需要引入核函数来优化,这时算法又称为核 K 均值算法,是核聚类方法的一种 。 核聚类方法的主要思想是通过一个非线性映射, 将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率 , 从而在经典的聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。