聚类算法是一种无监督机器学习模型,可以直接从数据内在的性质中学习最优的划分结果或者确定离散标签类型。
k-maens算法在不带标签的多维数据集中寻找确定数量的簇。最优的聚类结果需要符合以下两个假设:
(1)“簇中心点”(cluster center)是属于该簇的所有数据点坐标的算术平均值;
(2)一个簇的每个点到该簇中心点的距离,比到其他簇中心点的距离短。
这两个假设是k-means模型的基础。
k-maens算法:期望最大化
算法在对数据分簇时,为了避免使用穷举法这种耗费大量时间和计算量的方法。
我们采用期望最大化(EM)算法,该方法包含以下步骤:
(1)猜测一些簇中心点;
(2)重复直至收敛。
a.期望步骤(E-step):将点分配至离其最近的簇中心点。
b.最大化步骤(M-step):将簇中心点设置为所有点坐标的平均值。
创建一部分数据:
使用聚类方法对上数据分类:
上述函数解释了期望最大化方法的核心内容。
期望最大化算法存在的问题
(1)可能无法达到全局最优结果
虽然EM最终收敛了,但是最终分类结果并不是全局最优配置。
(2)簇数量必须事先确定
必须告诉算法,簇的具体数量,因为算法无法从数据中自动学习到簇的数量。
(3)k-means算法只能确定线性聚类边界
k-means聚类边界总是线性的,当簇中心点呈现出非线性的复杂形状时,算法会失效。
(5)当数据量很大时,k-means会很慢
由于k-means每次迭代都要获取所有数据点,因此随着数据量的增加,算法会越来越慢。
解决办法时采用一种批处理方式,每次更新一个数据子集簇的中心点,在sklearn.cluster.MiniBatchKMeans中实现。
其它算法
针对k-means非概率性和仅根据簇中心点距离来指派簇的特点存在的问题。
提出了高斯混合模型(GMM)。
GMM通常被归类为聚类算法,但它本质上是一个密度估计算法。换言之,一个GMM的拟合结果并不是一个聚类模型,而是描述数据分布的生成概率模型。
如果采用高斯曲线的混合形式,可以实现对输入数据的总体分布建模,从而生成和输入数据分布类似的函数模型。因此,对于非线性数据,通过概率分布估计可以很好的拟合。
成分
GMM通过确定对应最优成分数量,对输入数据的总体分布建模。
k-means应用
用于对图像色彩的压缩。
每个像素被指定为了距离其最进簇中心点的颜色,最终得到了16类的颜色值。
虽然压缩后右图明显丢失了一部分“信息”,但是整体图像并没有改变,并且实现了将近一百万倍的压缩比!